www.pudn.com > Fortran.zip > AGSDL.FOR, change:1994-06-12,size:565b
SUBROUTINE AGSDL(A,B,N,X,EPS,L) DIMENSION A(N,N),B(N),X(N) DOUBLE PRECISION A,B,X,T,S,P,Q DO 5 I=1,N IF (ABS(A(I,I))+1.0.EQ.1.0) THEN L=0 WRITE(*,100) RETURN END IF 5 CONTINUE 100 FORMAT(1X,' FAIL') L=100 DO 10 I=1,N 10 X(I)=0.0 20 P=0.0 L=L-1 DO 50 I=1,N T=X(I) S=0.0 DO 30 J=1,N IF (J.NE.I) S=S+A(I,J)*X(J) 30 CONTINUE X(I)=(B(I)-S)/A(I,I) Q=ABS(X(I)-T)/(1+ABS(X(I))) IF (Q.GT.P) P=Q 50 CONTINUE IF ((P.GE.EPS).AND.(L.NE.0)) GOTO 20 IF (L.EQ.0) WRITE(*,100) RETURN END