在python中找到函数的根

问题描述

我需要在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 没有给我正确的根,即使是这个简单的问题?谢谢!

解决方法

enter image description here 这是你的功能。它刚刚找到了第二个根。