MATLAB求解非线性规划演示文稿_第1页
MATLAB求解非线性规划演示文稿_第2页
MATLAB求解非线性规划演示文稿_第3页
MATLAB求解非线性规划演示文稿_第4页
MATLAB求解非线性规划演示文稿_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB求解非线性规划演示文稿目前一页\总数六十页\编于十四点MATLAB求解非线性规划目前二页\总数六十页\编于十四点1Matlab简介及操作环境由美国

DOCTORCLEVERMOLER于

1980年开始研制并于1984年推出正式版本。以后陆续推出了4.0,4.2和5.0版本,1999年初推出了功能更为强大的5.3版本,2001年推出6.1版本,2003年推出了6.5版本。2004年6月正式推出7.0版本。MATLAB是建立在

C语言基础上的高级语言,并建立了自已独特的语言环境。

1.1Matlab简介目前三页\总数六十页\编于十四点MATLAB(MATrixLABoratory)的基本含义是矩阵实验室,它是由美国MathWorks公司研制开发的一套高性能的集数值计算、信息处理、图形显示等于一体的可视化数学工具软件。它是建立在向量、数组和矩阵基础之上的,除了基本的数值计算、数据处理、图形显示等功能之外,还包含功能强大的多个“工具箱”,如优化工具箱(optimizationtoolbox)、统计工具箱、样条函数工具箱和数据拟合工具箱等都是优化计算的有力工具。目前四页\总数六十页\编于十四点MATLAB程序设计语言简介MATLAB,MatrixLaboratory的缩写,是由Mathworks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方式,被称之为“草稿纸式的语言”。截至目前,MATLAB已经发展到12.1版,适用于所有32位的Windows操作系统,按NTFS(NT文件系统)格式下完全安装约需850MB。MATLAB软件主要由主包、仿真系统和工具箱三大部分组成。目前五页\总数六十页\编于十四点

MATLAB的安装与卸载MATLAB软件在用户接口设计上具有较强的亲和力,其安装过程比较典型,直接运行光盘中的安装向导支撑程序SETUP.exe,按其提示一步步选择即可。MATLAB自身带有卸载程序,在其安装目录下有uninstall子目录,运行该目录下的uninstall.exe即可;也可以通过Windows系统的安装卸载程序进行卸载。目前六页\总数六十页\编于十四点MATLAB的启动与退出MATLAB安装完成后,会自动在Windows桌面上生成一个快捷方式,它是指向安装目录下\bin\win32\matlab.exe的链接,双击它即可来到MATLAB集成环境的基本窗口,通常称之为命令窗口。MATLAB的退出与普通WIN32的程序一样,值得一提的是它有一个自身专有的快捷键Ctrl+Q。目前七页\总数六十页\编于十四点1.2Matlab的语言环境1、Matlab的工作视窗/界面A、命令窗口(commandwindow)B、编辑/调节器窗口(editor/debugger)C、图形输出窗口(figure)D、simulink集成编程窗口目前八页\总数六十页\编于十四点命令窗口提供给用户使用管理功能的人机界面目前九页\总数六十页\编于十四点主要项目:NewOpenPreferenceSetpath目前十页\总数六十页\编于十四点编辑窗口提供给用户编程、阅读和调试程序的窗口目前十一页\总数六十页\编于十四点图形输出窗口实现图形的可视化、编辑图形的注释和对图形的编辑目前十二页\总数六十页\编于十四点Simulink窗口应用框图编程的方法,实现对系统的仿真,并以图形方式表示。目前十三页\总数六十页\编于十四点图1.7Sinulink模块库浏览器图1.8新建Sinulink模型窗口目前十四页\总数六十页\编于十四点2Matlab基本特性MATLAB语言的规则十分简单,是一种表达式语言,其语句格式类似于数学式子。其管理的对象是矩阵,标量(数量)是作为1×1的矩阵来处理的。与数学术语一样,仅有一行或一列的矩阵作为向量来处理。

目前十五页\总数六十页\编于十四点2.1

简单的数学运算在MATLAB命令窗口中,可以直接输入数学运算式子并回车,即能够显示出计算结果,例如,输入:4+2-5*6+8/4显示结果为:ans=-22其中变量ans(answer的缩写)为MATLAB预设置的一个变量。

