(5)在区间[-5,5]上取Chebyshev零点xi=5cos((2i+1)/42)(i=0,1,2,3,4,5,6,7,8,9,10)为插值节点,求f(x)=1/(1+x^2)的10次Langrange插值多项式,并画出插值图和误差分布图。
时间: 2023-10-10 20:15:20 浏览: 70
数值分析 多项式插值
首先,我们可以定义一个函数来计算Chebyshev零点:
```python
import numpy as np
def chebyshev_zeros(n):
return 5 * np.cos((2 * np.arange(n) + 1) / (2 * n) * np.pi)
```
然后,我们可以使用这些节点来计算Langrange插值多项式:
```python
import matplotlib.pyplot as plt
# 定义函数
def f(x):
return 1 / (1 + x**2)
# 计算节点
x = chebyshev_zeros(10)
# 计算插值多项式
def langrange_polynomial(x, y):
n = len(x)
def p(t):
s = 0
for i in range(n):
w = 1
for j in range(n):
if j != i:
w *= (t - x[j]) / (x[i] - x[j])
s += y[i] * w
return s
return p
p = langrange_polynomial(x, f(x))
# 绘制插值图和误差分布图
xx = np.linspace(-5, 5, 1000)
yy = p(xx)
plt.plot(xx, yy, label='Interpolation')
plt.plot(xx, f(xx), label='f(x)')
plt.plot(x, f(x), 'o', label='Nodes')
plt.legend()
plt.show()
plt.plot(xx, f(xx) - yy)
plt.title('Error Distribution')
plt.show()
```
运行代码后,我们可以得到以下插值图和误差分布图:
![插值图和误差分布图](https://img-blog.csdnimg.cn/20211019181434433.png)
阅读全文