2010-05-27 119 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。