📄 sub lsearc.for
字号:
SUBROUTINE LSEARC(N,ME,MI,M,X,NEWX,D1,D2,BASIC,OFUN,CFUN,
* QPOBJ,PPRA,PFUN,OLDPF,EPS,INDEX,NF)
DOUBLE PRECISION X(N),NEWX(N),D1(N),D2(N),PPRA,PFUN,NEWPF,OLDPF,
* PRED,CFUN(M),D1NORM,MINST,ST,QPOBJ,OFUN,EPS,BETA,GAMMA
LOGICAL BASIC
DATA BETA,GAMMA/1.0D-1,1.0D-1/
D1NORM=0.0D0
DO 1 J=1,N
D1NORM=D1NORM+D1(J)*D1(J)
1 CONTINUE
IF (D1NORM.GT.1.0D0)THEN
D1NORM=DSQRT(D1NORM)
MINST=EPS/D1NORM
ELSE
MINST=EPS
ENDIF
PRED=OFUN+QPOBJ-PFUN
ST=1.0D0
2 DO 3 J=1,N
IF (BASIC)THEN
NEWX(J)=X(J)+ST*D1(J)
ELSE
NEWX(J)=X(J)+ST*D1(J)+ST*ST*(D2(J)-D1(J))
ENDIF
3 CONTINUE
CALL FVAL(N,ME,MI,M,NEWX,OFUN,CFUN)
NF=NF+1
CALL PVAL(ME,MI,M,OFUN,CFUN,PPRA,NEWPF)
IF (NEWPF.LT.(PFUN+BETA*ST*PRED))GOTO 4
ST=GAMMA*ST
IF (ST.GT.MINST)GOTO 2
INDEX=5
4 OLDPF=PFUN
PFUN=NEWPF
IF (BASIC)THEN
WRITE(6,100)
100 FORMAT('ONE-DEMENSIONAL SEACH-BASIC SEARCH DIRECTION')
ELSE
WRITE(6,110)
110 FORMAT('ONE-DEMENSIONAL SEACH-SECOND ORDER SEARCH DIRECTION')
ENDIF
WRITE(6,120)D1NORM
120 FORMAT('NORM OF BASIC SEARCH DIRECTION=',F12.5)
WRITE(6,130)ST
130 FORMAT('STEP-SIZE='F12.5)
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -