MATLAB求解非线性规划[通用]_第1页
MATLAB求解非线性规划[通用]_第2页
MATLAB求解非线性规划[通用]_第3页
MATLAB求解非线性规划[通用]_第4页
MATLAB求解非线性规划[通用]_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、MATLAB基础及求解非线性规划经济管理学院:李继红1 Matlab简介及操作环境由美国 DOCTORCLEVER MOLER 于 1980 年开始研制并于1984年推出正式版本。以后陆续推出了4.0,4.2和5.0版本,1999年初推出了功能更为强大的5.3版本,2001年推出6.1版本,2003年推出了6.5版本。2004年6月正式推出7.0版本。MATLAB是建立在 C 语言基础上的高级语言,并建立了自已独特的语言环境。 1.1 Matlab简介MATLAB(MATrix LABoratory)的基本含义是矩阵实验室,它是由美国MathWorks公司研制开发的一套高性能的集数值计算、信息

2、处理、图形显示等于一体的可视化数学工具软件。它是建立在向量、数组和矩阵基础之上的,除了基本的数值计算、数据处理、图形显示等功能之外,还包含功能强大的多个“工具箱”,如优化工具箱(optimization toolbox)、统计工具箱、样条函数工具箱和数据拟合工具箱等都是优化计算的有力工具。MATLAB程序设计语言简介MATLAB,Matrix Laboratory的缩写,是由Mathworks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方式,被称之为“草稿纸式的语言”。截至目

3、前,MATLAB已经发展到12.1版, 适用于所有32位的Windows操作系统, 按NTFS(NT文件系统)格式下完全安装约需 850 MB。MATLAB软件主要由主包、仿真系统和工具箱三大部分组成。 MATLAB的安装与卸载MATLAB软件在用户接口设计上具有较强的亲和力,其安装过程比较典型, 直接运行光盘中的安装向导支撑程序SETUP.exe, 按其提示一步步选择即可。MATLAB自身带有卸载程序,在其安装目录下有uninstall子目录,运行该目录下的uninstall.exe即可; 也可以通过Windows系统的安装卸载程序进行卸载。 MATLAB的启动与退出MATLAB安装完成后,

4、会自动在Windows桌面上生成一个快捷方式, 它是指向安装目录下binwin32matlab.exe的链接, 双击它即可来到MATLAB集成环境的基本窗口,通常称之为命令窗口。 MATLAB的退出与普通WIN32的程序一样, 值得一提的是它有一个自身专有的快捷键Ctrl+Q。 1.2 Matlab的语言环境1、Matlab的工作视窗/界面A、命令窗口 (command window)B、编辑/调节器窗口(editor/debugger)C、图形输出窗口(figure)D、simulink集成编程窗口命令窗口提供给用户使用管理功能的人机界面主要项目:NewOpenPreferenceSet p

5、ath编辑窗口提供给用户编程、阅读和调试程序的窗口图形输出窗口实现图形的可视化、编辑图形的注释和对图形的编辑Simulink窗口应用框图编程的方法,实现对系统的仿真,并以图形方式表示。图1.7 Sinulink模块库浏览器图1.8 新建Sinulink模型窗口2 Matlab基本特性MATLAB语言的规则十分简单,是一种表达式语言,其语句格式类似于数学式子。其管理的对象是矩阵,标量(数量)是作为11的矩阵来处理的。与数学术语一样,仅有一行或一列的矩阵作为向量来处理。 2.1 简单的数学运算在MATLAB命令窗口中,可以直接输入数学运算式子并回车,即能够显示出计算结果,例如,输入: 4+2-5*

6、6+8/4 显示结果为: ans = -22其中变量ans(answer的缩写)为MATLAB预设置的一个变量。 另一种方式是把计算所得的值赋给一个MATLAB变量,例如:a1=52a1 = 25又例如:bz=10+a1bz = 35 这样创建了两个MATLAB变量a1和bz,每一个变量都显示出一个计算结果。 2.9 常用的基本数学函数 MATLAB中,数学公式大多数可以用数学函数的方式来表示。要注意的是,三角函数的计算只采用弧度的操作,角度必须经过弧度的换算才能使用。例如:sin(90),只能表示为:sin(pi/2),其中pi为圆周率。 2.10 M文件 在命令窗口模式下键入一行命令立即执

7、行,程序可读性差且难以存储编成可存储的程序文本m文件M文件名的后缀为m。MATLAB语言环境下能执行的文件是以后缀为m的文件Matlab本身含有很多.m文件2.10.1 M文件的编制 1、打开编辑窗口2、编制一个多项式方程求根的程序:A=4 5 6 8 % 即 A=4x3+5x2+6x+8P=roots(A)3、存盘(文件名不得与已存在的m文件相同)2.10.2 M文件的执行 在MATLAB命令窗口下直接键入文件名并按回车键即可 2.10.3 M文件的打开 2.10.4 M文件的编辑修改 2.10.5 M文件变量的工作空间M文件变量的工作空间就是MATLAB的工作空间。若变量在MATLAB工作

8、空间中已存在,其变量的值可以被其他的M文件使用。但要特别注意在MATLAB工作空间中该变量的大小。 2.10.6 M文件的调试MATLAB在执行M文件过程中,若一旦发现有语法错误,将在MATLAB命令窗口中显示其错误类型,还指出错误的行号,并停止程序的执行,用户可以根据所提供的信息来修改程序。另外,在MATLAB编辑/调试器窗口的工具栏和菜单中,可以通过设置程序断点,并使程序单步执行来调试程序,工具栏中有有关调试程序的图标。3 数组、矩阵的基本运算MATLAB (MATrix LABoratory) 是一种以矩阵作为基本数据结构、以矩阵运算为基础的科学计算软件所有变量和数据都可看成为矩阵变量和

9、矩阵数据。应用MATLAB语言编程时,尤其要注意矩阵的向量的维数问题。标量可以看作为11的矩阵。 数组与矩阵元素的输入 用例子来说明:设A矩阵为33矩阵,其数据为: 1 2 3 4 5 6 7 8 9在MATLAB中,输入方法有几种:例 A=1 2 3;4 5 6;7 8 9 也可这样输入: A=1, 2 3 4, 5, 6 7 8 9矩阵元素之间可用逗号, 或空格 隔开,行与行之间用分号;隔开;语句结尾:逗号显示结果,分号不显示结果 例 x=3,4,2;y=6 7 2;z=x*y z = 50又例 z=x*y z = 18 21 6 24 28 8 12 14 4加:两矩阵阶数相同 减:两矩

10、阵阶数相同 乘:第一个矩阵的列数等于第二个矩阵的行数,即内阶数相等 除:逆阵A-1 inv(A),矩阵行列式 det(A),左除,右除,行列式不为0 矩阵运算:4 关系与逻辑运算关系运算: = = =逻辑运算: & | xor5 向量与多项式在MATLAB中向量的表达和一维数组的表示形式一致,而多项式也可以用一个行向量来表示,即将多项式的系数按变量的降幂排列。 求 y=x3+2.5x2+x+10=0 的根。p=1 2.5 1 10; % 多项式方程的MATLAB表达x=roots(p) % root 6 控制流与若干控制命令控制流语句有三种结构:for循环,while循环,ifelseend,

11、switch-case结构等。控制命令主要介绍break、pause、input、keyboard、debug等命令。 6.1 for循环 1、for循环For循环可以按指定的次数重复执行一系列语句。For循环的常见结构:for 变量 =表达式 循环语句 end如:for k=初值: 增值: 终值 这里循环语句可以是一条或多条,并且可以是变量的函数li1_6_1.m mzmfor.mclear allN=input(请输入矩阵的维数 N:);for I = 1:N, for J = 1:N, A(I,J) = 1/(I+J-1); endend在用for语句实现多重循环时,for和end必须成

12、对出现!例:请分析一下本段程序共循环多少次? % mzmfor2.mfor n=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=);while x=10 y=x

13、*5 x=x-5end6.3 if-else-end分支语句 最简单的If-else-end结构是:if 条件式; 循环体语句; end如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的语句。6.4 switch-case语句 一般switch-case语句格式为:switch numcase n1commandcase n2commandcase n3command.otherwiseCommandli1_6_4.m一. 绘制二维图形1、简单的二维绘图命令(plot)Plot函数是将各个数据点通过连折线的方式来绘制二维图形的。其格式有以下几种。plot(y) %绘制向量y

14、的曲线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

15、,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的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优

16、解。x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项x,fval = fminbnd() % fval为目标函数的最小值x,fval,exitflag = fminbnd() %xitflag为终止迭代的条件x,fval,exitflag,output = fminbnd() % output为优化信息说明 若参数exitflag0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值

17、次数,output=algorithm表示所使用的算法。 例1 计算下面函数在区间(0,1)内的最小值。解:x,fval,exitflag,output =fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1)x = 0.5223fval = 0.3974exitflag = 1output = iterations: 9 funcCount: 9 algorithm: golden section search, parabolic interpolation 主程序为ex2.m: f=2*exp(-x).*sin(x); ex2.m fplot(f,0,8); %作图

18、语句 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,X

19、0,options);x,fval=quaprog(.);x,fval,exitflag=quaprog(.);x,fval,exitflag,output=quaprog(.);例3 min f(x1,x2)=-2x1-6x2+x12-2x1x2+2x22 s.t. x1+x22 -x1+2x22 x10, x20 1、写成标准形式: 2、 输入命令: H=1 -1; -1 2; c=-2 ;-6;A=1 1; -1 2;b=2;2; Matlab:youh2.m Aeq=;beq=; VLB=0;0;VUB=; x,z=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)3、

20、运算结果为: x =0.6667 1.3333 z = -8.2222s.t.47 用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,o

21、utput= 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

22、=dfp,拟牛顿法的DFP公式;HessUpdate=steepdesc,最速下降法;(3)fminunc为中型优化算法的步长以为搜索提供了两种算法,由options中的参数LineSearchType控制:LineSearchType=quadcubic(默认值),混合的二次和三次多项式插值;LineSearchType=cubicpoly, 三次多项式插值。例4用Matlab解多元约束优化问题有约束极值问题的Matlab求解一、 一般非线性规划一般非线性规划标准形为:其中: 均为非线性函数组成的向量用Matlab求解上述向题,基本步骤为:(1)首先建立M文件funm,定义目标函数f(x):

23、 function ffun(x); ff(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(

24、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文件迭代的初值参数说明变量上下限注意:1 fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为on),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。2 fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。3 fmincon函数可能会给出局部最优解,这与初值X0的选取有关。541、写成标准形式: s.t. 2x1+3x2 6 s.t x

温馨提示

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

评论

0/150

提交评论