www.pudn.com > Fortran.zip > AGRAD.FOR, change:1994-06-12,size:651b
SUBROUTINE AGRAD(A,N,B,EPS,X,P,R,S,Q) DIMENSION A(N,N),B(N),X(N),P(N),R(N),S(N),Q(N) DOUBLE PRECISION A,B,X,P,R,S,Q,ALPHA,BETA,D,E DO 10 I=1,N X(I)=0.0 P(I)=B(I) R(I)=B(I) 10 CONTINUE I=1 20 CALL BRMUL(A,P,N,N,1,S) D=0.0 E=0.0 DO 30 K=1,N D=D+P(K)*B(K) E=E+P(K)*S(K) 30 CONTINUE ALPHA=D/E DO 40 K=1,N 40 X(K)=X(K)+ALPHA*P(K) CALL BRMUL(A,X,N,N,1,Q) D=0.0 DO 50 K=1,N R(K)=B(K)-Q(K) D=D+R(K)*S(K) 50 CONTINUE BETA=D/E D=0.0 DO 55 K=1,N 55 D=D+R(K)*R(K) D=SQRT(D) IF (D.LT.EPS) RETURN DO 60 K=1,N 60 P(K)=R(K)-BETA*P(K) I=I+1 IF (I.LE.N) GOTO 20 RETURN END