📄 fr.for
字号:
SUBROUTINE FR(X,Y,FY,GX,N,IMOS,ICOVG,TL,IT)
DIMENSION X(N),Y(N),GX(N),S(20),DELG(20)
IF(IT.GT.0) GO TO 151
TL=0.0001
151 ITER=0
ICOVG=0
ER1=0.01
ER2=0.001
ET1=0.001
ET2=0.001
IRESET=N+1
INDEX=IRESET
CALL OBF(X,FX)
CALL DER(X,GX)
GXN=0.0
DO 2 I=1,N
DELG(I)=-GX(I)
2 GXN=GXN+GX(I)*GX(I)
GXN=SQRT(GXN)
1 IF(GXN.LE.TL) GO TO 60
IF(ITER.GE.IMOS) GO TO 80
IF(INDEX.NE.IRESET) GO TO 90
5 INDEX=0
DO 10 I=1,N
S(I)=DELG(I)
10 GX(I)=DELG(I)
130 TD=ET2*GXN
IF(TD.LT.ET1) GO TO 21
TD=ET1
21 CALL DSCPOW(X,FX,Y,FY,GX,GX,N,2,TD,1,ITER,IEX)
IF(IEX.NE.1) GO TO 31
ICOVG=-1
RETURN
31 ITER=ITER+1
INDEX=INDEX+1
CALL DER(Y,GX)
GXN0=GXN
GXN=0.0
DO 50 I=1,N
DELG(I)=-GX(I)
GXN=GXN+GX(I)*GX(I)
50 X(I)=Y(I)
FX=FY
GXN=SQRT(GXN)
GO TO 1
90 R=GXN*GXN/(GXN0*GXN0)
SN=0.0
GS=0.0
DO 51 I=1,N
S(I)=DELG(I)+R*S(I)
SN=SN+S(I)*S(I)
GS=GS+GX(I)*S(I)
51 GX(I)=S(I)
SN=SQRT(SN)
ER=ER2*GXN
IF(ER1.GT.ER) GO TO 52
ER=ER1
52 IF(GS.GT.-ER*GXN*SN) GO TO 5
GO TO 130
60 ICOVG=1
80 RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -