有没有办法在MATLAB中使用fsolve,指定解决方案的界限?即所有解决方案变量> 0
答案 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)