【发布时间】:2018-11-30 15:18:17
【问题描述】:
关于以下代码:
import numpy as np
from scipy.interpolate import lagrange
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a+b
return a
x = np.array(range(64))
y = np.array([fib(n) for n in xrange(64)])
P = lagrange(x, y)
print P(10)
我使用 scipy 通过在 64 个点上插值函数 (fib) 创建多项式 P。因此,我希望P(n) == fib(n) 可以用于任何0 <= n < 64。相反,对于P(10),例如,我得到-248014823183360.0 而不是55 (fib(10))。我想这是某个地方的精度错误,但我不确定在哪里。如何构造满足这个期望的多项式函数P?
【问题讨论】:
-
来自the doc:警告:这个实现在数值上是不稳定的。即使选择最佳,也不要期望能够使用超过 20 点。
标签: python scipy polynomial-math