解决方案与解决方案的界限

时间:2010-08-27 01:23:38

标签: matlab

有没有办法在MATLAB中使用fsolve,指定解决方案的界限?即所有解决方案变量> 0

3 个答案:

答案 0 :(得分:2)

不是直接的,但这个问题的一个解决方案是在等式中添加一个限制问题的术语。

我没有优化工具箱,所以我不能用fsolve给你一个具体的例子,但是这就是我用fminsearch做的,它有同样的问题。

myFun = @(args) abs( sin(args(1)) + cos(args(2)) )
fminsearch(myFun, [0, 0])
ans =

   -0.8520    0.7188

但如果我想将我的问题限制在积极的解决方案

myFun = @(args) abs(sin(args(1)) + cos(args(2))) + (args(1)<0) + (args(2)<0)
fminsearch(myFun, [0, 0])
ans =

    0.0000    1.5708

应该有一种方法来调整你的等式,以解决你的问题。

答案 1 :(得分:1)

您应该使用lsqnonlin,它与fsolve非常相似,但允许您指定绑定约束。

另一种方法是使用变量转换。例如,要强制执行x&gt; = 0,则不要求解F(x)= 0 w.r.t. x,求解F(z。^ 2)= 0 w.r.t. z然后使用x = z。^ 2作为您的解决方案。这有一些微妙的危害。例如,您必须避免使用z(i)= 0作为初始猜测,但它通常有效。

答案 2 :(得分:0)

没有。但是,您可以使用例如F(x)=0来最小化abs(F(x)),而不是求解fminbndFMINBND

修改

不幸的是,{{1}}似乎不支持数组值参数(我认为这是你想要的)。为此,您需要从优化工具箱中转到FMINCON