我正在尝试对函数 $f(x) = |x| 进行插值+ x/2 - x^2$ 在使用 1000 个节点的切比雪夫节点处使用牛顿分差。我有代码,但它一直给我溢出和“nan”之后。我无法发现我的错误。我想知道是否有人可以帮我调试它:
import math as m
import numpy as np
def f(x):
x = float(x)
y = abs(x) + x/2.0 - x**2
return y
n = 999
Chebynodes = []
fvalues = []
for i in range(0,n+1):
Chebynodes.append(m.cos(i*(m.pi)/n))
fvalues.append(f(Chebynodes[i]))
#computes the coefficient of Newton's divided differences polynomial
def ddifcoeff(x, y):
m = len(x)
a = np.copy(x)
b = np.copy(y)
for i in range(1, m):
b[i:m] = (b[i:m] - b[i - 1])/(a[i:m] - b[i - 1])
return b
print(ddifcoeff(Chebynodes,fvalues))
我尝试使用在互联网上找到的几种不同的牛顿分差代码,并尝试自己创建一个分差矩阵。但是,这些方法似乎都不起作用。在我看来,问题可能出在切比雪夫节点靠得太近了。但是,我不想更改节点的位置或数量。