我在https://www.value-at-risk.net/cubic-spline-interpolation/
上阅读了这篇文章我了解所有内容,但我不知道如何获取矩阵的值:
我知道有喜欢hi = hi + 1 - hi
的东西我访问了几个网站,阅读了不同的表达方式,但我从未发现我是如何在矩阵中找到这个值的。
答案 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
M
是8x8
矩阵,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?