假设我有一个函数f(X)
,我想通过约束来最小化它,例如一些其他函数-A(X) = 0
和。有很多算法可以做到这一点,但为了让我的生活更轻松,我想在 matlab中使用内置函数。所以我读了这个文档:
http: //www.mathworks.com/help/optim/ug/fmincon.htmlB(X) = 0
0 < C(X) < pi
fmincon()
但我不明白我应该如何传递参数来具体解决我的问题。我该怎么做?我能做到吗?
假设我有一个函数f(X)
,我想通过约束来最小化它,例如一些其他函数-A(X) = 0
和。有很多算法可以做到这一点,但为了让我的生活更轻松,我想在 matlab中使用内置函数。所以我读了这个文档:
http: //www.mathworks.com/help/optim/ug/fmincon.htmlB(X) = 0
0 < C(X) < pi
fmincon()
但我不明白我应该如何传递参数来具体解决我的问题。我该怎么做?我能做到吗?
使用 fmincon 的 nonlcon 参数(我在这里假设您的约束是非线性的?)。然后A(X)
和B(X)
很好,但C(X)
它必须在表单中,c(X) < 0
所以你需要将它分解为该表单的两个约束。
nonlcon
我从文档的其他地方提取了这个如何指定函数的示例:
function [c,ceq]=myNonlinearContraints(x)
%First deal with your nonlinear equalities
c(1) = A(X);
c(2) = B(X);
%Then your inequalities transformed to be in the form ceq < 0
ceq(1) = -C(X);
ceq(2) = C(X) - pi;
查看函数 A、B 是线性的还是非线性的。那可能A(X)只是一个积分,那么解释应该是它是线性的。如果您将线性约束作为非线性提供,它实际上会有所不同。
如果它们是非线性的,则创建一个
function [c,ceq] = nonlcon(X)
它给出了等式约束值(ceq)和不等式约束值(c)。请记住,不等式约束被解释为
ineq(X) < 0
所以你需要这样计算。
C(X) 似乎是一个三角函数,因此它也将是 nonlcon 函数的一部分。这个 nonlcon,您将作为参数传递给 fmincon。Nonlcon 为 X 的特定值调用,它返回约束值。如果有的话,传递你的下限和上限,并尝试针对不同的初始点 x0 进行优化。对于某些问题,可以找到不止一种解决方案。