计算三次样条插值中的矩阵

时间:2017-01-29 11:03:12

标签: math geometry

我在https://www.value-at-risk.net/cubic-spline-interpolation/

上阅读了这篇文章

我了解所有内容,但我不知道如何获取矩阵的值:

enter image description here

我知道有喜欢hi = hi + 1 - hi

的东西

我访问了几个网站,阅读了不同的表达方式,但我从未发现我是如何在矩阵中找到这个值的。

1 个答案:

答案 0 :(得分:3)

矩阵只是编码为矩阵的方程组,因此可以通过逆矩阵轻松计算。

例如矩阵乘法后的矩阵(8,4,2,1,0,0,0,0)的第二行意味着:

a3.2^3+a2.1^2+a1.2^1+a0=5

这是你的p1(2)=5行:

p1(1)=1
p1(2)=5
p2(2)=5
p2(3)=4
p1'(2)-p2'(2)=0
p1''(2)-p2''(2)=0
p1''(1)=0
p2''(3)=0

所以例如最后一个矩阵行( 0,0,0,0,18,2,0,0 )是这样的:

b3.18 + b2.2 = 0

如果我们推导出p2(t)最多2阶推导

p2(t) = b3.t^3 + b2.t^2 + b1.t + b0
p2'(t) = 3.b3.t^2 + 2.b2.t + b1
p2''(t) = 2.3.b3.t + 1.2.b2  = 6.b3.t + 2.b2

现在t=3我们得到:

p2''(3) = 6.b3.3 + 2.b2 = 18.b3 + 2.b2

并编码成矩阵(最后一行)

(0,0,0,0,18,2,0,0) * ( a3,a2,a1,a0,b3,b2,b1,b0) = 0

哪个与您的示例匹配。希望现在很清楚......

注意你的这个例子只适用于y轴,因为你得到了2D曲线,你需要以同样的方式对x轴做这个...

现在再次重写矩阵方程式:

M*A=B

M8x8矩阵,A=(a3,a2,a1,a0,b3,b2,b1,b0)B=(1,5,5,4,0,0,0,0),您可以这样解决:

inverse(M)*M*A = inverse(M)*B
             A = inverse(M)*B

因此,您获得了A,其中包含p1,p2 B多项式系数,用于保持您的位置(一次通过y坐标,下一次坐标为x坐标)你得到了p1x,p1y,p2x,p2y个多项式。这是插值所需的。

然而,这种方法有点落后,通常使用预定义的多项式形式,如SPLINE,BEZIER,具有定义的属性,如连续性,线性等(不需要逆矩阵运算)。但是,如果您需要此示例中的自定义属性,那么您没有太多选择。

有关详细信息,请参阅How can i produce multi point linear interpolation?