code 34420; procedure DECSYMTRI(DIAG, CO, N, AUX); value N; integer N; array DIAG, CO, AUX; begin integer I, N1; real D, R, S, U, TOL, NORM, NORMR; TOL:= AUX[2]; D:= DIAG[1]; R:= CO[1]; NORM:= NORMR:= ABS(D) + ABS(R); if ABS(D) <= NORMR * TOL then begin AUX[3]:= 0; AUX[5]:= D; goto EXIT end; U:= CO[1]:= R / D; N1:= N - 1; for I:= 2 step 1 until N1 do begin S:= R; R:= CO[I]; D:= DIAG[I]; NORMR:= ABS(S) + ABS(D) + ABS(R); D:= DIAG[I]:= D - U * S; if ABS(D) <= NORMR * TOL then begin AUX[3]:= I - 1; AUX[5]:= D; goto EXIT end; U:= CO[I]:= R / D; if NORMR > NORM then NORM:= NORMR end; D:= DIAG[N]; NORMR:= ABS(D) + ABS(R); D:= DIAG[N]:= D - U * R; if ABS(D) <= NORMR * TOL then begin AUX[3]:= N1; AUX[5]:= D; goto EXIT end; if NORMR > NORM then NORM:= NORMR; AUX[3]:= N; AUX[5]:= NORM; EXIT: end DECSYMTRI; eop