scipy 函数的替代方法

Alternative to scipy function

我需要找到多维函数 F(x) 的根,我正在使用 scipy 函数 scipy.optimization.root(...,method=''),它允许我 select 不同的方法解决方案。然而,对于某些问题,它变得缓慢且不收敛,也许尝试替代包会很有用。你知道其中的一些吗?

一般来说,你对问题了解得越多越好。例如,您可能知道根出现的大致范围。然后您可以先 运行 粗略搜索(例如使用 np.linspace)为您要使用的方法找到一个好的起点。示例:

假设你有一个像

这样的函数
def f(x):
    return np.exp(-x)*(x-1)**4
如果从 x0=5 开始,

scipy 将无法找到根,因为指数。 但是,如果您知道解决方案在 (-10,10) 中的某处,您可以执行类似

X=np.linspace(-10,10,10)
x0 = X[ np.argmin( np.abs( f(X) ) ) ]

from scipy.optimize import root
y=root(f,x0)
print(y.x)

你会得到一个不错的结果(很快!),因为 np.argmin( np.abs( f(X) ) ) 给你 X 的参数,其中 f 最接近 0。

你必须记住,如果你在没有三重检查的情况下使用这些“技巧”也是危险的,你总是应该有一些直觉(或者更好的分析近似值)。