如何实现多点线性插值?

5
我有一个线性插值方法。当(x1,y1) (x2,y2)和x0已知时,它可以计算插值值,从而计算y0的值。但是我需要在已知多个点的情况下进行插值。我不是在谈论双线性或三线性插值。

1
似乎你需要告诉我们你的意思。 - MBo
你具体是什么意思? - Good Luck
我的意思是我需要管理多点线性插值而不是两点。例如已知4个点,我如何计算插值值? - EmreS
如果你有四个点,不能保证它们之间存在一条直线。你需要一个最小二乘线或回归线,考虑可能不同的度量来最小化通过它们的误差。 - Good Luck
你是指线性回归吗?http://zh.wikipedia.org/wiki/线性回归 - samgak
显示剩余3条评论
1个回答

9

对于多点插值,有三个选项:

img


  1. 分段线性插值

    选择距离已知坐标最近的2个点,如果使用参数,则选择包含参数范围的点,并将参数范围/比例更改为插值范围(通常为<0,1>),并进行线性插值。

    这里有一个关于整数和更多的线性DDA示例:

  2. 多项式插值

    这不是线性的!取所有已知点,从中计算n次多项式(通过Lagrange多项式、边缘条件、回归/曲线拟合或其他方式)并计算参数点作为此多项式函数。通常每个轴都有一个多项式,点越多或多项式的次数越高,结果就越不稳定(振荡)。

  3. 分段多项式插值

    这是#1,#2的组合(n很低以避免振荡)。您需要正确调用点序列以管理片段之间的连续性,边缘条件必须考虑到前一个和下一个片段...

[笔记]

SPLINE,BEZIER等是近似曲线而不是插值曲线(它们不一定穿过控制点)。有一种方法可以通过重新计算控制点来在不同类型的曲线之间进行转换。例如,请参见此链接:


非常棒的答案,谢谢。 - EmreS
@EmreS 很高兴能够帮忙。顺便说一下,这张图片是用画图手/鼠标绘制的,所以不是完全准确的...橙色曲线(选项2)从一开始就几乎与绿色曲线(选项3)相同,但越远离起点,它应该会越来越多地振荡,通常许多点的振荡比曲线本身更大... - Spektre
非常感谢,我不知道分段线性插值的名称。这正是我想要的。 - EmreS
你当然也可以使用样条插值进行插值。http://en.wikipedia.org/wiki/Spline_interpolation - cfh
嗨,我认为matlab中的spline,或者更普遍地讲就是spline,确实是插值函数。这也是维基百科页面上所显示的。我错了吗? - Amir Sagiv
@AmirSagiv 我不使用Matlab,但Bezier和样条通常是近似值...这意味着曲线不一定通过所有控制点。然而,有几种形式的样条类似于插值,如Catmul-Rom。还有一些技术可以做到相同的效果,比如复制控制点等... - Spektre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接