在C#中计算NxN矩阵行列式

你如何计算NxN矩阵C#的行列式?

OP发布了另一个问题 ,专门询问4×4矩阵,该问题已被关闭,与此问题完全相同。 好吧,如果你不是在寻找通用的解决方案,而是仅限于4×4矩阵,那么你可以使用这个看起来很丑陋而又经过validation的代码:

public double GetDeterminant() { var m = _values; return m[12] * m[9] * m[6] * m[3] - m[8] * m[13] * m[6] * m[3] - m[12] * m[5] * m[10] * m[3] + m[4] * m[13] * m[10] * m[3] + m[8] * m[5] * m[14] * m[3] - m[4] * m[9] * m[14] * m[3] - m[12] * m[9] * m[2] * m[7] + m[8] * m[13] * m[2] * m[7] + m[12] * m[1] * m[10] * m[7] - m[0] * m[13] * m[10] * m[7] - m[8] * m[1] * m[14] * m[7] + m[0] * m[9] * m[14] * m[7] + m[12] * m[5] * m[2] * m[11] - m[4] * m[13] * m[2] * m[11] - m[12] * m[1] * m[6] * m[11] + m[0] * m[13] * m[6] * m[11] + m[4] * m[1] * m[14] * m[11] - m[0] * m[5] * m[14] * m[11] - m[8] * m[5] * m[2] * m[15] + m[4] * m[9] * m[2] * m[15] + m[8] * m[1] * m[6] * m[15] - m[0] * m[9] * m[6] * m[15] - m[4] * m[1] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15]; } 

它假设您将矢量数据存储在一个名为_values的16元素数组中(在这种情况下为double ,但float也可以),按以下顺序:

 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 

缩小为上三角形,然后创建一个嵌套循环,将位置i == j的所有值相乘。 你有它。

标准方法是LU分解 。 您可能希望使用库而不是自己编写代码。 我不知道C#,但40年的标准是LAPACK。