机械优化设计作业——梯度法求解

梯 度 法 求 最 优 解 问 题

姓 名:李刚 学号:2016210309

1、所求问题

2 用梯度法求目标函数F(x)?1.5x12?0.5x2?x1x2?2x1的无约束最优解,已知初始点

X(0)?[?2,4]T,??0.02或??0.002

2、Matlab编程实现

建立了一个Stair(e).m的子函数来求解,e为函数的输入变量,即问题中的?。只需要在Matlab“命令行窗口”去调用此函数即可,用??0.02或??0.002去代替Stair(e).m函数中的输入变量e即可。

程序源码:

function z =Stair(e)

%输入变量e来代替求解精度问题,方便求解不同静精度问题 syms x1 x2 a

f=1.5*x1^2+0.5*x2^2-x1*x2-2*x1; %目标函数 dx1=diff(f,x1); %对x1求偏导 dx2=diff(f,x2); %对x2求偏导 g=[dx1,dx2]; %梯度

X=[x1,x2]; %建立坐标变量 X0=[-2,4]; %初始点坐标

g0=subs(g,X,X0); %subs函数,用X0代替g函数中的X G=norm(g0); %梯度的模

k=0; %迭代次数变量

F=subs(f,X,X0); %subs函数,用X0代替f函数中的X F=double(F); %数据类型转换

fprintf('迭代次数k=%d;',k);

fprintf('坐标值x1=%5.7f ',X0(1)); fprintf('x2=%5.7f;',X0(2));

%fprintf('坐标值 X=%d %d\\n',X0); fprintf('函数值F=%5.7f\\n\\n',F)

for i=1:20 %迭代求解

if (G>e) %判断是否满足精度要求 k=k+1;

d=-g0/G; %确定搜索方向

F=subs(f,X,X0); %计算F(x)目标函数的值

fm=subs(f,X,X0+a*d); %求最优步长,以计算新的迭代点 fmd=diff(fm); %求偏导

a0=solve(fmd); %求出偏导函数的零解,求得最优步长 X0=X0+a0*d; %求得新的迭代点 g0=subs(g,X,X0); %计算新的梯度 G=norm(g0); %计算新的梯度的模 g0=double(g0); %数据类型转化 G=double(G); X0=double(X0);

F=double(subs(f,X,X0)); a0=double(a0);

%结果输出

fprintf('迭代次数k=%d;',k); fprintf('坐标值x1=%5.7f ',X0(1)); fprintf('x2

>>灞曞紑鍏ㄦ枃<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4