logo资料库

随机方向法程序及结果.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
C C ============== PROGRAM RANDIR ============== DIMENSION X(25),GX(50) COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR READ(*,*) N,KG,NSR WRITE(*,1001) WRITE(*,1002) N,KG,NSR 1001 1002 FORMAT(25X,'======== PRIMARY DATA ========'/) FORMAT(5X,'N=',I4,2X,'KG=',I4,2X,'NSR=',I4) CALL MAISUB(N,KG,X,GX) STOP END C C ============================ SUBROUTINE MAISUB(N,KG,X,GX) ============================ DIMENSION X(N),GX(KG),SF(25),BL(25),BU(25) COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR READ(*,*) (X(I),I=1,N) READ(*,*) EPS1,EPS2,T0 READ(*,*) KWR READ(*,*) (BL(I),I=1,N),(BU(I),I=1,N) CALL FFX(N,X,FX) WRITE(*,132) (X(I),I=1,N) WRITE(*,133) FX WRITE(*,104) EPS1,EPS2,T0 RM=2657863.0 CALL XRAN(N,KG,X,GX,RM,BL,BU) WRITE(*,132) (X(I),I=1,N) CALL FFX(N,X,FX) WRITE(*,133) FX WRITE(*,134) (GX(K),K=1,KG) 104 FORMAT(5X,'EPS1=',E9.1,2X,'EPS2=',E9.1,2X,'T0=',F10.6) WRITE(*,105) 105 FORMAT(/22X,'======== ITERATION COMPUTE ========'/) ITE=1 CALL FFX(N,X,F0) 107 TH=T0 CALL SFEAS(N,KG,X,GX,SF,F0,TH,RM) CALL FFX(N,X,FX)
FL=FX 113 TH=1.3*TH DO 114 I=1,N 114 X(I)=X(I)+TH*SF(I) CALL FFX(N,X,FX) CALL GGX(N,KG,X,GX) DO 115 K=1,KG IF(GX(K).GE.1E-15) GOTO 116 115 CONTINUE IF(FX.GT.FL) GOTO 116 FL=FX GOTO 113 116 DO 117 I=1,N 117 X(I)=X(I)-TH*SF(I) TH=0.7*TH DO 118 I=1,N 118 X(I)=X(I)+TH*SF(I) CALL FFX(N,X,FX) CALL GGX(N,KG,X,GX) DO 119 K=1,KG IF(GX(K).GE.1E-15) GOTO 116 119 CONTINUE IF(FX.GT.FL) GOTO 116 IF(ABS(F0-FX).LT.ABS(F0)*EPS1+EPS2) GOTO 129 IF(TH.LT.EPS1) GOTO 129 IF(KWR.GT.0) GOTO 125 IF((ITE/10)*10.NE.ITE) GOTO 128 125 WRITE(*,126) ITE,FX IF(KWR.LE.0) GOTO 128 WRITE(*,127) (X(I),I=1,N) 126 FORMAT(/' ***** ITE= ',I6,5X,'FX=',E15.6) 127 FORMAT(5X,'X :'/(5X,5E15.6)) 128 ITE=ITE+1 F0=FX GOTO 107 129 WRITE(*,130) 130 FORMAT(/22X,'======== OPTIMUM SOLUTION ========'/) WRITE(*,131) ITE,NFX WRITE(*,132) (X(I),I=1,N) WRITE(*,133) FX WRITE(*,134) (GX(K),K=1,KG) 131 FORMAT(5X,'ITE=',I6,2X,'NFX=',I6) 132 FORMAT(5X,'X :'/(5X,5E15.6)) 133 FORMAT(5X,'FX=',E15.6)
134 FORMAT(5X,'GX:'/(5X,5E15.6)) RETURN END C C ======================= SUBROUTINE RANDOM(Q,RM) ======================= RM35=2.0**35 RM36=2.0*RM35 RM37=2.0*RM36 RM =5.0*RM IF(RM.GE.RM37) RM=RM-RM37 IF(RM.GE.RM36) RM=RM-RM36 IF(RM.GE.RM35) RM=RM-RM35 Q=RM/RM35 RETURN END C C =================================== SUBROUTINE XRAN(N,KG,X,GX,RM,BL,BU) =================================== DIMENSION X(N),GX(KG),BL(N),BU(N) COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR 201 CALL GGX(N,KG,X,GX) DO 203 K=1,KG IF(GX(K).LE.0.0) GOTO 203 DO 202 I=1,N CALL RANDOM(Q,RM) 202 X(I)=BL(I)+Q*(BU(I)-BL(I)) GOTO 201 203 CONTINUE RETURN END C C ======================== SUBROUTINE SRAN(N,SR,RM) ======================== DIMENSION SR(N) RQU=0.0 DO 301 I=1,N
CALL RANDOM(Q,RM) SR(I)=2.0*Q-1.0 301 RQU=RQU+SR(I)*SR(I) DO 302 I=1,N 302 SR(I)=SR(I)/SQRT(RQU) RETURN END C C ======================================= SUBROUTINE SFEAS(N,KG,X,GX,SF,F0,TH,RM) ======================================= DIMENSION X(N),SF(N),GX(KG),X0(25),XL(25),SR(25) COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR DO 400 I=1,N 400 X0(I)=X(I) FL=F0 401 DO 405 K=1,NSR CALL SRAN(N,SR,RM) DO 402 I=1,N 402 X(I)=X0(I)+TH*SR(I) CALL FFX(N,X,FX) CALL GGX(N,KG,X,GX) DO 403 KK=1,KG IF(GX(KK).GE.1E-15) GOTO 405 403 CONTINUE IF(FX.GE.FL) GOTO 405 FL=FX DO 404 I=1,N SF(I)=SR(I) 404 XL(I)=X(I) 405 CONTINUE DO 406 I=1,N 406 X(I)=XL(I) IF(ABS(FL-F0).GE.1E-15) GOTO 410 TH=0.7*TH IF(TH.GT.1E-7) GOTO 401 WRITE(*,407) (X(I),I=1,N) WRITE(*,408) FL WRITE(*,409) (GX(K),K=1,KG) 407 FORMAT(5X,'X :'/(5X,5E15.7)) 408 FORMAT(5X,'FX:'/5X,E15.7) 409 FORMAT(5X,'GX:'/(5X,5E15.7)) PAUSE 1111
410 IF(KWR.LE.0) GOTO 412 WRITE(*,411) (SF(I),I=1,N) 411 FORMAT(5X,'SF:'/(5X,5E15.6)) 412 RETURN END SUBROUTINE FFX(N,X,FX) DIMENSION X (N) COMMON/ONE/NFX,NSR,KWR NFX=NFX+1 FX=(X(1)-2)*(X(1)-2)+(X(2)-1)*(X(2)-1) RETURN END SUBROUTINE GGX (N,KG,X,GX) DIMENSION X(N),GX(KG) GX(1)=X(1)*X(1)-X(2) GX(2)=X(1)+X(2)-2 RETURN END
2,2,2 ======== PRIMARY DATA ======== N= 2 KG= 2 NSR= 2 3.0,3.0 1E-6,1E-6,0.2 1 0.0,0.0,-2,4,-2,4 X : 0.300000E+01 0.300000E+01 0.500000E+01 FX= EPS1= 0.1E-05 EPS2= 0.1E-05 T0= 0.200000 X : -0.773540E-03 0.773540E-02 0.498768E+01 FX= GX: -0.773480E-02 -0.199304E+01 ======== ITERATION COMPUTE ======== SF: 0.885695E+00 0.464268E+00 ***** ITE= 1 FX= 0.268543E+01 X : SF: 0.526026E+00 0.283876E+00 0.577783E+00 0.816190E+00 ***** ITE= 2 FX= 0.127989E+01 X : SF: 0.887499E+00 0.794501E+00 0.196116E+00 0.980581E+00 ***** ITE= 3 FX= 0.112848E+01 X : SF: 0.938965E+00 0.105183E+01 0.431229E+00 -0.902242E+00 ***** ITE= 4 FX= 0.103900E+01 X : 0.981353E+00 0.963143E+00
SF: 0.196116E+00 0.980581E+00 ***** ITE= 5 FX= 0.102014E+01 X : SF: 0.990003E+00 0.100639E+01 0.327987E+00 -0.944682E+00 ***** ITE= 6 FX= 0.100929E+01 X : 0.995405E+00 0.990832E+00
分享到:
收藏