Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根查找有时会失败。F解决方案是否可以为2D优化设定限制?_Python_Optimization_Numpy_Scipy - Fatal编程技术网

Python 根查找有时会失败。F解决方案是否可以为2D优化设定限制?

Python 根查找有时会失败。F解决方案是否可以为2D优化设定限制?,python,optimization,numpy,scipy,Python,Optimization,Numpy,Scipy,我试图找到一个2D优化问题的根,形式如下(下面不是实际的方程,因为它很长,这只是问题类型的一个例子) 我想知道a和b,其中c和d为零 到目前为止,我正在使用scipy优化库中的fsolve,并将种子值作为我知道接近解决方案的值传递。这很好,虽然偶尔会失败,但我得到了关于解算器“在过去10次迭代中没有取得良好进展”的错误 我想知道是否有一种方法/通用的良好实践可以使根查找更加健壮 否则,我想尝试有界根查找。在1D中,可以使用fminbound,但我找不到一个函数可以让我为2D问题指定边界 谢谢你的

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

我想知道a和b,其中c和d为零

到目前为止,我正在使用scipy优化库中的fsolve,并将种子值作为我知道接近解决方案的值传递。这很好,虽然偶尔会失败,但我得到了关于解算器“在过去10次迭代中没有取得良好进展”的错误

我想知道是否有一种方法/通用的良好实践可以使根查找更加健壮

否则,我想尝试有界根查找。在1D中,可以使用fminbound,但我找不到一个函数可以让我为2D问题指定边界

谢谢你的帮助


感谢

总而言之,没有通用的方法使根查找更加健壮-这是scipy.optimize中有这么多不同功能的原因

一个技巧是不要求f(x)的根,你可以试着求f^2(x)的极小值。寻找极小值通常更稳健,因为该算法只需要不断向下到底。然而,缺点是发现的最小值可能不在f(x)=0(即不是根)

所以,您可以尝试scipy.optimize.fmin_tnc,这是一个有界的极小值,看看会发生什么


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

我们是否应该假设在您的“实际”中问题,就
a
而言,不可能解决
b
?最好的方法是利用自由变量之间的关系,从分析角度将问题减少到1D。
def my_function(a,b):
    c = exp(a) + b
    d = a + 2 - exp(b)
    return c, d