code 34137;
procedure LSQDECOMP( A, N ,M ,N1 ,AUX ,AID ,CI );
value N , M ,N1;integer N,M,N1;array A,AUX, AID;
integer array CI;
begin integer J,K,KPIV,NR,S;boolean FSUM;
real BETA,SIGMA,NORM,AIDK,AKK,W,EPS;
array SUM[1:M];
NORM:=0 ; AUX[3]:=M;NR:=N1;FSUM:=true;
for K:=1 step 1 until M do
begin if K=N1+1 then begin FSUM:=true; NR:=N end;
if FSUM then
for J:=K step 1 until M do
begin W:=SUM[J]:= TAMMAT(K ,NR ,J ,J ,A ,A);
if W>NORM then NORM:=W
end; FSUM:=false;EPS:=AUX[2]*SQRT(NORM);
SIGMA:=SUM[K]; KPIV:=K;
for J:=K+1 step 1 until M do
if SUM[J]>SIGMA then
begin SIGMA:=SUM[J]; KPIV:=J end;
if KPIV^=K then
begin SUM[KPIV]:=SUM[K]; ICHCOL( 1 ,N ,K ,KPIV ,A) end;
CI[K]:=KPIV; AKK:=A[K,K];
SIGMA:=TAMMAT(K ,NR ,K ,K ,A ,A); W:=SQRT(SIGMA);
AIDK:=AID[K]:=if AKK<0 then W else -W;
if W<EPS then
begin AUX[3]:=K-1;goto ENDDEC end;
BETA:= 1/(SIGMA-AKK*AIDK); A[K,K]:=AKK-AIDK;
for J:=K+1 step 1 until M do
begin ELMCOL(K ,NR ,J ,K ,A ,A ,-BETA*TAMMAT(K ,NR ,
K ,J ,A ,A)); SUM[J]:=SUM[J]-A[K,J]**2
end;
if K=N1 then
for J:=N1+1 step 1 until N do
for S:=1 step 1 until M do
begin NR:=if S>N1 then N1 else S-1;
W:=A[J,S]-MATMAT(1 ,NR , J ,S ,A ,A);
A[J,S]:=if S>N1 then W else W/AID[S]
end
end FOR K;
ENDDEC:
end LSQDECOMP;
eop