您好,欢迎访问三七文档
优化设计及matlab程序设计一、优化设计题目15、目标函数:22212312132312min(())220.522+322fxxxxxxxxxxxx要求:分别采用1)阻尼牛顿法;2)共轭梯度法;3)变尺度法等3种方法进行求解二、牛顿阻尼法1、阻尼牛顿法流程图是否开始给定0x、εkd←-)()(12kkxfxfk←01kx←kx+kkdaka:minfkkadx1kk结束1kkxx||kkxx1||ε2.阻尼牛顿法命令流X0=input('请输入迭代初向量X0=\n');n=1;eps=input('请输入精度eps=\n');symsx1x2x3;f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2;df=[diff(f,x1);diff(f,x2);diff(f,x3)];%df表示梯度表达式G=[diff(df(1),x1)diff(df(1),x2)diff(df(1),x3);diff(df(2),x1)diff(df(2),x2)diff(df(2),x3);diff(df(3),x1)diff(df(3),x2)diff(df(3),x3)]%G表示海森矩阵表达式while(1)df0=subs(df,[x1;x2;x3],X0);H=subs(G,[x1;x2;x3],X0);%H表示海森矩阵fprintf('第%d次迭代:\n',n)fprintf('输出海森矩阵\n')disp(H)df02=inv(H);%df02表示海森矩阵的逆矩阵fprintf('输出海森矩阵的逆矩阵\n');disp(df02)d0=-df02*df0;symsa;X1=X0+d0*a;%a表示最优步长f1=subs(f,[x1;x2;x3],X1);da=eval(diff(f1,a));digits(5)a=vpa(solve(da,a));fprintf('输出最优步长因子a%d:\n',n)disp(a)X1=X0+d0*a;eps1=norm(X1-X0);if(eps1=eps)X0=X1;n=n+1;elsebreak;endendfprintf('\n运用阻尼牛顿法经过%d迭代次后得到极小点X及极小值f为:\n',n);X=X1f=subs(f,[x1;x2;x3],X)3.阻尼牛顿法命令流运行结果请输入迭代初向量X0=[1;1;1]请输入精度eps=0.02G=[2,1/2,-2][1/2,4,2][-2,2,4]第1次迭代:输出海森矩阵2.00000.5000-2.00000.50004.00002.0000-2.00002.00004.0000输出海森矩阵的逆矩阵4.0000-2.00003.0000-2.00001.3333-1.66673.0000-1.66672.5833输出最优步长因子a1:1.0第2次迭代:输出海森矩阵2.00000.5000-2.00000.50004.00002.0000-2.00002.00004.0000输出海森矩阵的逆矩阵4.0000-2.00003.0000-2.00001.3333-1.66673.0000-1.66672.5833输出最优步长因子a2:0.0运用阻尼牛顿法经过2迭代次后得到极小点X及极小值f为:X=-8.03.3333-5.6667f=-6.6667三、共轭梯度法1.共轭梯度法流程图2.共轭梯度法命令流X0=input('请输入初始迭代点X0(以列向量形式表示):X0=');e=input('请输入允许的误差:e=');symsx1x2x3t=1;n=3;f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2;df=[diff(f,x1);diff(f,x2);diff(f,x3)];df0=subs(df,[x1;x2;x3],X0);s0=-df0;k=0;while(1)symsaX1=X0+a*s0;f1=subs(f,[x1;x2;x3],X1);da=eval(diff(f1,a));a=vpa(solve(da,a))%f2=inline(f1);%a=fminbnd(f2,-100,100)%fminbnd函数求解最小值X1=X0+a*s0df1=subs(df,[x1;x2;x3],X1);e1=norm(df1)if(e1e)break;endif(k==n)df0=subs(df,[x1;x2;x3],X1);s0=-df0;k=0;elseb=(norm(df1)/norm(df0))^2;s0=-df1+b*s0;k=k+1;endX0=X1;t=t+1;clearaendfprintf('\n运用共轭梯度法迭代%d次后得到极小点X1及极小值f为:\n',t);disp(X1)f=subs(f,[x1;x2;x3],X1)3.共轭梯度法命令流运行结果请输入初始迭代点X0(以列向量形式表示):X0=[1;1;2]请输入允许的误差:e=0.05a=0.17558X1=0.73663-0.843570.59537e1=2.9706a=0.34902X1=-0.28799-1.09130.72763e1=1.7291a=0.94345X1=-0.7341-0.10832-0.4965e1=2.5858a=0.31605X1=-1.5206-0.16116-0.27991e1=1.6585a=0.34137X1=-1.6701-0.17319-0.82584e1=1.7283a=3.0571X1=-6.86873.3157-5.1891e1=1.9851a=0.31909X1=-8.06043.3746-5.7178e1=0.032645运用共轭梯度法迭代7次后得到极小点X1及极小值f为:-8.06043.3746-5.7178f=-6.666三、变尺度法1.变尺度法流程图2.变尺度法命令流给定,0xIHkxfg0000),()()()()1()()()()(min:kkkkkkkdxxdxf?||)(||)1(kxfNY?nk)()()()()()()()()()()()()()1()()()1()()1(1)()()()()()()(gkkTkTkkkkkTkTkkkkkkkkkkkgHggHgHgxxxHxfxfgxxxxf)(计算:1kk开始)()()1(*)1(*kkxfxfxx)()()1(kkkHHH结束达到最大迭代次数YNX0=input('请输入初始迭代点X0(以列向量形式表示):X0=');e=input('请输入允许的误差:e=');symsx1x2x3t=1;n=3;f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2;df=[diff(f,x1);diff(f,x2);diff(f,x3)];df0=subs(df,[x1;x2;x3],X0);A=eye(3,3);k=0;while(1)s0=-A*df0;symsaX1=X0+a*s0;f1=subs(f,[x1;x2;x3],X1);da=eval(diff(f1,a));%eval改成小数形式,相当于内联函数a=vpa(solve(da,a));%vpa以小数形式显示,solve函数是求函数等于零的解X1=X0+a*s0df1=subs(df,[x1;x2;x3],X1);e1=norm(df1)if(e1e)break;endif(k==n)df0=df1;A=eye(3,3);k=0;elseg=df1-df0;dx=X1-X0;E=dx*dx'/(g'*dx)-A*g*g'*A/(g'*A*g);A=A+E;df0=df1;k=k+1;endX0=X1;t=t+1;clearaendfprintf('\n运用变尺度梯度法迭代%d次后得到极小点X1及极小值f为:\n',t);disp(X1)f=subs(f,[x1;x2;x3],X1)3.变尺度法命令流运行结果请输入初始迭代点X0(以列向量形式表示):X0=[1;1;1]请输入允许的误差:e=0.02X1=0.27809-0.753210.17496e1=3.1841X1=-0.60891-0.846190.44229e1=1.5964X1=-8.00013.3334-5.6668e1=0.00012527运用变尺度梯度法迭代3次后得到极小点X1及极小值f为:-8.00013.3334-5.6668f=-6.6667
本文标题:优化设计作业
链接地址:https://www.777doc.com/doc-2718952 .html