Оптимизация методом золотого сечения
Программа оптимизации функции одной переменной методом золотого сечения.
program DifurEllips; uses Crt; var x,Aa,Bb,a,b,Fx,F1,F2,X1,X2,E:Real; k:integer; log:Boolean; Ch:Char; function F(x:Real):real; begin F:=3*sqr(sqr(X))-16*X*sqr(X)+25*X; end; Begin ClrScr; repeat log:=True; Writeln(' Vvedite dannie '); Writeln(' Nachalo intervala = '); readln(Aa); Writeln(' Konec intervala = '); readln(Bb); Writeln(' Zadat tochnost = '); read(E); writeln('*************Rezyltati scheta**************'); a:=Aa; b:=Bb; k:=0; X1:=a+0.382*(b-a); F1:=F(X1); writeln('X1=',X1:8:3,'F1=',F1:8:3,';'); X2:=a+0.618*(b-a); F2:=F(X2); writeln('X2=',X2:8:3,'F2=',F1:8:3,';'); while abs(b-a)>E do begin if F1>=F2 then begin a:=X1; X1:=X2; F1:=F2; X2:=a+0.618*(b-a); F2:=F(X2); writeln(k:4,'-9 ITERACHIYA X2=',X2:8:3,'F2=',F2:8:3,';'); end else if F1 < F2 then begin b:=X2; X2:=X1; F2:=F1; X1:=a+0.382*(b-a); F1:=F(X1); writeln(k:4,'-9 ITERACHIYA X1=',X1:8:3,'F1=',F1:8:3,';'); end; Inc(k); end; X:=(b+a)/2; Fx:=F(X); writeln('Reshenie : minF(x)=',Fx:8:5,' ,x iz[',Aa:6:4,',',Bb:6:4,'].'); writeln('X=',X:8:3); writeln('Zadana tochnost dostignyta na',k:4,'-u iterachii.'); write('Xotite prodolshat (Y/N) Y'); GoToXY(WhereX-1,WhereY); Ch:=readkey; writeln(Ch); if (Ch <> 'N')and(Ch<>'n') then log:=false; until log; End.
Скрин выполнения программы