Главная страница  Программы проектирования 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [ 90 ] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100]

с ПРИМЕР ИСПОЛЬЗОВАНИЯ ПОДПНОГГ-АММИ P0ISK4 С

IlIMEeIOM х(1в),вх(1в)

EXTERNAL FUN,OUT

DATA N/2/,X/-1.2,l./,DX/l.,l./,EPS/l.E-5/,FM/«./,NFE:/5e0/

CALL P0ISH:4(X,FX,N,DX,EFS,FM,NrE,aiN,0UT,l)

STOP

С ПОДПРОГРАММА 141ЧИСЛЕНИЯ ♦УНКЦИИ

SUBROUTINE FUN(X,Y) DIMENSION X(l>

Y =iee.«(X(2)-X(l>»»2)»»2+(l.-X(l))»»2

RETURN

С ПОДПРОГТАМ«* ВЫВОДА РЕЗУЛЬТАТОВ С

SUBROUTINE OUT(X,FX,N,NFE) DIMENSION Х(1)

IF(NFE.EQ.1> PRINf 5,(I,1=1,N) PRINT 1«,NFE,FX,(X(I),I=1,N) 5 F0RMAT<7X,NFE,3X,F<X),1«I12) le F0RMAT(Iie,ie£12.4> RETURN END

С ПОДПРОГРАМ»*» Pt)ISK4 С

SUHaxrriNE POISK4(X,FX,N,DX,EPS,FM,NFEMAX,FUN,OUT,I0UT)

DIMENSION X(N),DX(N),Y(ie),Z(l»>,S(ie,ie),31(l«,ie) j С Y,Z - РАБОЧИЕ МАССИВЫ РАЗМЕРОМ HE МЕНЕЕ N С S,S1 - РАБОЧИЕ МАССИВЫ PASJCFW НЕ КЕНЕЕ (N,M>

DATA GAHIN/e.e2/

CM.L FUN(X,FX>

NFE=1

IFdOUT.NE.e) a*± OUT<X,FX,N,NFE> IF(N.GT.l) GO TO 25 С ОДНОМЕРНОЙ ПОИСК Y(1)=X<1)+DX(1) 5 CALL FUN(Y,FY) NFE=NFE4-1

1F<FX.LE.FY) GO TO 19

G=X(1)

X(1>=Y(1)

Y(1)=G

G=FX

FX=FY

FY=G

IF(IOUT.EQ.l) CALL OUT(X,FX,N,NFE> 1» Z(1>=X(1)+(X(1)-Y(1)> CALL FUN(Z,FZ> NFE:=NFE+1

IFCFX.LE.FZ.OR.FX.LE.FM.OR.NFE.GE.NFErtAX) GO TO 15 X(1)=Z<1) FX=FZ GO TO 10 15 D=<FY-FX)+(FZ-FX)

IF(D.LE.».> GO TO 125 GAMA=(FY-FZ)/(2.»D) IF(ABS(GAMA).GT.GAMIN) GO. TO 2в IF(GAm.GE.e.) GAm=GAMIN IF(GAIiA.LE.e.) GAfW=-GAMIN

10-69 27:}



2* Y(1)=X(1)+G<*W»()((1>-Y(1>)

IF(ABS(Z(1)-X(1>).LE.EPS»AB3(X(1))) GO TO 125 IFCNFE.GE.NFEMAX.OR.FX.LE.Frt> GO TO IQZi

GO TO 5 С МНОГОИЕРНЫЙ ПОИСК 25 no 35 1=1, N

DO 3» J=1,N 3* S<I,J)>=e. 35 S<I,I>=DX<I)

ALFA=1.

С ЦИКЛ ПО НАПРАВЛЕНИЯМ ПОИСКА Ч« DO 75 1=1,N

Е>=е.

А-*. В=1.

DO 45 J=1,N Y<J)=X(J)<A»S(J,I) 45 E=e+ABS<Y(J)-X(J))/(ABS(X<J)+l.E-ie)) С ПРОВЕРКА УСЛОВИИ ОКОНЧАНИЯ ПОИСКА

IF<E.LE.EPS.OR.FX.LE,FM.0R.NFE.GE.NFEMAX) GO ТО 125

