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。
你必须记住,如果你在没有三重检查的情况下使用这些“技巧”也是危险的,你总是应该有一些直觉(或者更好的分析近似值)。
我需要找到多维函数 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。
你必须记住,如果你在没有三重检查的情况下使用这些“技巧”也是危险的,你总是应该有一些直觉(或者更好的分析近似值)。