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