目前十六页\总数六十页\编于十四点另一种方式是把计算所得的值赋给一个MATLAB变量,例如:>>a1=5^2a1=25又例如:>>bz=10+a1bz=35

这样创建了两个MATLAB变量a1和bz,每一个变量都显示出一个计算结果。

目前十七页\总数六十页\编于十四点2.9常用的基本数学函数MATLAB中,数学公式大多数可以用数学函数的方式来表示。要注意的是,三角函数的计算只采用弧度的操作,角度必须经过弧度的换算才能使用。例如:sin(90°),只能表示为:sin(pi/2),其中pi为圆周率π。

目前十八页\总数六十页\编于十四点2.10M文件在命令窗口模式下键入一行命令立即执行,程序可读性差且难以存储——〉编成可存储的程序文本——〉m文件M文件名的后缀为m。MATLAB语言环境下能执行的文件是以后缀为m的文件Matlab本身含有很多.m文件目前十九页\总数六十页\编于十四点2.10.1M文件的编制

1、打开编辑窗口2、编制一个多项式方程求根的程序:A=[4568]%即A=4x3+5x2+6x+8P=roots(A)3、存盘(文件名不得与已存在的m文件相同)目前二十页\总数六十页\编于十四点2.10.2M文件的执行

在MATLAB命令窗口下直接键入文件名并按回车键即可

2.10.3M文件的打开

2.10.4M文件的编辑修改

2.10.5M文件变量的工作空间M文件变量的工作空间就是MATLAB的工作空间。若变量在MATLAB工作空间中已存在,其变量的值可以被其他的M文件使用。但要特别注意在MATLAB工作空间中该变量的大小。

目前二十一页\总数六十页\编于十四点2.10.6M文件的调试MATLAB在执行M文件过程中,若一旦发现有语法错误,将在MATLAB命令窗口中显示其错误类型,还指出错误的行号,并停止程序的执行,用户可以根据所提供的信息来修改程序。另外,在MATLAB编辑/调试器窗口的工具栏和菜单中,可以通过设置程序断点,并使程序单步执行来调试程序,工具栏中有有关调试程序的图标。目前二十二页\总数六十页\编于十四点3数组、矩阵的基本运算MATLAB(MATrixLABoratory)是一种以矩阵作为基本数据结构、以矩阵运算为基础的科学计算软件所有变量和数据都可看成为矩阵变量和矩阵数据。应用MATLAB语言编程时,尤其要注意矩阵的向量的维数问题。标量可以看作为1×1的矩阵。

目前二十三页\总数六十页\编于十四点数组与矩阵元素的输入

用例子来说明:设A矩阵为3×3矩阵,其数据为:

123456789在MATLAB中,输入方法有几种:例A=[123;456;789]也可这样输入:

A=[1,234,5,6789]目前二十四页\总数六十页\编于十四点矩阵元素之间可用逗号‘,’或空格‘

’隔开,行与行之间用分号‘;’隔开;语句结尾:逗号显示结果,分号不显示结果

目前二十五页\总数六十页\编于十四点例x=[3,4,2];y=[672];z=x*y'z=50又例z=x'*yz=182162428812144目前二十六页\总数六十页\编于十四点加:两矩阵阶数相同

减:两矩阵阶数相同乘:第一个矩阵的列数等于第二个矩阵的行数,即内阶数相等

除:逆阵A-1

=inv(A),矩阵行列式det(A),左除,右除,行列式不为0

矩阵运算:目前二十七页\总数六十页\编于十四点4关系与逻辑运算关系运算:<<=>>===~=逻辑运算:&|~xor目前二十八页\总数六十页\编于十四点5向量与多项式在MATLAB中向量的表达和一维数组的表示形式一致,而多项式也可以用一个行向量来表示,即将多项式的系数按变量的降幂排列。

求y=x3+2.5x2+x+10=0的根。p=[12.5110];%多项式方程的MATLAB表达x=roots(p)%root目前二十九页\总数六十页\编于十四点6控制流与若干控制命令控制流语句有三种结构:for循环,while循环,if—else—end,switch-case结构等。控制命令主要介绍break、pause、input、keyboard、debug等命令。

