如何实现线性插值?
假设我有以下数据:
x = [1, 2.5, 3.4, 5.8, 6]
y = [2, 4, 5.8, 4.3, 4]
我想用Python设计一个函数,让它在 1
和 2.5
之间,2.5
和 3.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
值,对吧?基本的思路可以分为以下几个步骤:
- 首先,找到
x_values
中的值,这些值定义了一个包含x
的区间。比如说,如果x=3
,根据你的例子,包含的区间就是[x1,x2]=[2.5,3.4]
,对应的索引是i1=1
和i2=2
。 - 接下来,计算这个区间的斜率,公式是
(y_values[i2]-y_values[i1])/(x_values[i2]-x_values[i1])
,也就是dy/dx
。 - 现在,
x
的值可以通过x1
的值加上斜率乘以从x1
到x
的距离来计算。
另外,你还需要决定如果 x
超出了 x_values
的区间该怎么办,可以选择报错,或者假设斜率和第一个/最后一个区间相同,进行“反向插值”。
这样解释清楚了吗?还是你需要更具体的建议呢?