python在[0,2π]区间上给出函数cos(x)的12个插值函数点的值, 利用三点抛物线拉格朗日插值方法进行插值,并且与cos(x)函数曲线进行作图比较。 对函数cos(x)在[0,2π]区间上进行三次样条插值并作图。
时间: 2024-10-24 10:08:51 浏览: 32
在Python中,我们可以使用`numpy`, `scipy.interpolate` 和 `matplotlib` 这些库来实现这个任务。首先,我们需要计算给定区间内的12个等间距点,然后应用三点抛物线拉格朗日插值法和三次样条插值。
```python
import numpy as np
from scipy.interpolate import lagrange, splev, splrep
import matplotlib.pyplot as plt
# 定义原始数据点
x = np.linspace(0, 2*np.pi, 13, endpoint=True)[:-1] # 选择12个均匀间隔点,排除最后一个(防止重复)
y_cos = np.cos(x)
# 三点拉格朗日插值
basis_polys = [lagrange(x, y_cos)] * len(y_cos)
y_lagrange = np.array([basis_poly(*x) for basis_poly in basis_polys])
# 创建拉格朗日插值函数
def interpolate_lagrange(x_new):
return np.array([lagrange(x, y_cos)(*x_new) for x, _ in zip(x, y_cos)])
# 三次样条插值
tck_lagrange = splrep(x, y_cos, s=0) # 使用默认权重,s=0表示不允许自拟合
y_spline = splev(x_new, tck_lagrange, der=0)
# 计算新的插值点
x_new = np.linspace(0, 2*np.pi, 1000) # 更细的网格用于绘图
# 绘制原始函数和插值结果
plt.figure(figsize=(8, 6))
plt.plot(x, y_cos, 'b', label='Original cos(x)')
plt.plot(x_new, y_lagrange, 'r:', label='Lagrange interpolation')
plt.plot(x_new, y_spline, 'g--', label='Spline interpolation')
plt.legend()
plt.xlabel('x (radians)')
plt.ylabel('cos(x)')
plt.title('Comparison of cos(x) with Lagrange and Spline Interpolation')
plt.grid(True)
plt.show()
```
这段代码会生成一张图表,显示了原函数 `cos(x)`、拉格朗日插值结果和三次样条插值的结果。你可以通过观察图形来比较三种方法的效果。
阅读全文