You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CubicSpline/interp1d三次插值得到直线,如何生成光滑曲线?

如何生成穿过整数坐标点的光滑曲线?

你遇到的问题不是插值方法无效,而是绘图时采样点太少——你用原x数组(间隔为1的整数点)计算并绘制插值结果,这些点刚好是样条曲线的分段端点,所以看起来是直线段。实际上CubicSpline和interp1d(kind='cubic')已经生成了光滑的三次样条曲线,只需要用更密集的x值采样就能呈现出光滑效果。

修改后的代码示例

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import CubicSpline

x = np.arange(34)
y = [8,3,0,1,6,2,1,7,6,2,0,2,6,0,1,6,2,2,0,2,7,0,2,8,6,3,6,2,0,1,6,2,7,2]

# 生成三次样条插值函数
f = CubicSpline(x, y)

# 生成更密集的x采样点(比如从0到33取1000个点)
x_new = np.linspace(x.min(), x.max(), 1000)

plt.figure(figsize=(10,3))
plt.plot(x, y, 'o', label='原始点')  # 绘制原始整数点
plt.plot(x_new, f(x_new), label='三次样条光滑曲线')  # 用密集点绘制光滑曲线
plt.legend()
plt.show()

用interp1d的实现方式

如果想用interp1d,同样只需要替换插值函数并使用密集采样点:

from scipy.interpolate import interp1d

f_interp = interp1d(x, y, kind='cubic')
plt.plot(x_new, f_interp(x_new), label='interp1d三次样条曲线')

这样修改后,就能得到穿过所有原始整数点的光滑曲线了。

内容的提问来源于stack exchange,提问作者yannis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:31:13