azure011328

导航

 

今天学会操作matlab编译器以及写了工程数学的黄金分割法

function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)%输入:phi是目标函数,a,b是搜索区间的两个端点delta,epsilon分别是自变量和函数值的容许误差9%输出:s,phis分别是近似极小点和极小值,G是nx4矩阵。其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],E=[ds,dphi],分别是s和phis的误差限

t=(sqrt(5)-1)/2;h=b-a;

phia=feval(phi,a);phib=feval(phi,b);

p=a+(1-t)*h;q=a+t*h;

phip=feval(phi,p);phiq=feval(phi,q);k=1;G(k,:)=[a,p,q,b,h];

while(h>delta)

if(phip<phiq)

b=q;phib=phiq;q=p;phiq=phip;

h=b-a;p=a+(1-t)*h;phip=feval(phi,p);

else

a=p; phia=phip;p=q;phip=phiq;

h=b-a; q=a+t*h;phiq=feval(phi,q);

end

k=k+1; G(k,:)=[a,p,q,b,h];

end

ds=abs(b-a);dphi=abs(phib-phia);

if(phip<=phiq)

s=p;phis=phip;

else

s=q;phis=phiq;

end

E=[ds,dphi];

 

posted on 2024-05-22 08:08  淮竹i  阅读(20)  评论(0)    收藏  举报