我试图找到形式的二维优化问题的根源(下面不是实际的方程,因为它很长,这只是问题风格的一个例子)。
def my_function(a,b):
c = exp(a) + b
d = a + 2 - exp(b)
return c, d
我想知道a和b,其中c和d为零。
到目前为止,我正在使用scipy优化库中的fsolve,并将种子值作为我知道的值接近解决方案传递。这种方法效果很好,虽然偶尔也会失败,但我得到的解决方案错误是“在过去10次迭代中没有取得良好进展”。
我想知道是否有一种方法/一般的良好做法可以使根查找更加健壮?
否则,我想尝试有限根发现。在1D中,可以使用fminbound,但我找不到一个能让我指定2D问题边界的函数。
任何帮助表示感谢。
由于
答案 0 :(得分:1)
总体而言,没有一般的方法可以让root查找更加健壮 - scipy.optimize中有很多不同的函数是有原因的!
一个技巧是找到f(x)的最小值而不是找到f(x)的根,而不是试图找到f ^ 2(x)的最小值。寻找最小值通常更加稳健,因为算法只需要继续下降到最低点。然而,缺点是找到的最小值可能不是f(x)= 0(即不是根)。
所以,你可以尝试scipy.optimize.fmin_tnc这是一个带边界的最小化器,看看会发生什么。
良好的猜测总是有帮助的,但“接近”可能并不总是最好的 - 你可能会更深入地看待这个功能,并找出真实的“近距离”景观,以及“关闭”(或者远近! )在不同的方向可能对解算者来说更容易(也就是说,一个方向可能非常不稳定,需要越过山脉才能找到山谷,而另一个方向则有一条美丽的宽阔路径直到山谷的底部)。