如何实现线性插值?

44 投票
7 回答
142404 浏览
提问于 2025-04-17 01:46

假设我有以下数据:

x = [1, 2.5, 3.4, 5.8, 6]
y = [2, 4, 5.8, 4.3, 4]

我想用Python设计一个函数,让它在 12.5 之间,2.53.4 之间,等等,进行线性插值。

我试着查看过 这个Python教程,但还是没能完全理解。

7 个回答

22
def interpolate(x1: float, x2: float, y1: float, y2: float, x: float):
    """Perform linear interpolation for x between (x1,y1) and (x2,y2) """

    return ((y2 - y1) * x + x2 * y1 - x1 * y2) / (x2 - x1)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

58
import scipy.interpolate
y_interp = scipy.interpolate.interp1d(x, y)
print y_interp(5.0)

scipy.interpolate.interp1d 是一个可以进行线性插值的工具,并且可以根据需要进行调整,以处理一些错误情况。

36

根据我对你问题的理解,你想写一个函数 y = interpolate(x_values, y_values, x),这个函数可以根据某个 x 值来给出对应的 y 值,对吧?基本的思路可以分为以下几个步骤:

  1. 首先,找到 x_values 中的值,这些值定义了一个包含 x 的区间。比如说,如果 x=3,根据你的例子,包含的区间就是 [x1,x2]=[2.5,3.4],对应的索引是 i1=1i2=2
  2. 接下来,计算这个区间的斜率,公式是 (y_values[i2]-y_values[i1])/(x_values[i2]-x_values[i1]),也就是 dy/dx
  3. 现在,x 的值可以通过 x1 的值加上斜率乘以从 x1x 的距离来计算。

另外,你还需要决定如果 x 超出了 x_values 的区间该怎么办,可以选择报错,或者假设斜率和第一个/最后一个区间相同,进行“反向插值”。

这样解释清楚了吗?还是你需要更具体的建议呢?

撰写回答