import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
# 原始数据点
x = np.linspace(0, 10, num=11, endpoint=True)
y = np.cos(-x**2/9.0)
# 创建插值函数
f = interp1d(x, y, kind='linear') # 线性插值
f2 = interp1d(x, y, kind='cubic') # 三次样条插值
# 新的插值点
x_new = np.linspace(0, 10, num=41, endpoint=True)
# 计算插值结果
y_linear = f(x_new)
y_cubic = f2(x_new)
# 绘图
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'o', label='原始数据点')
plt.plot(x_new, y_linear, '-', label='线性插值')
plt.plot(x_new, y_cubic, '--', label='三次样条插值')
plt.legend()
plt.show()
导入库:我们使用了 numpy、matplotlib 和 scipy.interpolate 库。numpy 用于生成数据点,matplotlib 用于绘图,scipy.interpolate 提供了插值功能。
原始数据点:我们定义了两个数组 x 和 y,分别表示 x 轴和 y 轴上的数据点。这里使用了 np.cos 函数生成一些示例数据。
创建插值函数:使用 interp1d 创建了两种插值方式的函数:
f 是线性插值(kind='linear'),它会在相邻的数据点之间进行线性插值。f2 是三次样条插值(kind='cubic'),它会生成平滑的曲线。新的插值点:我们生成了更多的 x 轴数据点 x_new,用于在这些新点上计算插值结果。
计算插值结果:通过调用 f(x_new) 和 f2(x_new),我们得到了线性插值和三次样条插值的结果。
绘图:最后,我们使用 matplotlib 将原始数据点和插值结果绘制在同一张图上,并添加了图例以便区分不同的插值方法。
上一篇:python seek()方法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站