matlab最优化实验

6.1知识要点与背景

6.1.1 由简入繁: 最佳水槽断面问题的推广

6.1.2 微分法求最大和最小

◆问题4      (1)求受检点: ,

zxy6_1.m

【    syms x1 x2                                          %定义符号变量。

f=x1^3-x2^3+3*x1^2+3*x2^2-9*x1;   % 函数z。

v=[x1 x2];df=jacobian(f,v)                %计算雅可比 。

[X,Y]=solve(df(1),df(2));[X,Y]         % 用指令solve求驻点。             】

zxy6_2.m

【    clf,xmin=-5;xmax=3.5;ymin=-3;ymax=5;

x1=linspace(xmin,xmax,30);x2=linspace(ymin,ymax,30);

[X1,X2]=meshgrid(x1,x2);Z= X1.^3.-X2.^3+3*X1.^2+3*X2.^2-9*X1;

contour(X1,X2,Z,60);,hold on,  xp=[-3,1,-3,1];yp=[0 0 2 2];

plot(xp,yp,'ro'),axis([xmin xmax ymin ymax]),colorbar

xlabel('x_1'),ylabel('x_2'),

for i=1:length(xp)

text(xp(i),yp(i),['\leftarrow (',num2str(xp(i)),',',num2str(yp(i)),')'] )

end              】

6.2  实验与观察(Ⅰ):模拟盲人下山的迭代寻优法

zxy6_3.m(盲人下山的模拟)

【      clf, a=-2;b=4;

xmin=a;xmax=b;ymin=a;ymax=b;    %设置变量范围和坐标轴显示范围。

x1=linspace(xmin,xmax,100);x2=linspace(ymin,ymax,100);

[X1,X2]=meshgrid(x1,x2);

[Z,DZ1,DZ2]=zxy6_3f(X1,X2); %计算函数和梯度向量。

contour(X1,X2,Z,30),               %画等值线图。

axis([xmin xmax ymin ymax]),hold on,

axis equal,                              %该命令将使横轴、纵轴具有相同比例,避免失真。

plot([1.46808510638298],[1.148936170212776],'o'),  %标注最优点。

axis([xmin xmax ymin ymax])

x=[];y=[];            %开始用鼠标选点,按左键选点,按右键中止选点过程。

disp('Select a point by put on mouse left-key')

%disp指令,在命令窗口显示文字。

disp('Stop selecting point by put on mouse right-key')

button=1;         %button和ginput命令结合使用可用鼠标选点, 按左键时button=1。

x=[];y=[];

while button==1

[xi,yi,button]=ginput(1);

%ginput(n)用鼠标选n个点,xi,yi分别为点的横坐标和纵坐标。

plot([xi],[yi],'r.','MarkerSize',10),hold on,             %画所选的点。

[zi,dz1,dz2]=zxy6_3f(xi,yi);                       %计算函数值和梯度方向。

v=zi;

contour(X1,X2,Z,[v v],'-'),             %在点所在的高度画一条等高线。

axis([xmin xmax ymin ymax]),

x=[x,xi];y=[y,yi];

H_line2=plot(x,y);                                  %画已走的路径连线。

set(H_line2,'color','red','linewidth',2);     %设置颜色和线宽。

xt=xi-dz1;yt=yi-dz2;

H_line=plot([xi xt],[yi yt],'k:','linewidth',1);    %画最速下降方向路径。

end           %若按左键button=1,继续循环。若按右键,button~=1,循环终止 。 】

zxy6_3f.m(模拟山谷的二次函数程序)

【     function [f,df1,df2]=zxy6_4f(x1,x2)

f=8*x1.*x1+9*x2.*x2-10*x1.*x2-12*x1-6*x2;       %计算函数值。

if nargout > 1

df1=2*8*x1-10*x2-12*ones(size(x1));                %计算梯度向量。

df2=2*9*x2-10*x1-6*ones(size(x2));

end               】

6.3 .实验与观察(Ⅱ):Matlab优化工具箱简介

6.3.1多元函数无约束优化指令fminunc和fminsearch

1. 观察:运行香蕉函数的优化程序bandemo.m

2. 使用fminunc和fminsearch指令

◆ 观察:用inline生成函数。

【      f=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2'),

x=[2,2],y=f(x),    %代入一个点计算看看效果 。             】

3. bandemo.m的简化和剖析

zxy6_4.m

【 clf;  clear

%以下程序段是画香蕉函数图形。

xx = [-2:0.125:2]'; yy = [-1:0.125:3]'; [x,y]=meshgrid(xx',yy') ;

meshd = 100.*(y-x.*x).^2 + (1-x).^2; conts = exp(3:20);

xlabel('x1'),ylabel('x2'),title('Minimization of the Banana function')

contour(xx,yy,meshd,conts), hold on