目前三十页\总数六十页\编于十四点6.1for循环1、for循环For循环可以按指定的次数重复执行一系列语句。For循环的常见结构:

for变量=表达式循环语句

end如:fork=初值:增值:终值

这里循环语句可以是一条或多条,并且可以是变量的函数li1_6_1.m目前三十一页\总数六十页\编于十四点%mzmfor.mclearallN=input('请输入矩阵的维数N:');forI=1:N,forJ=1:N,A(I,J)=1/(I+J-1);endend在用for语句实现多重循环时,for和end必须成对出现!例:目前三十二页\总数六十页\编于十四点请分析一下本段程序共循环多少次?

%mzmfor2.mforn=1:5 x(n)=sin(n*pi/10); n=10;end

For循环不能用For循环内新赋值循环变量n来终止。因此本段中循环次数仍为五次!

目前三十三页\总数六十页\编于十四点6.2

while循环While循环以不定的次数执行一条或多条语句,当条件不再满足时退出循环。While循环的一般形式是:

while条件式

语句;

end只要在表达式里的所有元素为真,就执行while和end语句之间的运算式。就是说,只要条件式成立,运算式就会一再被执行。目前三十四页\总数六十页\编于十四点While示例循环条件是条件表达式的值为真x=input('x=');whilex>=10y=x*5x=x-5end目前三十五页\总数六十页\编于十四点6.3if-else-end分支语句最简单的If-else-end结构是:if条件式;循环体语句;end如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的语句。目前三十六页\总数六十页\编于十四点6.4switch-case语句一般switch-case语句格式为:switchnumcasen1commandcasen2commandcasen3command...otherwiseCommandli1_6_4.m目前三十七页\总数六十页\编于十四点一.绘制二维图形1、简单的二维绘图命令(plot)Plot函数是将各个数据点通过连折线的方式来绘制二维图形的。其格式有以下几种。plot(y)%绘制向量y的曲线plot(x,y)%绘制纵坐标为向量y横坐标为向量x的曲线

%x,y的维数应相同。多条曲线的绘制plot(x1,y1,x2,y2,···)7数据的可视化目前三十八页\总数六十页\编于十四点二、绘制三维图形1、三维曲线的基本绘图命令基本格式:plot3(x,y,z,’s’)plot3(x1,y1,z1,’s1’,x2,y2,z2,’s2’,···)

例:t=0:pi/50:10*pi;plot3(sin(t),cos(t),t);plot3命令将绘制二维图形的函数plot的特性扩展到三维空间。函数格式除了包括第三维的信息(比如Z方向)之外,与二维函数plot相同。

目前三十九页\总数六十页\编于十四点2.三维网线图的绘制步骤:1)栅格数据点的产生命令:meshgrid(x,y)2)绘制三维网格命令:mesh(x,y,z)目前四十页\总数六十页\编于十四点绘制三维网线图程序:x=[-8:0.5:8];y=x;[X,Y]=meshgrid(x,y);R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;mesh(X,Y,Z)目前四十一页\总数六十页\编于十四点MATLAB求解非线性规划目前四十二页\总数六十页\编于十四点第一部分:无约束极值问题单变量函数求最小值的标准形式为

s.t

函数

fminbnd格式

x=fminbnd(fun,x1,x2)%返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。目前四十三页\总数六十页\编于十四点x=fminbnd(fun,x1,x2,options)%options为指定优化参数选项[x,fval]=fminbnd(…)%fval为目标函数的最小值[x,fval,exitflag]=fminbnd(…)%xitflag为终止迭代的条件[x,fval,exitflag,output]=fminbnd(…)%output为优化信息说明若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。目前四十四页\总数六十页\编于十四点例1计算下面函数在区间(0,1)内的最小值。解:[x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)x=0.5223fval=0.3974exitflag=1output=iterations:9funcCount:9algorithm:'goldensectionsearch,parabolicinterpolation'目前四十五页\总数六十页\编于十四点

主程序为ex2.m:f='2*exp(-x).*sin(x)';ex2.mfplot(f,[0,8]);%作图语句

