code 34134;
procedure LSQORTDEC(A, N, M, AUX, AID, CI); value N, M;
integer N, M; array A, AUX, AID; integer array CI;
begin integer J, K, KPIV;
real BETA, SIGMA, NORM, W, EPS, AKK, AIDK;
array SUM[1:M];
NORM:= 0; AUX[3]:= M;
for K:= 1 step 1 until M do
begin W:= SUM[K]:= TAMMAT(1, N, K, K, A, A);
if W > NORM then NORM:= W
end;
W:= AUX[5]:= SQRT(NORM); EPS:= AUX[2] * W;
for K:= 1 step 1 until M do
begin 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, N, 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; "GO TO" ENDDEC end;
BETA:= 1 / (SIGMA - AKK * AIDK); A[K,K]:= AKK - AIDK;
for J:= K + 1 step 1 until M do
begin ELMCOL(K, N, J, K, A, A, - BETA * TAMMAT(K, N,
K, J, A, A)); SUM[J]:= SUM[J] - A[K,J] ** 2
end
end FOR K;
ENDDEC:
end LSQORTDEC
eop