python - 根查找偶尔会失败。 fSolve 可以给出二维优化的限制吗?

标签 python optimization numpy scipy

我试图找到一个二维优化问题的根,形式如下(下面不是实际的方程,因为它很长,这只是问题类型的一个例子)。

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,这是一个有边界的最小化器,看看会发生什么。

好的猜测总是有帮助的,但“接近”可能并不总是最好的 - 您可能会更深入地研究函数并弄清楚“接近”的景观到底是什么样子,如果“接近”(或远! ) 在不同的方向上对求解器来说可能更容易(也就是说,一个方向可能非常起伏,需要翻山越岭才能找到山谷,而另一个方向有一条通往山谷底部的美丽宽阔路径)。

关于python - 根查找偶尔会失败。 fSolve 可以给出二维优化的限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241345/

相关文章:

python - 如何在 matplotlib 中将一个子图的图例复制到另一个子图

python - 使用不需要互联网的 Python 进行逼真的文本转语音?

python - alembic create_table 使用 declarative_base 派生对象

java - 一次将三个功能实现到不同的进化优化器中

python - 通过 bool 索引数组进行 Numpy 数组赋值

python - Jupyter Notebook 在两个单元之间运行所有代码

objective-c - Swift 优化不起作用?

r - 在 R 中查找有理函数的局部最大值

python - 将 Numpy 数组拆分为每列的数组

python - 可能使用 Python 装饰器或其他重构 : iterative optimization