数学建模 | MATLAB学习 | 非线性规划

 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。

非线性规格的MATLAB解法

数学建模 | MATLAB学习 | 非线性规划_第1张图片

 Matlab中的命令是

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)


 x的返回值是决策向量的取值,fval返回的是目标函数的取值,其中fun是用M文件定义的函数;x0是的初始值;A,b,Aeq,beq定义了线性约束Ax<=b, Aeq*x = beq ,如果没有线性约束,则A,b=[],Aeq=[],beq=[];lb和ub是变量的下界和上界,如果上界和下界没有约束,即无下界也无上界,则lb=[],ub=[],也可以写成 lb的各分量都为-inf,ub的各分量都为inf;nonlcon是用M文件定义的非线性向量函数c(x) , ceq(x);options定义了优化参数,可以使用Matlab缺省的参数设置。

实例:

数学建模 | MATLAB学习 | 非线性规划_第2张图片

数学建模 | MATLAB学习 | 非线性规划_第3张图片

 最佳投资方案应是投资额最小而总收益最大的方案,所以这个最佳投资决策问题归结为总资金以及决策变量(取0或1)的限制条件下,极大化总收益和总投资之比。因此,其数学模型为

数学建模 | MATLAB学习 | 非线性规划_第4张图片

 在一组等式或不等式的约束下,求一个函数的最大值(或最小值)问题,其中至少有一个非线性函数,这类问题称之为非线性规划问题。可概括为一般形式

数学建模 | MATLAB学习 | 非线性规划_第5张图片

数学建模 | MATLAB学习 | 非线性规划_第6张图片

 对于一个实际问题,在把它归结成非线性规划问题时,一般要注意如下几点

(1)确定供选方案:首先要收集同问题有关的资料和数据,在全面熟悉问题的基础上,确认什么是问题的可供选择的方案,并用一组变量来表示它们。

(2)提出追求目标:经过资料分析,根据实际需要和可能,提出要追求极小化或极大化的目标。并且,运用各种科学和技术原理,把它表示成数学关系式。

(3)给出价值标准:在提出要追求的目标之后,要确立所考虑目标的“好”或“坏”的价值标准,并用某种数量形式来描述它。

(4)寻求限制条件:由于所追求的目标一般都要在一定的条件下取得极小化或极大化效果,因此还需要寻找出问题的所有限制条件,这些条件通常用变量之间的一些不等式或等式来表示。


数学建模 | MATLAB学习 | 非线性规划_第7张图片

解  

(1)编写M函数fun1.m定义目标函数

 function f=fun1(x);

 f=sum(x.^2)+8;

(2)编写M函数fun2.m定义非线性约束条件

 function [g,h]=fun2(x);

 g=[-x(1)^2+x(2)-x(3)^2

 x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束

 h=[-x(1)-x(2)^2+2

 x(2)+2*x(3)^2-3]; %非线性等式约束

(3)编写主程序文件如下

 [x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

运行后得到

x =
    0.5522
    1.2033
    0.9478

y =10.6511


 


 


你可能感兴趣的:(数学建模,MATLAB)