plot(-1.9,2,'ro'),text(-1.9,2,'Start Point')

plot(1,1,'ro'),text(1,1,'Solution')

%优化程序段开始。

x0=[-1.9,2];        %赋初值。

l=1;

while l           %while 语句是可以重复运行下面的程序段,直至l=0退出循环。

clc                 %清除命令窗口的全体内容 。

%以下程序段是在命令窗口显示相应的文字内容 。

disp(' ')

disp('   Choose any of the following methods to minimize the …

banana   function')

disp('')

disp('    UNCONSTRAINED:    1) BFG direction ')

disp('                                     2) DFP direction')

disp('                                     3) Steepest Descent direction')

disp('                                     4) Simplex Search')

disp('                                     0) Quit')

method=input('Select method : ');  % input 从键盘输入控制变量method数据。

switch method         %Switch体开始。

case 0             %当method=0,终止程序。

hold off

disp('End of demo')

break                         %break指令:中止程序。

case 1              %当method=1,采用BFGS法。

clf,hold on    %每一个case中重新画等值线图,下面的程序段是重新画图。

xlabel('x1'),ylabel('x2'),

title('Minimization of the    Banana function')

contour(xx,yy,meshd,conts)

plot(-1.9,2,'ro'), text(-1.9,2,'Start Point')

plot(1,1,'ro'), text(1,1,'Solution')

% 这里是学习的重点: OPTIONS是控制fminunc和fminsearch指令的重要参数,

%用optimset('属性','属性值',…)指令改变设置,可以容易地控制算法。

OPTIONS=optimset('LargeScale','off');

%fminunc默认的大规模算法是“信赖域方法”,这是一种有效的算法;

%将LargeScale的属性设置为off时,fminunc的默认中等规模的算法就是BFGS方法。

OPTIONS = optimset(OPTIONS,'gradobj','on'); %使用解析梯度。

%定义梯度函数和画图函数banplot6_4。

GRAD=inline('[100*(4*x(1)^3-4*x(1)*x(2))+2*x(1)-2;…

100*(2*x(2)-2*x(1)^2); banplot6_4(x)]');

f=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2'); %定义目标函数。

disp('[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);');

%(调用fminunc指令,输出x,fval分别为最优点和最优函数值,exitflag和output

% 提供算法的一些信息,读者可在程序结束后,键入output或exitflag查看这些信息)

[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);

hold off

disp(' ')

disp('Strike any key for menu')

pause

case 2      %当method=2,采用DFP法。

clf,  xlabel('x1'),ylabel('x2'),

title('Minimization of the Banana function')

contour(xx,yy,meshd,conts),  hold on

plot(-1.9,2,'ro'),   text(-1.9,2,'Start Point')

plot(1,1,'ro'),     text(1,1,'Solution')

OPTIONS=optimset('LargeScale','off');

OPTIONS = optimset(OPTIONS,'gradobj','on');

OPTIONS=optimset(OPTIONS,'HessUpdate','dfp');

% 将HessUpdate属性设置为dfp就使fminunc指令采用DFP法。

GRAD=inline('[100*(4*x(1)^3-4*x(1)*x(2))+2*x(1)-2;…

100*(2*x(2)-2*x(1)^2); banplot6_4(x)]');

f=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2');

disp('[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);');

[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);

hold off

disp(' ')

disp('Strike any key for menu')

pause

case 3   %当method=3,采用最速下降法。

clf,   xlabel('x1'),ylabel('x2'),

title('Minimization of the Banana function')

contour(xx,yy,meshd,conts)

hold on

plot(-1.9,2,'ro'),  text(-1.9,2,'Start Point')

plot(1,1,'ro'),     text(1,1,'Solution')

OPTIONS=optimset('LargeScale','off');

OPTIONS = optimset(OPTIONS,'gradobj','on');

OPTIONS=optimset(OPTIONS,'HessUpdate','steepdesc');

%将HessUpdate属性设置为steepdesc就使fminunc指令采用最速下降法。

GRAD=inline('[100*(4*x(1)^3-4*x(1)*x(2))+2*x(1)-2;…

100*(2*x(2)-2*x(1)^2); banplot6_4(x)]');

f=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2');

disp('[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);');

[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);

hold off

disp(' ')

disp('Strike any key for menu')

pause

case 4          %当method=4,采用单纯形方法。

clf,hold on,  xlabel('x1'),ylabel('x2'),

title('Minimization of the Banana function')

contour(xx,yy,meshd,conts),

plot(-1.9,2,'ro'),  text(-1.9,2,'Start Point')

plot(1,1,'ro'),      text(1,1,'Solution')

OPTIONS=optimset('LargeScale','off');

OPTIONS = optimset(OPTIONS,'gradobj','off');

%该方法不使用导数,所以要设置gradobj属性为off。

f=inline('[100*(x(2)-x(1)^2)^2+(1-x(1))^2; banplot6_4(x)]');

%如果要画迭代过程的中间图,就要编制一个画图程序 banplot6_4,

% 套用本程序的格式定义目标函数。

disp('[x,fval,exitflag,output] = fminsearch(f,x0,OPTIONS);');

[x,fval,exitflag,output] = fminsearch(f,x0,OPTIONS);

%fminsearch 是多变量函数寻优的单纯形法指令,用法和fminunc是类似的。

hold off

disp(' ')

disp('Strike any key for menu')

pause

end

end                                       】

banplot6_4.m

【function out =  banplot6_4(x)

plot(x(1),x(2),'O','Erasemode','none')

drawnow;         % Draws current graph now

out = [];                              】

6.3.2其它的优化算法指令

1.多变量约束优化指令fmincon

2. 线性规划linprog指令

【    f = [-5; -4; -6]; A =  [1 -1  1;3  2  4;3 2 0];b = [20; 42; 30];

lb = zeros(3,1); x0=[1,1,0];

options=optimset('Diagnostics','on', 'largescale','off');

%查看诊断信息并采用单纯形算法

[x,fval,exitflag,output,lambda]= …linprog(f,A,b,[],[],lb,[],x0,options)

%没有等式约束且变量无上界,故需置Aeq=[ ];Aeb=[ ];ub=[ ];               】

3. 二次规划quadprog指令

4. 一元函数寻优fminbnd指令

5.非线性最小二乘指令lsqnonlin和非线性数据拟合指令lsqcurvefit

程序如下(zxy6_5.m)

【    clf;x=1:10; y=2+2*x;                                    %选直线上的10个点。

a0=[0.1,0.4]; y1=exp(x*a0(1))+exp(x*a0(2));  %计算一条曲线。

[a,resnorm,residual] = lsqnonlin('zxy6_5f',a0); % 求最优解初始点a0。

disp('a='), disp(a);

disp('resnorm='), disp(resnorm)

y2=exp(x*a(1))+exp(x*a(1));

plot( -x,y,x,y1,'r:',x,y2,'o-',x,residual,'.-'),grid on

legend('直线','猜测的曲线','解曲线','残差')                         】

函数子程序为(zxy6_5f.m)

【    function F = zxy6_5f(a)

x = 1:10;

F = 2 + 2*x-exp(a(1)*x)-exp(a(2)*x);                    】

{     Optimization terminated successfully:

Norm of the current step is less than OPTIONS.TolX

a=    0.2578    0.2578

6.4 应用、思考与练习

6.4.1 .计算最佳水槽断面面积

zxy6_6S.m

【      function s=zxy6_6S(x)

l=24;a(1)=x(3);a(2)=x(4);   xs0=(0.5*l-x(1)-x(2));

xs1=xs0+x(1)*cos(a(1));     xs2=xs1+x(2)*cos(a(2));

h1=x(1)*cos(a(1));             h2=x(2)*cos(a(2));

s=(xs0+xs1)*h1+(xs1+xs2)*h2;s=-s;                    】

zxy6_6.m

【    clf,A=[1,1,0,0;-1,-1,0.0,0.0];b=[12,0]';

lb=[0,0,0,0]';ub=[100,100,pi/2,pi/2]';x0=[4,4,pi/3,pi/3]';

[s,fval] = fmincon('zxy6_6S',x0,A,b,[],[],lb,ub)       %最优化计算

%以下是绘制最优断面的图形,首先计算坐标点。将底边放在x轴上,并让断面关于

%y轴对称。逆时针计算坐标点,使之成为一个封闭的图形)

x(1)=(24-2*s(1)-2*s(2))/2; y(1)=0;

x(2)=x(1)+s(1)*cos(s(3));  y(2)=s(1)*sin(s(3));

x(3)=x(2)+s(2)*cos(s(4));  y(3)=y(2)+s(2)*sin(s(4));

x(4)=-x(3); y(4)=y(3);x(5)=-x(2); y(5)=y(2);x(6)=-x(1); y(6)=y(1);

x(7)=x(1);y(7)=y(1);        %首尾相接。

%plot(x,y),axis equal       %用这命令可画出封闭图形。

patch(x,y,'y'); axis equal,  %用patch命令画块对象并填充颜色。     】

{      s =    4.8000    4.8000    0.6283    1.2566

fval =  -88.6373                                            }

6.4.2  对约束优化的讨论

6.4.3.工程优化问题的计算

1. 啤酒配方问题: 线性规划

2.  储能飞轮的设计

3.  齿轮减速器设计

200多个MATLAB经典教程和MATLAB论文请查看:matlab教程

matlab 最优比例,matlab最优化实验相关推荐

  1. matlab最优方案,matlab中文【应对方案】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统matlab中文的问题,突然遇到win7系统matlab中文的问题就不知道该怎么办了,其实win7系统matlab中文的解决方法非常简单,按照1:matl ...

  2. matlab最优轨迹规划,matlab机器人轨迹规划

    运动仿真 $@ %" 运动仿真( ')在对上述规划轨迹进行仿真前, 先输入机器 人的参数, 并命名 -$.$/&&)" 命令如下: " @ A 连杆的前四 ...

  3. matlab在通信中的应用实验指导书 课后答案,《MATLAB及Simulink应用》实验指导书+答案...

    <<MATLAB及Simulink应用>实验指导书+答案>由会员分享,可在线阅读,更多相关<<MATLAB及Simulink应用>实验指导书+答案(14页珍藏 ...

  4. 无穷大功率电源matlab仿真,MATLAB-Simulink系统建模与仿真-实验报告

    MATLAB/Simulink 电力系统建模与仿真 实验报告 姓名: ****** 专业:电气工程及其自动化 班级: ******************* 学号:****************** ...

  5. 电力系统matlab实验报告,基于matlab语言计算电力系统暂态稳定仿真程序实验报告.docx...

    基于matlab语言计算电力系统暂态稳定仿真程序实验报告 BeijingJiaotongUniversity 电力系统分析 暂态稳定分析实验 学院:电气工程学院 班级:xxxxxxxx 学号:xxxx ...

  6. 图像相减的matlab仿真及光栅滤波法,图像相减的MATLAB 仿真及光栅滤波法实验实现...

    图像相减的MATLAB 仿真及光栅滤波法实验实现 毕业设计(论文)中期报告题目图像相减的MATLAB仿真及光栅滤波法实验实现院(系)光电学院专业光信息科学与技术班级090106姓名陈凤学号090106 ...

  7. 布丰投针java实现,MATLAB模拟布丰投针实验

    MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...

  8. MATLAB模拟布丰投针实验

    MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...

  9. 基于matlab的音频信号低通滤波实验

    基于matlab的音频信号低通滤波实验 一.实验任务 录制语音信号,查看其时域频谱图. 加入高频噪声信号,并查看其时域频谱图. 设计低通滤波器,将带有高频噪声的语音信号经过低通滤波器,将噪声滤除,查看 ...

  10. 基于matlab的传热学虚拟实验开发,基于MATLAB的传热学课程虚拟实验软件的开发

    215教育现代化·2018 年 12 月第 49 期 教育信息技术 基于 MATLAB 的传热学课程虚拟实验软件的开发 周永利,李友荣,石万元,张力元,杨晨,卞煜,王国强,李俊,包键 ( 重庆大学 低 ...

最新文章

  1. AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...
  2. python量化交易策略实例_Python进阶量化交易场外篇3——最大回撤评价策略风险...
  3. 2020 我的C++学习之路 C++PrimerPlus第十一章课后习题
  4. 看得见的开发管理方法—缺陷管理
  5. cake-build -.Net Core 跨平台构建自动化系统。
  6. CIF进口货物流程图_上海关区对外承包工程货物进口报关公司【清关代理吧】
  7. python新手灰帽脚本练习---文件路径遍历收集
  8. sublime跳转到函数定义
  9. mysql 优化union_mysql优化 - MySQL中使用UNION进行两表合并,去重导致效率低下,请问如何优化?...
  10. 从JUnit4迁移到JUnit5:重要的区别和好处
  11. 《分布式服务架构》读后感
  12. 如何将word文件的大小进行压缩?
  13. 高斯消元法的c语言编程,用C语言编程高斯全主元消元法
  14. [转帖]国之魂,民之魂(硬骨头六连16勇士的最后一张照片)
  15. sql超键 候选键 主键
  16. vue 组件内引入外部在线js、css
  17. 通过裁切视频画面来改变视频尺寸 ,同时不影响画质
  18. linux命令之 whatis
  19. 阿里云超级码力第二场记录
  20. 天龙八部手游服务器等级哪里显示,天龙八部手游

热门文章

  1. 如何打开计算机共享文件,如何打开共享文件 局域网文件共享的图文方法
  2. 揭秘网上到处晒淘宝客月收入过万的真相
  3. word文档图片画红线_Word文档怎么在图片内画线?
  4. 如何把txt文本转换成epub文件
  5. 在TX2上(arm架构)安装FastDB
  6. 怎样在服务器找回网站后台密码,宝塔面板忘记后台账号密码怎么找回 一条命令轻松搞定...
  7. 家庭组网:Vlan单线复用,故障检测以及五种“软路由”加mesh组网方案
  8. 几何平均数和调和平均数是什么?有什么作用?详细资料讨论他们的区别
  9. Japanese Student Championship 2019 Qualification
  10. 私域流量运营和微商有什么区别?