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

标签 math geometry

我阅读了关于 https://www.value-at-risk.net/cubic-spline-interpolation/ 的文章

我都明白了,但我不知道如何获取矩阵的值:

enter image description here

我知道有这样的东西 hi = hi+1 - hi

我访问了几个网站,阅读了不同的解释,但我从未发现我究竟是如何得出矩阵中的这个值的。

最佳答案

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

例如矩阵乘法之后的矩阵 (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 轴,因为您获得了 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?

关于math - 在三次样条插值中计算矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41920162/

相关文章:

c# - 分页数学问题

python - -inf 到底是什么?

android - 不存在这样的 acos 函数

c++ - 用SDL2画圆吗?

math - 从任何 2D 多边形生成 3D 棱镜

java - Java 中的模式匹配

java - 如何获得数组中的多重模式?

algorithm - 动态堆栈的摊销分析

java - 如何获得对角线圆的坐标?

spring - PostGIS几何保存: "Invalid endian flag value encountered."