Matlab学习系列25非线性优化.docx
- 文档编号:1699805
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:7
- 大小:41.28KB
Matlab学习系列25非线性优化.docx
《Matlab学习系列25非线性优化.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列25非线性优化.docx(7页珍藏版)》请在冰豆网上搜索。
Matlab学习系列25非线性优化
25.非线性规划
、有约束非线性规划
若规划问题的目标函数或约束条件中包含非线性函数,则称为非
线性规划。
非线性规划的最优解(若存在)可能在其可行域的任一点达到,
目前非线性规划还没有适合各种问题的一般解法,各种方法都有其特定的适用范围。
Matlab中非线性规划的标准形式为
Matlab实现:
[x,fval,exitflag,output,lambda,grad,hessian]
二fmincon(‘Un;X0,A,b,Aeq,beq,VLB,VUB,nonIcon:
options)
其中,有些参数同线性规划;
fUn'为用M-文件定义的目标函数F(x);
nonlcon‘为用M-文件定义的非线性向量函数[C(x),Ceq(x)]
例1求解下列非线性规划问题:
minf(x)=x;x;8
xf-x2一0
s.t.«咅+x;=2
XfX兰0
代码:
目标函数(M文件):
functionf=fun1(x)
f=x(1^2+x
(2)A2+8;
非线性约束(M文件):
function[C,Ceq]=fun2(x)
C=-x
(1)A2+x
(2);%非线性约束,若不止1个,则用
C
(1),C
(2),…
Ceq二x
(1)+x
(2)八2-2;%等式约束,若没有等式约束,可令
Ceq=[];
主程序:
xO=rand(2,1);
VLB=zeros(2,1);[x,fval,exitflag,output,lambda,grad,hessian]=fmincon('fun1',x0,[],[],[],[],VLB,[],'fun2')
运行结果(部分):
exitflag=1优化成功
x=1.0000
1.0000最优解x
fval=10.0000目标值f
grad=2.0000
0.49600.5902
二、无约束非线性规划
Matlab中无约束非线性规划的标准形式为:
minf(x)
S.t.Xi巴x巴x2
Matlab提供了3个不同的函数分别适合不同情形:
1.fminbnd函数
用于求解定区间上单变量函数的最小值点,调用格式为:
[x,fval,exitflag,output]=fminbnd(‘Un'x1,x2,options)
其中,fun为用M-文件定义的目标函数。
2.fminunc函数
基于梯度的最优化算法,用于求解单变量及多变量函数的最小值,调用格式为:
[x,fval,exitflag,output,lambda,grad,hessian]
=fminunc(fbn'x0,options)
其中,x0为初始值;
options参数:
LargeScale,on或off设置大型中型优化算法;
HessUpdate,设置中型优化算法的搜索方向的算法,’bfgs'(默
认)为拟牛顿法的BFGS公式;'dfp'为拟牛顿法的DFP公式;steepdesC为最速下降法;
LineSearchType,设置中型优化算法的步长一维搜索的两种算
法,'uadcubic'(默认)为混合的二次和三次多项式插值;'ubicpoly'
为三次多项式插值。
3.fminsearch函数
是根据Nelder算法编写的,用于求解多变量函数的极小值,调用格式为:
[x,fval,exitflag,output]=fminbnd(‘Un'xO,options)其中,options的选项有:
Display,'ff'不显示输出;'er'显示每次迭代信息;'nal'只显示最终结果;
MaxFunEvals,允许进行函数评价的最大次数;
MaxIter,允许迭代的最大次数;
TolX,变量的容许误差限;
TolFun,函数值的容许误差限。
关于三个函数的说明:
(1)三个函数可能只输出局部最优解;
(2)三个函数均只对变量为实数的问题进行优化;
(3)fminunc函数要求目标函数必须连续。
例2求解下列函数的极小值:
miny二丄
|x|
s.t.一3乞x乞1
代码:
目标函数(M文件):
functionf=fun3(x)
f=1/abs(x);
主程序:
x=linspace(-pi,pi);
y=abs(1./x);plot(x,y,'r');
gridon
x0=1;
x1=-3;x2=1;
[x,fval,exitflag]=fminbnd([x,fval,exitflag]=fminunc([x,fval,exitflag]=fminsearch(
'fun3',x1,x2)
'fun3',x0)
'fun3',x0)
运行结果:
x=-2.9999
fval=0.3333
exitflag=1
fminbnd函数优化成功,是正确解
x=889.4311fval=0.0011
exitflag=1
fminunc的目标函数必须是
fminunc函数优化成功,但解是错误的连续函数,本例目标函数不连续)
x=6.3383e+28
exitflag=0
fminsearch函数优化失败,因为该函数只能求解多变量目标函数。
2.惩罚函数法
利用惩罚函数法,可将非线性规划问题的求解转化为一系列无约束非线性规划问题。
惩罚函数法求解非线性规划问题,是利用问题中的约束函数做出适当的惩罚函数,由此构造出带参数的增广目标函数,将问题转化为无约束非线性规划问题。
下面介绍外惩罚函数法。
求解如下极小值问题:
minf(x)
s.t.g(x)乞0,i=1,,r
hi(x)一0,i=1,,s
K(x)=0,i=1,,t
取一个充分大的数M>0,构造函数
rst
P(x,M)=f(x)M,max{gi(x),0}-Mxmin{hi(x),0}M,|ki(x)|
\=1imim
或者用向量表示:
其中,G(x)珂gjx),,gr(x)]T,H(x)珂0(x),,hs(x)]T,K(x)二[K(x),,ks(x)]T。
则以增广目标函数P(x,M)为目标函数的无约束极值问题:
minP(x,M)
的最优解x也是原问题的最优解
例3求解下列非线性规划问题:
minf(x)=x;x28
s.t.%-x;_0
2
_捲_X22=0
x^i,x2_0
代码:
增广目标函数(M文件):
functiong=ex25_fun4(x)
M=50000;
f=x
(1)A2+x
(2)A2+8;
g=f-M*min(x
(1)A2-x
(2),0)+M*abs(-x
(1)-x
(2)A2+2)-M*
min(x
(1),0)-M*min(x
(2),0);
主程序:
[x,fval,exitflag]=fminunc('ex25fun4',rand(2,1))
运行结果:
x=1.0467
0.9764
fval=10.0489
exitflag=5(说明重要方向导数小于规定的容许范围并且约束
违背小于optionsTolCom)
注:
最优解是(1,1),上述结果也可以接受。
另外,初始值的选取
不同,会得到不同的局部最优解。
三、二次规划
若非线性规划的目标函数为自变量x的二次函数,约束条件又全
是线性的,就称为二次规划
Matlab中的二次规划的标准形式为:
1T」
minxHxfx
2
s.t.Ax_b
Aeqx=beq
其中,H为实对称矩阵,
f,b为列向量,A为相应维数的矩阵。
Matlab实现:
[x,fval,exitflag,output]二quadprog(H,f,A,b,Aeq,beq,LB,UB,xO,options)
例4求解下列二次规划问题:
22
minf(x)=2xj-4X4X24x2「6论一3x2
s.t.x4x2込3
4x4x2_9
x4,x2_0代码:
H=[4,-4;-4,8];
f=[-6;-3];
A=[1,1;4,1];
b=[3;9];
[x,fval,exitflag]=quadprog(H,f,A,b,[],[],zeros(2,
1))
运行结果:
x=1.9500
1.0500
fval=-11.0250
exitflag=1
四、最小二乘优化
数据拟合时的实际值与拟合值之差,称为残差。
拟合效果的好坏,通常是用残差平方和的大小来刻画的,即以残差平方和为目标函数,求最佳的拟合参数使得目标函数取到极小值。
这就是拟合的最小二乘原理。
Matlab实现:
Isqcurvefit函数、Isqnonlin函数【参考第13篇:
数据插值与拟合】。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 学习 系列 25 非线性 优化