用MATLAB实现最速下降法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验的题目和要求

一、所属课程名称:

最优化方法

二、实验日期:

2010年5月10日~2010年5月15日

三、实验目的

掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。

二、实验要求

用MA TLA B实现最速下降法,牛顿法和共轭梯度法求解实例。

四、实验原理

最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。牛顿法是利用目标函数)(x f 在迭代点k x 处的T aylor 展开式作为模型函数,并利用这个二次模型函数的极

小点序列去逼近目标函数的极小点。共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向k d 仅仅是负梯度方向k g -与上一次接

待的搜索方向1-k d 的组合。

五.运行及结果如下:

最速下降法:

题目:f=(x-2)^2+(y-4)^2

M文件:

fu ncti on [R,n]=stee l(x0,y0,e ps)

syms x;

syms y ;

f=(x-2)^2+(y-4)^2;

v=[x,y];

j=jac obi an(f ,v);

T=[s ubs(j(1),x,x0),subs (j (2),y,y0)];

temp=s qrt((T(1))^2+(T (2))^2);

x 1=x0;y 1=y 0;

n=0;

sym s k k;

w hi le (temp>eps )

d=-T;

f1=x 1+kk*d(1);f2=y1+k k*d(2);

fT=[su bs(j (1),x,f1),sub s(j(2),y,f2)];

fu n=sqrt((fT(1))^2+(fT(2))^2);

Mini=Gold(fun,0,1,0.00001);

x0=x1+Mini*d(1);y0=y1+Mini*d(2);

T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2);

x1=x0;y1=y0;

n=n+1;

end

R=[x0,y0]

调用黄金分割法:

M文件:

functionMini=Gold(f,a0,b0,eps)

syms x;format long;

syms kk;

u=a0+0.382*(b0-a0);

v=a0+0.618*(b0-a0);

k=0;

a=a0;b=b0;

array(k+1,1)=a;array(k+1,2)=b;

while((b-a)/(b0-a0)>=eps)

Fu=subs(f,kk,u);

Fv=subs(f,kk,v);

if(Fu<=Fv)

b=v;

v=u;

u=a+0.382*(b-a);

k=k+1;

elseif(Fu>Fv)

a=u;

u=v;

v=a+0.618*(b-a);

k=k+1;

end

array(k+1,1)=a;array(k+1,2)=b;

end

Mini=(a+b)/2;

输入:

[R,n]=steel(0,1,0.0001)

R= 1.99999413667642 3.99999120501463 R = 1.99999413667642 3.99999120501463

n= 1

牛顿法:

题目:f=(x-2)^2+(y-4)^2

M文件:

syms x1x2;

f=(x1-2)^2+(x2-4)^2;

v=[x1,x2];

df=jacobian(f,v);

df=df.';

G=jacobian(df,v);

epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=su bs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0; mul_count=mul_count+12;sum_count=sum_count+6;

while(norm(g1)>epson)

p=-G1\g1;

x0=x0+p;

g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});

G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});

k=k+1;

mul_count=mul_count+16;sum_count=sum_count+11;

end;

x0

mul_count

sum_count

结果::k= 1

x0=

4

mul_count = 28

sum_count = 17

共轭梯度法:

题目:f=(x-2)^2+(y-4)^2

M文件:

functionf=conjugate_grad_2d(x0,t)

x=x0;

symsxi yi a

f=(xi-2)^2+(yi-4)^2;

fx=diff(f,xi);

fy=diff(f,yi);

fx=subs(fx,{xi,yi},x0);

fy=subs(fy,{xi,yi},x0);

fi=[fx,fy];

count=0;

while double(sqrt(fx^2+fy^2))>t

s=-fi;

相关文档
最新文档