已知u_determiner与u_H映射列表,根据给定值插值求解u_H的方法
可行的插值实现方案
- 线性插值
是最常用的轻量化插值方案,默认相邻两个已知点之间的数值呈线性变化,计算逻辑如下:- 先匹配输入值所在的区间:输入1.276819落在
u_deteminer的1.2(下标5)和1.4(下标6)之间,对应两个点的u_H值均为0.301 - 代入线性插值公式:
u_H_res = y_left + (y_right - y_left) * (x - x_left) / (x_right - x_left),计算得结果为0.301
实现时可以手动写二分查找区间+计算的逻辑,也可以直接调用科学计算库的内置函数,比如numpy的numpy.interp()。
- 先匹配输入值所在的区间:输入1.276819落在
- 最近邻插值
直接取距离输入值最近的已知点对应的u_H作为结果,本次输入1.276819距离1.2的差值为0.076819,距离1.4的差值为0.123181,取更近的1.2对应的0.301作为结果即可。如果输入刚好落在两个点的中点,可自定义优先取左或取右的规则。 - 样条插值
适合对插值曲线平滑度有要求的场景,常用的有二次样条、三次样条,通过拟合多段连续平滑的曲线计算插值点数值。本次场景中1.2到2.0区间的u_H都是定值0.301,所以不管用几阶样条插值,该区间内的结果都是0.301;如果是0.2~0.6的数值变化区间,样条插值的结果会比线性插值更平滑。 - 零阶保持插值(常数插值)
规则为取输入值所在区间的左端点u_H值作为结果,也可根据需求调整为取右端点。本次输入所在区间的左右端点u_H均为0.301,所以结果仍为0.301。
补充说明:本次给出的
u_H列表中,从索引2(对应u_deteminer=0.6)开始所有值都是0.301,所以只要输入值≥0.6,以上所有插值方案的计算结果均为0.301,只有输入值落在0.2~0.6区间时,不同方案的结果才会出现差异。
内容的提问来源于stack exchange,提问作者Woj
相关产品推荐
相关产品推荐

