📄 powell.for
字号:
SUBROUTINE POWELL(X,Y,FY,N,IMOS,ICOVG,XT,FT,IT)
DIMENSION X(N),Y(N),DIR(20,20),S(20),W(20),BEF(20)
ITER=0
IF(IT.GT.0) GO TO 101
XT=0.001
FT=0.001
101 ICOVG=0
N1=N-1
TD=FT*0.1
DO 2 I=1,N
DO 1 J=1,N
1 DIR(I,J)=0.0
2 DIR(I,I)=1.0
CALL OBF(X,FX)
STEP=1.0
102 IF(ITER.EQ.IMOS) GO TO 22
DO 4 I=1,N
4 BEF(I)=X(I)
F1=FX
SUM=0.0
DO 9 I=1,N
DO 5 J=1,N
5 S(J)=DIR(J,I)
CALL DSCPOW(X,FX,Y,FY,S,S,N,2,TD,1,ITER,IEX)
IF(IEX.EQ.1) GO TO 21
A=FX-FY
IF(A-SUM)7,7,6
6 ISUM=I
SUM=A
7 DO 8 J=1,N
8 X(J)=Y(J)
9 FX=FY
F2=FX
DO 10 I=1,N
10 W(I)=X(I)-BEF(I)
CALL DSCPOW(X,FX,Y,FY,W,W,N,2,TD,1,ITER,IEX)
IF(IEX.EQ.1) GO TO 21
DO 41 I=1,N
IF(W(I).EQ.0) GO TO 41
ALPH=ABS(Y(I)-X(I)/W(I))
GO TO 42
41 CONTINUE
42 IF(ALPH+1.-SQRT((F1-FY)/SUM))49,12,12
12 IF(ISUM-N)13,15,15
13 DO 14 I=ISUM,N1
I1=I+1
DO 14 J=1,N
14 DIR(J,I)=DIR(J,I1)
15 A=0.0
DO 16 J=1,N
DIR(J,N)=X(J)-BEF(J)
16 A=DIR(J,I)**2+A
A=1.0/SQRT(A)
DIR(J,N)=DIR(J,N)*A
17 S(J)=DIR(J,N)
49 FX=FY
DO 18 I=1,N
18 X(I)=Y(I)
ITER=ITER+1
19 IF(ABS(F1-FX).GT.(ABS(F1)+1.)*FT) GO TO 102
DO 20 I=1,N
IF(ABS(BEF(I)-X(I)).GT.(ABS(BEF(I))+1.)*XT) GO TO 102
20 CONTINUE
ICOVG=1
GO TO 23
21 ICOVG=-1
GO TO 23
22 ICOVG=0
23 CONTINUE
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -