matlab非线性规划.ppt
- 格式:pptx
- 大小:9.12 MB
- 文档页数:43
Matlab⾮线性规划⾮线性规划在matlab⾮线性规划数学模型可以写成⼀下形式:minf(x)\\ s.t.\begin{cases} Ax \le B \\ Aeq·x = Beq\\ C(x) \le 0\\ Ceq(x) = 0 \end{cases}f(x)为⽬标函数,A,B,Aeq,Beq为线性约束对应的矩阵和向量,C(x),Ceq(x)为⾮线性约束。
Matlab求解命令为:X = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS) fun为⽬标函数,x0为初值,A,B,Aeq,Beq为线性约束对应的矩阵和向量,LB,UB分别为x的下限和上限,NONLCON为⾮线性约束(需要写⾃定义函数),OPTIONS为优化参数。
【例】求下列⾮线性规划问题minf(x) = x^2_1+x^2_2+8\\ s.t.\begin{cases} x_1^2-x_2 \ge 0\\ -x_1-x_2^2+2=0\\ x_1,x_2 \ge 0 \end{cases}编写函数⽂件:fun1.m,fun2.mfunction f = fun1(x)f = x(1)^2 + x(2)^2 + 8;endfunction [g,h] = fun2(x)g = -x(1)^2 + x(2);%g代表不等式约束,即代表约束条件-x(1)^2 + x(2) <= 0。
matlab默认g<=0,所以题⽬中的条件被改成了相反数。
%如果有多个不等式约束,写成g(1) = 关于x的函数; g(2) = 关于x的函数;······h = -x(1) - x(2)^2 + 2;%h代表等式约束,即代表约束条件 -x(1) - x(2)^2 + 2 = 0。
%如果有多个等式约束,写成h(1) = 关于x的函数; h(2) = 关于x的函数;······end注:在写fun2时,可以把线性和⾮线性约束的等式和不等式约束都按照这种格式写到这个函数⾥⾯,这样的话fun2就包含了所有约束条件,在后⾯运⾏fmincon()时不需要再写A,B,Aeq,Beq,直接⽤[]略过。
MATLAB⾮线性规划问题⼀.⾮线性规划课题实例1 表⾯积为36平⽅⽶的最⼤长⽅体体积。
建⽴数学模型:设x、y、z分别为长⽅体的三个棱长,f为长⽅体体积。
max f = x y (36-2 x y)/2 (x+y)实例2 投资决策问题某公司准备⽤5000万元⽤于A、B两个项⽬的投资,设x1、x2分别表⽰配给项⽬A、B的投资。
预计项⽬A、B的年收益分别为20%和16%。
同时,投资后总的风险损失将随着总投资和单位投资的增加⽽增加,已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资⾦,才能使期望的收益最⼤,同时使风险损失为最⼩。
建⽴数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0⽬标函数中的λ≥0是权重系数。
由以上实例去掉实际背景,其⽬标函数与约束条件⾄少有⼀处是⾮线性的,称其为⾮线性问题。
⾮线性规划问题可分为⽆约束问题和有约束问题。
实例1为⽆约束问题,实例2为有约束问题。
⼆.⽆约束⾮线性规划问题:求解⽆约束最优化问题的⽅法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量⽤fminbnd,fminsearch,fminunc;多变量⽤fminsearch,fminnuc 1.fminunc函数调⽤格式:x=fminunc(fun,x0)x=fminunc(fun,x0,options)x=fminunc(fun,x0,options,P1,P2)[x,fval]=fminunc(…)[x,fval, exitflag]=fminunc(…)[x,fval, exitflag,output]=fminunc(…)[x,fval, exitflag,output,grad]=fminunc(…)[x,fval, exitflag,output,grad,hessian]=fminunc(…)说明:fun为需最⼩化的⽬标函数,x0为给定的搜索的初始点。
1 绪论1.1 课题的背景1.1.1 Matlab简介MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB 成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JA VA 的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
1.1.2 非线性规划(nonlinear programming)非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
MATLAB⾮线性规划MATLAB求解⾮线性规划可以使⽤ fmincon 函数,其数学模型可以写成如下形式:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是⽬标函数,x0是初始值,A,b 规定线性不等式约束条件,Aeq,beq 规定线性等式约束条件,lb 规定可⾏解的数值下限,ub规定可⾏解的数值上限。
nonlcon是包含⾮线性约束条件(C(x),Ceq(x))的函数。
使⽤options所指定的优化选项执⾏最⼩化。
例如,使⽤MATLAB计算如下⾮线性规划。
x0 = [0.5,0];A = [1,-2];b = 1;Aeq = [2,1];beq = 1;x = fmincon(fun,x0,A,b,Aeq,beq)带有边界约束的,例如:fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));lb = [0,0];ub = [1,2];% 没有线性约束,因此将这些参数设置为 []。
A = [];b = [];Aeq = [];beq = [];% 尝试使⽤⼀个位于区域中部的初始点。
x0 = (lb + ub)/2;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)带有⾮线性约束的,例如:%% 主函数options=optimset('largescale','off');x = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)%% ⽬标函数function f=fun(x)f=sum(x.^2)+8;end%% ⾮线性约束条件function [c,ceq]=nonlcon(x)c=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %⾮线性不等式约束ceq=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %⾮线性等式约束end特别注意:⽬标函数为最⼩化函数,fun是⼀个函数,fun接受向量或数组 x,并返回实数标量 f,即在 x 处计算的⽬标函数值。