非线性不等式约束
这个例子展示了如何解决一个标量与非线性不等式约束的最小化问题。问题是要找到 能解决
受约束
因为两个约束是线性的,创建一个函数,confun.m
,返回的值都限制在一个向量c
。因为fmincon
解算器预计写在形式的约束
,写下你的约束函数返回以下值:
。
建立目标函数
辅助函数objfun
目标函数;它出现在这个例子。设置有趣的
参数作为句柄函数objfun
函数。
有趣= @objfun;
创建非线性约束函数
非线性约束函数必须返回两个参数:c
、不等式约束量表信
等式约束。因为这个问题没有等式约束,helper函数confun
在这个例子返回[]
作为等式约束。
解决问题
设置初始点[1]
。
x0 = [1];
这个问题没有边界或线性约束。这些参数设置为[]
。
一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];
解决问题用fmincon
。
[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,@confun)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×2-9.5473 - 1.0474
fval = 0.0236
检查解决方案
退出的消息表明,解决方案是可行的约束。仔细检查,评估解决方案的非线性约束函数。负值表示满足约束条件。
测查[c] = confun (x)
c =2×1104×-0.3179 - -0.3063
测查= []
非线性约束条件都是负面,接近于零,表明该方案是可行的,同时约束是积极的解决方案。
辅助函数
这段代码创建了objfun
helper函数。
函数f = objfun f (x) = exp (x (1)) * (4 * x (1) ^ 2 + 2 * x (2) ^ 2 + 4 * x (1) * (2) + 2 * x (2) + 1);结束
这段代码创建了confun
helper函数。
函数测查[c] = confun (x)%非线性不等式约束c = (1.5 + x (1) * (2) - x (1) - (2);x - x (1) * (2) - 10);%非线性等式约束测查= [];结束