x 范围包含在另一条曲线的 x 范围内的插值曲线 (Python)

Interpolating curves whose x ranges are contained in the x range of another curve (Python)

我有两组数据点,set1set2,每个数据点包含两列 xy 值,就像这样(对于一个其中,另一个具有相似的结构和值)

x            y

0.015        0.01
0.025        0.015
..           ..
0.115        0.07

所以我们有一个 x 轴,它以 0.01 的步长缩放,而 y 是随机的。然后我有第三组,set3,看起来像这样

x           y

0.025       0.2
0.075       0.1
...         ...
3.475       0.005

所以增量是 x 又是常数,在这种情况下等于 0.05,而 y 又是随机的。 set3x中的范围比set1set2宽得多。

我的目标是在 x 中拥有跨越相同范围的三个集合。

为此,我想插入两个较短的集合,set1set2,它们的 x 范围包含在 set3 的集合中。

我做到了(例如 set1,类似于 set2),使用

import scipy.interpolate as itp
spline_set1 = itp.splrep(xvalues_set1, yvalues_set1)
extended_set1 = itp.splev(xvalues_set3, spline_set1)

但是 extended_set1 的情节看起来好像这不是要走的路。值太高,比应有的值大很多个数量级。

有什么想法吗?

按照你对我的评论的回答并假设你正在寻找外推法而不是内插法:

基本上,您正在创建不存在的信息。任何推断都是基于您对 y 相对于 x 行为的了解。 y3 值在这种情况下并不重要(这就是为什么您在自己的解决方案中不需要它们)。

样条插值的基本工具是scipy.interpolate.UnivariateSplinescipy.interpolate.CubicSpline。两者都可以推断。在你的情况下,它是这样工作的:

import scipy.interpolate as itp
spline = itp.UnivariateSpline(xvalues_set1, yvalues_set1)
extended_set1 = spline(xvalues_set3)

然而,结果可能仍然值得怀疑。样条外推的行为可能看起来不合理,但在数学上仍然是正确的。如果您想了解发生了什么,我建议您使用 matplotlib.pyplot.

绘制结果