2010-05-27 98 views
2

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

+12

这功课吗? – 2010-05-27 15:58:12

+3

定义不够:http://en.wikipedia.org/wiki/Determinant?当您尝试在C#上实现它时,您是否遇到过一些您可能会遇到的特定问题? – 2010-05-27 15:59:31

+5

给我们你到目前为止的代码,我们会帮助你。但我们不会为你编码。 – 2010-05-27 16:19:17

回答

3

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

+2

它甚至不需要是一个嵌套循环,因为如果你正在为位置(i,j)做这个i == j,你可以为所有位置(我,我)做它。 – JAB 2010-05-27 16:15:18

+0

好点,+1。 – Brandi 2010-05-27 16:21:50

+1

您计算的结果可能是行列式的负数。您需要取主对角线的乘积,然后乘以(-1)^ [用于得到上三角形的行交换数] – Kevin 2010-05-27 16:58:36

7

OP张贴another question具体询问关于4x4矩阵的问题,该矩阵已被封闭为与此问题完全相同的副本。好吧,如果你不是在寻找一个通用的解决方案,而是被限制在单独4X4矩阵,那么你可以使用这个难看,但尝试和真正的代码:

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]; 
} 

它假定您存储矢量数据一个16元件阵列中称为_values(的double在这种情况下,但float将工作太),按以下顺序:

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

的标准方法是LU decomposition。您可能想使用库而不是自己编写它。我不知道C#,但40年的标准是LAPACK。