这个例子展示了如何解决一个带有非线性不等式约束的标量极小化问题。问题是要找到 这就解决了
受约束
因为两个约束都不是线性的,所以创建一个函数,孔夫曼
,返回向量中两个约束的值C
. 因为铁铬镍铁合金
解算器希望将约束写入表单中
,编写约束函数以返回以下值:
.
helper函数奥布吉文
是目标函数;它出现在本例结束. 设置乐趣
参数作为函数句柄奥布吉文
功能。
fun=@objfun;
非线性约束函数必须返回两个参数:C
,不等式约束,以及ceq公司
,相等约束。因为这个问题没有等式约束,所以helper函数孔子
在本例结束退货[]
作为等式约束。
将初始点设置为[-1,1]
.
x0=[-1,1];
这个问题没有边界或线性约束。将这些参数设置为[]
.
A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];
使用解决问题铁铬镍铁合金
.
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@confun)
找到满足约束条件的局部极小值。优化完成是因为目标函数在可行方向上是不递减的,在最优性公差值范围内,约束满足在约束公差值范围内。
十=1×2-9.5473 1.0474
fval=0.0236
退出消息表示解决方案相对于约束是可行的。为了再次检查,在解处计算非线性约束函数。负值表示满足的约束。
[c,ceq]=confun(x)
c级=2×110-4× -0.3179 -0.3063
ceq=[]
两个非线性约束均为负且接近于零,说明解是可行的,且两个约束在解处都是活动的。
此代码创建奥布吉文
助手函数。
功能f=objfun(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);结束
此代码创建孔子
助手函数。
功能[c,ceq]=confun(x)%非线性不等式约束c=[1.5+x(1)*x(2)-x(1)-x(2)-x(1)*x(2)-10];%非线性等式约束ceq=[];结束