看板 C_and_CPP 關於我們 聯絡資訊
※ [本文轉錄自 Math 看板] 作者: pizza0117 (阿水~*) 看板: Math 標題: [代數] 4階反矩陣 時間: Sun Sep 6 03:11:13 2009 4*4的矩陣 求反矩陣的時候 除了算16次3*3矩陣的det以外 請問~~還有沒有什麼方法~? 方法要有規則可循的 因為要寫成程式 不是手算 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.226.11
sunev :不是四次3*3的矩陣的det嗎? 09/06 03:18
pizza0117 :4 * 4 16個點 i=1~4 j=1~4 09/06 03:27
pizza0117 :我搞錯了嗎? 09/06 03:28
您說的4次是算4*4的det,算adj的話要16次
doom8199 :可以先解 eigenvalue 、eigenvector ,即拆成 A=UΣV 09/06 03:28
doom8199 :那 A^(-1) = UΣ^(-1)V , 不知道程式有沒有跑比較快 09/06 03:29
寫程式先求eigenvalue 、eigenvector會不會更複雜? 我沒有寫過
Annihilator :既然是寫成程式...就去參考任一本數值方法課本 09/06 04:13
Annihilator :還有一些書是專門講線性代數的數值方法,內容深入分析 09/06 04:15
Annihilator :不過您只是單純求反矩陣.還是要用來求解?方法會不同. 09/06 04:16
單純求反矩陣,求完可以寫成函式 方便我直接帶入
e0101010 :用程式就是高斯-喬登消去法會比較快 09/06 07:49
llewxam :LU factorization 09/06 09:36
高斯還有LU都有看過例子 不過看不太懂過程的作法 感覺上實做起來不會比較方便
cccssszzz :寫程式去看數值的書吧 演算法都寫好了 改一改而已 09/06 11:04
請問關鍵字是"數值分析 反矩陣"嗎? 我好像打錯關鍵字了 速度不是我的首要考量 這個案子急著結案,我的需求是"實做"簡單 我3*3的矩陣的實作方法如下 我先推導出反矩陣,然後直接給定adj每個位置的值 但4*4是算16個點的3*3det,就沒辦法像2*2寫的那樣簡短了 所以想問問有沒有其他的方法可以得知一個矩陣的反矩陣 BOOL MatrixInverse( double **Matrix , double **Out) { int i , j; double detMatrix = ( Matrix[0][0] * Matrix[1][1] * Matrix[2][2] + Matrix[0][1] * Matrix[1][2] * Matrix[2][0] + Matrix[1][0] * Matrix[2][1] * Matrix[0][2] ) - (Matrix[0][2] * Matrix[1][1] * Matrix[2][0] + Matrix[0][0] * Matrix[1][2] * Matrix[2][1] + Matrix[0][1] * Matrix[1][0] * Matrix[2][2] ); if( fabs(detMatrix) < 0.5 ) return FALSE; double Maxtrix2[3][3] = {0}; Maxtrix2[0][0] = Matrix[1][1] * Matrix[2][2] - Matrix[1][2] * Matrix[2][1]; Maxtrix2[0][1] = Matrix[0][2] * Matrix[2][1] - Matrix[0][1] * Matrix[2][2]; Maxtrix2[0][2] = Matrix[0][1] * Matrix[1][2] - Matrix[1][1] * Matrix[0][2]; Maxtrix2[1][0] = Matrix[1][2] * Matrix[2][0] - Matrix[1][0] * Matrix[2][2]; Maxtrix2[1][1] = Matrix[0][0] * Matrix[2][2] - Matrix[0][2] * Matrix[2][0]; Maxtrix2[1][2] = Matrix[0][2] * Matrix[1][0] - Matrix[0][0] * Matrix[1][2]; Maxtrix2[2][0] = Matrix[1][0] * Matrix[2][1] - Matrix[1][1] * Matrix[2][0]; Maxtrix2[2][1] = Matrix[0][1] * Matrix[2][0] - Matrix[0][0] * Matrix[2][1]; Maxtrix2[2][2] = Matrix[0][0] * Matrix[1][1] - Matrix[0][1] * Matrix[1][0]; for( i = 0 ; i < 3 ; i++ ) for( j = 0 ; j < 3 ; j++ ) Out[i][j] = Maxtrix2[i][j] / detMatrix; return TRUE; } ※ 編輯: pizza0117 來自: 219.70.226.11 (09/06 11:19) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.226.11
pizza0117:原本在math版問 後來想說問問看這邊好了 09/06 11:50
pizza0117:感謝@@ 09/06 11:50
maplefog:最簡單就是去找個library 09/06 13:45