我试图找到一个二维优化问题的根源,它的形式(下面不是实际的方程,因为它很长,这只是问题风格的一个例子)。在
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问题的边界。在
感谢任何帮助。在
谢谢
从全局来看,没有一种通用的方法可以使查找根变得更加健壮——这是因为在中有这么多不同的函数scipy.optimize公司! 在
一个诀窍是,与其求f(x)的根,不如试着求f^2(x)的极小值。寻找极小值通常更为稳健,因为算法只需要不断地向下走到底。然而,缺点是发现的最小值可能不是f(x)=0(即不是根)。在
所以,你可以试试scipy.optimize.fmin\tnc公司这是一个有界的极小值,看看会发生什么。在
正确的猜测总是有帮助的,但是“接近”可能并不总是最好的-您可以更深入地研究函数,并弄清楚“接近”的景观到底是什么样子,如果“接近”(或远!)另一个方向可能对解算器来说更容易(也就是说,一个方向可能相当颠簸,需要翻山越岭才能找到山谷,而另一个方向有一条通向谷底的美丽宽阔的小路)。在
相关问题 更多 >
编程相关推荐