非线性等式和不等式约束
这个例子展示了如何解决一个包含非线性约束的优化问题。包括非线性约束通过编写一个函数,计算两个平等和不平等的约束值。一个非线性约束函数的语法
测查[c] = nonlinconstr (x)
这个函数c (x)
代表了约束c (x) < = 0
。这个函数量表(x)
代表了约束量表(x) = 0
。
注意:你必须有非线性约束函数返回c (x)
和量表(x)
,即使你只有一个类型的非线性约束。如果一个约束条件不存在,函数返回[]
的约束。
非线性约束
假设你有非线性等式约束
和非线性不等式约束
。
重写这些约束
的confuneq
辅助函数在这个例子实现了这些不等式在正确的语法。
目标函数
解决这个问题
受约束。的objfun
辅助函数在这个例子实现这个目标函数。
解决问题
通过调用解决问题fmincon
解算器。这个解算器需要一个初始点;使用点x0 = [1]
。
x0 = [1];
这个问题没有边界或线性约束,所以这些输入设置[]
。
一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];
解算器。
[x, fval] = fmincon (Aeq @objfun x0, A, b,说真的,磅,乌兰巴托,@confuneq)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×2-0.7529 - 0.4332
fval = 1.5093
满足约束条件的解算器报告的解决方案。检查的非线性约束的解决方案。
测查[c] = confuneq (x)
c = -9.6739
测查= 2.0668 e-12
c
小于0,。量表信
= 0在默认约束的宽容1 e-6
。
辅助函数
下面的代码创建confuneq
helper函数。
函数测查[c] = confuneq (x)%非线性不等式约束c = x - x (1) * (2) - 10;%非线性等式约束测查x = x (1) ^ 2 + (2) - 1;结束
下面的代码创建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);结束