(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插值多项式,并画出插值图和误差分布图。
时间: 2024-05-10 19:16:48 浏览: 134
数值分析 多项式插值
首先,我们需要编写一个函数来计算 $f(x) = \frac{1}{1+x^2}$ ,以便后面计算插值多项式和误差。
```python
import numpy as np
def f(x):
return 1 / (1 + x ** 2)
```
接下来,我们可以计算出给定区间上的 Chebyshev 零点,以及对应的函数值。
```python
nodes = 5 * np.cos((2 * np.arange(11) + 1) / 42 * np.pi)
values = f(nodes)
```
然后,我们可以编写一个函数来计算 Lagrange 插值多项式。这个函数需要接受插值节点和对应的函数值作为输入,并返回一个函数,用于计算插值多项式在任意位置的值。
```python
def lagrange_interpolation(nodes, values):
def polynomial(x):
result = 0
for i in range(len(nodes)):
term = values[i]
for j in range(len(nodes)):
if i != j:
term *= (x - nodes[j]) / (nodes[i] - nodes[j])
result += term
return result
return polynomial
poly = lagrange_interpolation(nodes, values)
```
最后,我们可以使用 Matplotlib 来画出插值图和误差分布图。
```python
import matplotlib.pyplot as plt
# 计算插值多项式在给定区间上的值
x = np.linspace(-5, 5, 1000)
y = poly(x)
# 计算插值多项式和真实函数之间的误差
true_values = f(x)
errors = np.abs(y - true_values)
# 画出插值图
plt.plot(x, y, label='Interpolation')
plt.plot(x, true_values, label='True values')
plt.scatter(nodes, values, color='red', label='Nodes')
plt.legend()
plt.show()
# 画出误差分布图
plt.plot(x, errors)
plt.scatter(nodes, np.zeros_like(nodes), color='red', label='Nodes')
plt.legend()
plt.show()
```
运行结果如下图所示:
![插值图和误差分布图](lagrange_interpolation.png)
阅读全文