CALL FUM(Y,FY)

NFE=NFE+1

IFCFX.LE.FY) GO TO 55 DO 5» J=1,N 6=X<J) X(J)=Y(J) 5» Y<J)=G G=FX FX=FY FY=G

A=B B=G

55 DO 6» J=1,N

6* Z<J)=X<J)+(X(J)-Y<J))

C=A+(A-B)

CALL FUN<Z,FZ)

NFE-NFE+1

IFCFX.LE.FZ.OR.FX.LE.FM.OR.NFE.Oe.NFEMAX) GO TO 70 DO 65 J=1,N 65 X(J>=Z(J> FX»FZ A«C

GO TO 55

С KBtOFAnHHM »«Ш>1гаЛЯЦИЯ HO ТОЧКАМ Y, X, Z 7* 1>=(FY-FX)+(FZ-FX)

IF<D.LE.0.) GO TO 90

GAMA»=<FY-FZ)/(2.«D)

DO 75 >1,N 75 Y(J)=X(J)-»-G«1A»(X<J)-Y(J))

CALL FUN<Y,FY)

NFE=NFE+1

В=АИЗАМА»<А-В)

«.A»*=ALFA»ABS(A-C)/SORT(D)

IF<ALAH.t:T.0.25) AU№».25

IF(ALAM.0T.4.) ЛАМ=4.

IF(B.LT.0.) «J-ALAM

DO 8» J>1,N 8» S(J,I>-MJtf«KS(J,I>

IF<FX.l.FY) GO TO 9*

DO 85 J>1,N 85 X(J)fcY<J)

FX-FY



9* IF<A£S(A).0T.1.»»ABS<ALAH)) ALFA=2.»ALFA

IF(ABS<A).LT.e.2S»WBS<ALAI1)> ALFft-*.5»ALFA

IF<A.KE.e..AND.IOUT.EQ.l) CAU. OUT(X,FX,N,NFE) 95 CONTINUC С ПРЕОЕРАЗСКЙНИЕ mwmt НАПРАВЛЕНИЙ

G=l./StlRT<F1.0AT<N))

DO 115 I=1,M

IF(I.EQ.l) GO TO IW

0=1 ./SQRT(FLOAT< (f-I+2>»(№-I+l)))

G1=FL0AT<M-I+1)»6 100 DO 110 J=1,H

A=0.

DO 105 K=I,M 105 A=A+S(J,K)

IF(I.fE.l) A= G1»S(J,I-1)-A 110 S1(J,I>=A 115 CONTINUE

DO 120 1=1,N

DO 120 J=1,H 120 S<I,J)=S1<I,J)

GO TO 40

125 IF(IOUT.NE.0.) CALL OUT(X,FX,N,ICE> RETURN END

N - размерность вектора X,

DX - вектор начальных приращений по параметрам,

EPS - относительная погрешность нахождения оптимальной точки,

рекомендуется задавать в диапазоне 10-... 10-*, FM - значение, до которого нужно минимизировать целевую функ-

цию, при FX<FM поиск прекращается, NFEMAX - максимальное число выч1исле»ий целевой функция, FUN - имя подпрограммы вычисления целевой функции, ее параметры: X - вектор параметров; FX - значение функции в точке X,

Юит - целое число, равное О, если промежуточные результаты ие нужно выводить, и 1, если следует вывести промежуточные результаты,

OUT - имя подпрограммы, организующей вывод промежуточных результатов, ее параметры: X - текущее значение вектора параметров, FX - значение целевой функции в точке X, N - размерность вектора X, NFE - число вычислений целевой функции.

Пример. Для иллюстрации применения подпрограммы использована та же функция Розенброка (11.7).




[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [ 90 ] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100]

0.0212