[xmin,ymin]=fminbnd(f,0,8)f1='-2*exp(-x).*sin(x)';[xmax,ymax]=fminbnd(f1,0,8)目前四十六页\总数六十页\编于十四点

二次规划可以直接利用Matlab来求解。Matlab中二次规划函数为:quadprog()。其调用格式为x=quadprog(H,C,A,b);x=quadprog(H,C,A,b,Aeq,beq);x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0);x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0,options);[x,fval]=quaprog(...);[x,fval,exitflag]=quaprog(...);[x,fval,exitflag,output]=quaprog(...);目前四十七页\总数六十页\编于十四点48例3minf(x1,x2)=-2x1-6x2+x12-2x1x2+2x22s.t.x1+x2≤2-x1+2x2≤2x1≥0,x2≥01、写成标准形式:2、输入命令:

H=[1-1;-12];c=[-2;-6];A=[11;-12];b=[2;2];Matlab:youh2.mAeq=[];beq=[];VLB=[0;0];VUB=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)3、运算结果为:x=0.66671.3333z=-8.2222s.t.目前四十八页\总数六十页\编于十四点用MATLAB解无约束优化问题设无约束优化问题(一元或多元函数)标准形为常用格式如下:x=fminunc(‘fun’,x0);或x=fminsearch(‘fun’,x0);x=fminunc(‘fun’,x0,options);或x=fminsearch(‘fun’,x0,options);[x,fval]=fminunc(…);或[x,fval]=fminsearch(…)[x,fval,exitflag]=fminunc(…);或[x,fval,exitflag]=fminsearch(…);[x,fval,exitflag,output]=fminunc(…);或[x,fval,exitflag,output]=fminsearch(…);目前四十九页\总数六十页\编于十四点说明:fminsearch是用单纯形法寻优。而对于fminunc的算法:(1)fminunc为无约束优化提供了大型优化和中型优化算法,由于options中的参数LargeScale控制;LargeScale=’on’(默认值),使用大型算法;LargeScale=’off(默认值),使用中型算法。(2)fminunc为中型优化算法的搜索方向提供了4种算法,由options中的参数HessUpdate控制:HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;HessUpdate=’dfp’,拟牛顿法的DFP公式;HessUpdate=’steepdesc’,最速下降法;(3)fminunc为中型优化算法的步长以为搜索提供了两种算法,由options中的参数LineSearchType控制:LineSearchType=’quadcubic’(默认值),混合的二次和三次多项式插值;LineSearchType=’cubicpoly’,三次多项式插值。目前五十页\总数六十页\编于十四点例4

用Matlab解多元约束优化问题目前五十一页\总数六十页\编于十四点有约束极值问题的Matlab求解一、一般非线性规划一般非线性规划标准形为:其中:均为非线性函数组成的向量.目前五十二页\总数六十页\编于十四点用Matlab求解上述向题,基本步骤为:(1)首先建立M文件fun.m,定义目标函数f(x):

functionf=fun(x);

f=f(x);

(2)若约束条件中有非线性约束:,则建立M文件nonlcon.m,定义函数:function[C,Ceq]=nonlcon(x)C=…Ceq=…目前五十三页\总数六十页\编于十四点3.建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:

(1)x=fmincon(‘fun’,X0,A,b)

(2)x=fmincon(‘fun’,X0,A,b,Aeq,beq)

(3)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB)

(4)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)

(6)[x,fval]=fmincon(...)

(7)[x,fval,exitflag]=fmincon(...)(8)[x,fval,exitflag,output]=fmincon(...)输出极值点M文件迭代的初值参数说明变量上下限目前五十四页\总数六十页\编于十四点55注意:[1]fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。[2]fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。[3]fmincon函数可能会给出局部最优解,这与初值X0的选取有关。目前五十五页\总数六十页\编于十四点561、写成标准形式:

s.t.

2x1+3x26s.tx1+4x25x1,x20例5目前五十六页\总数六十页\编于十四点572、先建立M-文件fun3.m:

functionf=fun3(x);fun3.m

f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^23、再建立主程序youh2.m:x0=[1;1];

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论