这是一个MWE
import scipy
p = scipy.interpolate.PPoly(x=[1.426618795448907, 3.6900413078920606],
c=[[-0.0003473223894645246],
[0.031172356603618657],
[0.14183014380119674],
[-0.4766926173965321]])
p(p.x), p.roots(extrapolate=False)
结果是:
(array([-4.76692617e-01, 6.07153217e-18]), array([], dtype=float64))
所以在
x[0]
处,y 为负,在 x[1]
处,y 为正(勉强),因此区间内必须存在根,但 roots
找不到它。 如果我设置
extrapolate=True
,则会找到三个根,包括正确的根。这是一个错误,还是我在这里犯了一些错误?
p(x[1])
似乎确实给出了正值,但该值是机器精度的,不能相信它是正值。当您执行
p.roots(extrapolate=True)
时,您会看到它给出的根是 3.69004131,仅比
x[1]
大一点,表明
x[1]
还不够。