matlab 罚函数法解决非线性规…

罚函数法 
    利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因而也称这种方法为序列无约束最小化技术,简记为 SUMT (Sequential Unconstrained Minization Technique)。 
    罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法。 
考虑问题: 
matlab <wbr>罚函数法解决非线性规划问题 <wbr>fminunc函数

取一个充分大的数M>0,构造函数
matlab <wbr>罚函数法解决非线性规划问题 <wbr>fminunc函数

增广目标函数P(x,M)为目标函数的无约束极值问题 min P(x,M)的最优解x 也是原问题的最优解。 


例  求下列非线性规划 

matlab <wbr>罚函数法解决非线性规划问题 <wbr>fminunc函数

解  (i) 编写 M 文件 test.m  
function  g=test(x); 
%M为足够大的数
M=50000;
%f为目标函数
f=x(1)^2+x(2)^2+8; 
%把约束条件写成标准形式
g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+  M*abs(-x(1)-x(2)^2+2);

 (ii) 在Matlab 命令窗口输入 
[x,y]=fminunc('test',rand(2,1)) 
即可求得问题的解。 


你可能感兴趣的:(matlab 罚函数法解决非线性规…)