gpt4 book ai didi

python - `lagrange` 返回的多项式不计算为插值点

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:24 28 4
gpt4 key购买 nike

在以下代码上:

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 创建多项式 P通过在 64 个点上插值函数 ( fib )。因此,我期望 P(n) == fib(n)对于任何 0 <= n < 64 。相反,对于 P(10) ,例如,我得到 -248014823183360.0而不是55 (fib(10))。我认为这是某个地方的精度错误,但我不确定在哪里。如何构造多项式函数 P哪个满足这个期望?

最佳答案

您可以尝试 numpy.polyfit,它在更高的多项式秩上更稳定

import numpy as np
from scipy.interpolate import lagrange

N = 30

def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a+b
return a


x = np.arange(N)
y = np.array([fib(i) for i in x])


P = np.polyfit(x, y, N)

n = int(N/2)
print ((y[n], np.polyval(P, n)))

L = lagrange(x, y)
print ((y[n], L(n)))

610, 609.9896

610,-645662.4698

除此之外,我想说多项式拟合对于大量点来说很少是一个好的解决方案。如果您对斐波那契数列感兴趣(或者它只是一个示例?),您可以使用基于黄金数幂的分析公式,您可以将其导出为 float 指数(请查看斐波那契维基百科页面)。

关于python - `lagrange` 返回的多项式不计算为插值点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com