2.考察函数 , 将区间[-5,5]分为n等分,以Pn(x)表示取n+1个分点作节点的插值多项式,编写程序对[-5,5]间隔0.5进行插值,并将插值所得曲线绘图和原函数图像进行比较(n分别取2,10,每种情况分别比较)。
时间: 2024-09-23 16:01:42 浏览: 25
matlab中分岔图的程序:for eqn x(n+1)=rx(1-x)-matlab开发
在Python中,我们可以使用Scipy库中的`linspace`函数来生成等间距的点,然后利用这些点计算Lagrange插值多项式。下面是一个简单的示例,演示了如何实现这个过程:
```python
import numpy as np
from scipy.interpolate import lagrange
import matplotlib.pyplot as plt
# 函数 f(x) = x^2 + 1 在 [-5, 5] 的定义
def func(x):
return x**2 + 1
# 定义插值函数
def interpolate(n, x_min=-5, x_max=5, step=0.5):
# 分割区间并获取节点
nodes = np.linspace(x_min, x_max, n + 1)
# 计算Lagrange插值多项式
interpolation_poly = [lagrange(nodes[:-1], x) for x in nodes[1:]]
return nodes, interpolation_poly
# 比较原始函数和插值结果
for n in [2, 10]:
x_nodes, p_nodes = interpolate(n, step=0.5)
# 插值曲线
interpolated_values = np.array([p_nodes[i](x_nodes) for i in range(len(p_nodes))])
# 绘制原始函数和插值曲线
plt.figure(figsize=(8, 6))
plt.plot(x_nodes, func(x_nodes), 'b-', label=f'Original Function (n={n})')
plt.plot(x_nodes, interpolated_values, 'r:', label=f'Interpolated Polynomial (n={n})')
plt.legend()
plt.title(f"Interpolation Comparison (Step: {step})")
plt.grid(True)
plt.show()
#
阅读全文