scipy PPoly.root 中的错误

问题描述 投票:0回答:1

这是一个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
,则会找到三个根,包括正确的根。

这是一个错误,还是我在这里犯了一些错误?

python scipy polynomials
1个回答
0
投票
虽然评估

p(x[1])

 似乎确实给出了正值,但该值是机器精度的,不能相信它是正值。当您执行 
p.roots(extrapolate=True)
 时,您会看到它给出的根是 3.69004131,仅比 
x[1]
 大一点,表明 
x[1]
 还不够。

© www.soinside.com 2019 - 2024. All rights reserved.