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

3
我阅读了https://www.value-at-risk.net/cubic-spline-interpolation/上的文章。
我理解了全部内容,但是不知道如何获取矩阵的值:

enter image description here

我知道有一些类似于hi = hi+1 - hi的东西。
我访问了几个网站,阅读了不同的解释,但我从未找到如何确切地在矩阵中得出这些值。

我猜你想知道它们是如何从[2.127]到[2.128]的,这意味着:如何解决M.X = V,其中M是一个维度为n的方阵,X和V是维度为n的向量? - yaitloutou
我想知道他们如何获取矩阵M的值。 - zer0kai
1
然后,您需要编辑您的问题,并包含更多细节。顺便说一句,我认为这个问题更适合http://math.stackexchange.com。 - yaitloutou
我在我的问题中提到了两次,我需要知道如何准确地获取矩阵的值。问题出在哪里? - zer0kai
1
没问题 :) 我正在努力理解您的需求,以便给出更好的答案。由于您的问题与编程无关,因此它在这里是离题的。所以,我建议您去其他地方寻找更多答案。 - yaitloutou
显示剩余3条评论
1个回答

4

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

例如,矩阵的第二行(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)进行二阶导数求导
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轴,因为您有二维曲线,您需要以同样的方式再次对x轴进行操作。

现在让我们重新书写矩阵方程:

M*A=B

如果您有一个8x8矩阵M,以及两个向量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,具有定义好的属性,如连续性、线性等(无需进行逆矩阵运算)。但如果你需要像这个例子中那样的自定义属性,那么你就没有太多选择。
更多信息请参见如何生成多点线性插值?

很好的解释,但我最喜欢的是使用代码格式,而不是我原本想要的 ^^" - yaitloutou

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