说明
历史上线性代数的第一个问题是关于解线性方程组的问题,而线性方程组理论的发展又促成了作为工具的矩阵论和行列式理论的创立与发展。
最终在计算机图形学等方面,矩阵、向量、四元数成了重要工具,解决一个又一个几何问题。但是我们不应该忘记:线性代数是可以求解线性方程组的。也就是说:simd 框架其实可以求解基础的线性方程组(即多元一次方程组)。
几何
首先,我们来看一个矩阵与向量的乘法,它的基本几何含义是:点(x, y, z) 经过一个矩阵变换后,到了点(1, 2, 3)的位置。
同时我们也可以用行列式来理解,或者更普遍一些写成方程组的形式:
1 * x + 0 * y + 2 * z = 1
1 * x - 1 * y - 1 * z = 2
1 * x + 2 * y + 0 * z = 3
这也就是说:当我从几何角度求出点(x, y, z) 的原本位置,也就求解了方程组。那么在已知变换矩阵和变换后坐标的情况下,如何求出这个变换前的位置呢?当然是用逆矩阵来求解了,关于逆矩阵的求解 simd 框架已经帮我们做好了,直接调用就好了。
代码
如下代码:
let m = matrix_float3x3(simd_float3(1, 1, 1),
simd_float3(0, -1, 2),
simd_float3(2, -1, 0)
)
let r = simd_float3(1, 2, 3)
let x = m.inverse * r
print(x)
//SIMD3<Float>(2.0, 0.5, -0.5)
由于 simd 框架最多只支持 4x4 矩阵,所以也只支持最多四元一次方程组的求解,同时未知数的数量和方程数量要一致,并且矩阵可逆。