1.无约束非线性规划问题
对于无约束优化问题,如果函数连续的话,一般使用fminunc函数,如果函数不连续则使用fminsearch函数,对于二次以上的问题fminsearch比fminunc函数具有更好的寻优效果。
(1)fminunc函数
1)语法:
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(…)
2)说明:fun为需最小化的目标函数;x0为给定的搜索的初始点;options指定优化参数。返回的x为最优解向量;fval为x处的目标函数值;exitflag描述函数的输出条件;out-put返回优化信息;grad返回目标函数在x处的梯度;hessian返回在x处目标函数的海赛矩阵信息。
例4-7 求minf=4x2+5xy+2y2。
需要先编辑myfun.m文件:
function f=myfun(x)
f=4∗x(1)^2+5∗x(1)∗x(2)+2∗x(2)^2;
取初始点:x0=(1,1),在Command Window输入:
x0=[1,1];
[x,fval,exitflag]=fminunc(@myfun,x0)
运算结果:
x=
1.0e-005∗
0.2490 -0.4397
fval=
8.7241e-012
exitflag= 1
(2)fminsearch函数
语法:
x=fminsearch(fun,x0)
x=fminsearch(fun,x0,options)
x=fminsearch(fun,x0,options,P1,P2)
[x,fval]=fminsearch(…)
[x,fval,exitflag]=fminsearch(…)
[x,fval,exitflag,output]=fminsearch(…)
[x,fval,exitflag,output,grad]=fminsearch(…)
[x,fval,exitflag,output,grad,hessian]=fminsearch(…)
参数及返回变量与fminunc函数相同。
2.多元非线性最小二乘问题
多元非线性二乘问题的数学模型为
1)语法:
x=lsqnonlin(fun,x0)
x=lsqnonlin(fun,x9,lb,ub)
x=lsqnonlin(fun,x0,options)
x=lsqnonlin(fun,x0,options,P1,P2) ′
[x,resnorm]=lsqnonlin(…)
[x,resnorm,residual,exitflag]=lsqnonlin(…)
[x,resnorm,residual,exitflag,output]=lsqnonlin(…)
[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(…)
[x,resnorm,residual,exitflag,output,lambda,jacobianl=lsqnonlin(…)
2)说明:x返回解向量;resnorm返回x处残差的平方范数值sum(fun(x).^2);re-sidual返回x处的残差值fun(x);lambda返回包含x处拉格朗日乘子的结构参数;jacobian返回解x处的fun函数的雅可比矩阵。
lsqnonlin默认时选择大型优化算法。Lsqnonlin通过将optidns.LargeScale设置为“off”来作中型优化算法,其采用一维搜索法。
例4-8 求minf=4(x2-x1)2+(x2-4)2,选择初始点x0(1,1)。
MATLAB代码:
f=‘4∗(x(2)-x(1))^2+(x(2)-4)^2’;(www.xing528.com)
[x,reshorm]=lsqnonlin(f,[1,1])
结果:
x=
3.9987 3.9987
reshorm=
3.2187e-012
3.有约束非线性规划问题
有约束非线性规划数学模型为
minF(X)
s.t.Gi(X)≤0 (i=1,…,m)
Gj(X)=0 (j=m+1,…,n)
Xl≤X≤Xu
式中,f(X)为多元实值函数;G(X)为向量值函数。
在有约束非线性规划问题中,通常要将该问题转换为更简单的子问题,这些子问题可以求并作为迭代过程的基础。其基于K-T方程解的方法的K-T方程可表达为
Gi(X∗)=0 (i=1,…,m)
λi∗≥0 (i=m+1,…,n)
方程第一行描述了目标函数和约束条件在解处梯度的取消。由于梯度取消,需要用La-grange乘子λi来平衡目标函数与约束梯度间大小的差异。
有约束非线性问题一般用fmincon函数求解。
1)语法:
x=fmincon(f,x0,A,b)
x=fmincon(f,x0,A,b,Aeq,beq)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval]=fmincon(…)
[x,fval,exitflag]=fmincon(…)
[x,fval,exitflag,output]=fmincon(…)
[x,fval,exitflag,output,lambda]=fmincon(…)
2)说明:
x=fmincon(f,x0,A,b)返回值x为最优解向量。其中,x0为初始点;A、b为不等式约束的系数矩阵和右端列向量。
x=fmincon(f,x0,A,b,Aeq,beq)作有等式约束的问题。若没有不等式约束,则令A=[],b=[]。
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)中lb、ub为变量x的下界和上界;nonlcon=@fun,由M文件fun.m给定非线性不等式约束c(x)≤0和等式约束g(x)=0;options为指定优化参数进行最小化。
例4-9 求解
minf(X)=-x1x2x3
s.t.0≤x1+2x2+2x3≤72
首先建立目标函数文件myfun.m文件:
Function f=ff7(x)
f=-x(1)∗x(2)∗x(3)
然后将约束条件改写成如下不等式
-x1-2x2-2x3≤0
x1+2x2+2x3≤72
在Command Window键入程序:
A=[-1-2-2;1 2 2];
b=[0;72];
x0=[10;10;10];
[x,fval]=fmincon(@myfun,x0,A,b)
结果:
x=
24.0000
12.0000
12.0000
fval=
-3456
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。