0

假设我有一个函数f(X),我想通过约束来最小化它,例如一些其他函数-A(X) = 0和。有很多算法可以做到这一点,但为了让我的生活更轻松,我想在 matlab中使用内置函数。所以我读了这个文档: http: //www.mathworks.com/help/optim/ug/fmincon.htmlB(X) = 00 < C(X) < pifmincon()

但我不明白我应该如何传递参数来具体解决我的问题。我该怎么做?我能做到吗?

4

2 回答 2

1

使用 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;
于 2013-06-06T06:33:54.803 回答
0

查看函数 A、B 是线性的还是非线性的。那可能A(X)只是一个积分,那么解释应该是它是线性的。如果您将线性约束作为非线性提供,它实际上会有所不同。

如果它们是非线性的,则创建一个

function [c,ceq] = nonlcon(X) 

它给出了等式约束值(ceq)和不等式约束值(c)。请记住,不等式约束被解释为

ineq(X) < 0

所以你需要这样计算。

C(X) 似乎是一个三角函数,因此它也将是 nonlcon 函数的一部分。这个 nonlcon,您将作为参数传递给 fmincon。Nonlcon 为 X 的特定值调用,它返回约束值。如果有的话,传递你的下限和上限,并尝试针对不同的初始点 x0 进行优化。对于某些问题,可以找到不止一种解决方案。

于 2013-06-06T06:35:39.783 回答