问题描述
我需要在python中找到一些函数的根,我只有数值数据,没有实际的函数形式。我尝试使用 scipy.optimize.root
,但得到了一些奇怪的结果。这是重现问题的最小代码:
import numpy as np
from scipy.interpolate import CubicSpline
from scipy import optimize
def func(x):
return (x-4)*(np.exp(x)+1)
x = np.random.rand(1000)*10
y = func(x)
data = np.column_stack((x,y))
p = data[:,0].argsort()
x = data[:,0][p]
y = data[:,1][p]
cs = CubicSpline(x,y)
sol = optimize.root(cs,[0],method='hybr')
print(sol.x)
代码的输出是 -5.42024365
,这显然不是我选择的函数的根。如果我尝试 cs(-5.42024365)
我得到 -0.00305901
(初始数据是随机生成的,因此该值会有所改变,但显然不是零)。如果我尝试 cs(4)
,我会得到 -4.46575001e-07
,它看起来更像一个根(它实际上是我试图找到的根)。我究竟做错了什么。为什么 scipy.optimize.root
没有给我正确的根,即使是这个简单的问题?谢谢!