对于函数 f ( x ) = 1 1 + x 2 在[-5,5]内取n=10, 按等距节点求n次lagrange插值多项式和newton插值多项式。 取100点,画出插值多项式和原函数的对比图。 并分别比较在x=3.5,x=4.5处的值。
时间: 2024-09-09 11:11:07 浏览: 59
拉格朗日插值法和牛顿插值法都是数值分析中的常用技术,用于近似给定数据集的连续函数。对于函数 \( f(x) = \frac{1}{1+x^2} \),我们将在区间 \([-5, 5]\) 内选取 \( n=10 \) 等间距的节点进行插值。
**拉格朗日插值多项式**计算过程如下:
1. 对每个节点 \( x_i \),构造拉格朗日基 polynomials \( L_i(x) \),它们满足 \( L_i(x_j) = \delta_{ij} \) (\(\delta\) 是 Kronecker 符号)。
2. 使用节点值 \( f(x_1), ..., f(x_{10}) \) 和对应的基多项式,构建拉格朗日插值多项式 \( P_L(x) = \sum_{i=1}^{10} f(x_i) L_i(x) \)。
**牛顿插值多项式**也称为 Neville's algorithm,它同样基于节点值和分段多项式的性质,通过逐项相加得到。
\( P_N(x) = f(x_1) \cdot I_1(x) + f(x_2) \cdot (I_2(x) - I_1(x)) + ... + f(x_{10}) \cdot (I_{10}(x) - I_{9}(x)) \)
其中 \( I_k(x) \) 是从 \( x_1 \) 到 \( x_k \) 的分段常数多项式。
为了生成插值多项式并绘制图表,你可以使用编程语言如Python中的`numpy`、`matplotlib`库,例如:
```python
import numpy as np
import matplotlib.pyplot as plt
# 函数定义
def f(x):
return 1 / (1 + x**2)
# 等距节点选择
x_nodes = np.linspace(-5, 5, 11)[:-1]
y_nodes = [f(xi) for xi in x_nodes]
# 拉格朗日插值和牛顿插值
from scipy.interpolate import lagrange, newton_interpolate
P_L = lagrange(x_nodes, y_nodes)
P_N = newton_interpolate(x_nodes, y_nodes)
# 插值值比较
x_points = [3.5, 4.5]
L_values = P_L(x_points)
N_values = P_N(x_points)
# 绘制对比图
plt.figure(figsize=(10,6))
plt.plot(x_nodes, y_nodes, 'o', label='Data points')
plt.plot(x_nodes, f(x_nodes), '--', label='Original function', color='red')
plt.plot(x_points, [f(x) for x in x_points], 'k:', label='True values')
plt.plot(x_points, L_values, 'g-', label='Lagrange Interpolation', linewidth=2)
plt.plot(x_points, N_values, 'b--', label='Newton Interpolation', linewidth=2)
plt.legend()
plt.show()
print(f"在x=3.5处,拉格朗日插值值为:{L_values[0]:.4f}, 牛顿插值值为:{N_values[0]:.4f}")
print(f"在x=4.5处,拉格朗日插值值为:{L_values[1]:.4f}, 牛顿插值值为:{N_values[1]:.4f}")
阅读全文