- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最优化方法编程
通过matlab编程,对老师上课讲的几种方法进行程序实现,并对算法的原理进行简要的描述。
(二)抛物线法
例3:求函数的最小值,初始搜索区间为[0,3],终止误差为=0.05
抛物线法的matlab程序为:
function[E,n]=pao(F_1,a,b,l)
xa(1)=a;xc(1)=b;n=1;
xb(1)=(xa(1)+xc(1))/2;
Xa(1)=feval(F_1,xa(1));Xb(1)=feval(F_1,xb(1));Xc=feval(F_1,xc(1));
x(1)=(det([1 Xa(1) xa(1)^2;1 Xb(1) xb(1)^2;1 Xc(1) xc(1)^2])/det([1 xa(1) xa(1)^2;1 xb(1) xb(1)^2;1 xc(1) xc(1)^2]))/(-2*(det([1 xa(1) Xa(1);1 xb(1) Xb(1);1 xc(1) Xc(1)])/det([1 xa(1) xa(1)^2;1 xb(1) xb(1)^2;1 xc(1) xc(1)^2])));
X(1)=feval(F_1,x(1));
Y(1)=abs(x(1)-xb(1));
while(Y(n)l)
if Xc(n)Xa(n)
k2=sort([xa(n) xb(n) x(n)]);
xa(n+1)=k2(1);xb(n+1)=k2(2);xc(n+1)=k2(3);
else
k2=sort([xb(n) xc(n) x(n)]);
xa(n+1)=k2(1);xb(n+1)=k2(2);xc(n+1)=k2(3);
end
n=n+1;
Xa(n)=feval(F_1,xa(n));Xb(n)=feval(F_1,xb(n));Xc(n)=feval(F_1,xc(n));
x(n)=(det([1 Xa(n) xa(n)^2;1 Xb(n) xb(n)^2;1 Xc(n) xc(n)^2])/det([1 xa(n) xa(n)^2;1 xb(n) xb(n)^2;1 xc(n) xc(n)^2]))/(-2*(det([1 xa(n) Xa(n);1 xb(n) Xb(n);1 xc(n) Xc(n)])/det([1 xa(n) xa(n)^2;1 xb(n) xb(n)^2;1 xc(n) xc(n)^2])));
X(n)=feval(F_1,x(n));
Y(n)=abs(x(n)-xb(n));
end
E=[xa xb xc x Xa Xb Xc X Y];
disp( xa xb xc x f(xa) f(xb) f(xc) f(x) !x-xb!)
function y=F_1(x)
y=x^3-3*x+2;
运行语句:[E,n]=pao(F_1,0,3,0.05)
运行结果:
当运算5次后|x-xb|=0.01760.05,满足精度要求,此时求得的最优解为1.0002,通过求导可知其最优解为1,所以用程序算的结果已经是非常的接近了。
(三)最速下降法
例4:用最速下降法求解,初始点为【1,1】=0.1
最速下降法的matlab程序:
clear
xx=-2:0.01:2;
yy=-2:0.01:2;
[X,Y]=meshgrid(xx,yy);
for i=1:401
for j=1:401
y(1)=X(i,j);
y(2)=Y(i,j);
Z(i,j)=f_df(y);
end
end
hold on
%mesh(X,Y,Z)
contour(X,Y,Z,50)
xlabel(x)
ylabel(y)
zlabel(z)
%hold on
syms x1 x2 f lmda
x=[1 1];
plot(x(1),x(2),*);
[fx,df]=f_df(x);
d=-df;
xs=[x1 x2];
[h,dh]=f_df(xs);
while(sqrt(df(1)^2+df(2)^2)0.1)
xs(1)=x(1)+lmda*d(1);
xs(2)=x(2)+lmda*d(2);
h1=compose(h,xs(1));
h2=compose(h1,xs(2));
dh2=diff(h2,lmda);
lm=solve(dh2);
lm=double(lm);
x(1)=x(1)+lm*
文档评论(0)