[代數] 4階反矩陣

看板C_and_CPP (C/C++)作者 (阿水~*)時間16年前 (2009/09/06 11:49), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/2 (看更多)
※ [本文轉錄自 Math 看板] 作者: pizza0117 (阿水~*) 看板: Math 標題: [代數] 4階反矩陣 時間: Sun Sep 6 03:11:13 2009 4*4的矩陣 求反矩陣的時候 除了算16次3*3矩陣的det以外 請問~~還有沒有什麼方法~? 方法要有規則可循的 因為要寫成程式 不是手算 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.226.11

09/06 03:18,
不是四次3*3的矩陣的det嗎?
09/06 03:18

09/06 03:27,
4 * 4 16個點 i=1~4 j=1~4
09/06 03:27

09/06 03:28,
我搞錯了嗎?
09/06 03:28
您說的4次是算4*4的det,算adj的話要16次

09/06 03:28,
可以先解 eigenvalue 、eigenvector ,即拆成 A=UΣV
09/06 03:28

09/06 03:29,
那 A^(-1) = UΣ^(-1)V , 不知道程式有沒有跑比較快
09/06 03:29
寫程式先求eigenvalue 、eigenvector會不會更複雜? 我沒有寫過

09/06 04:13,
既然是寫成程式...就去參考任一本數值方法課本
09/06 04:13

09/06 04:15,
還有一些書是專門講線性代數的數值方法,內容深入分析
09/06 04:15

09/06 04:16,
不過您只是單純求反矩陣.還是要用來求解?方法會不同.
09/06 04:16
單純求反矩陣,求完可以寫成函式 方便我直接帶入

09/06 07:49,
用程式就是高斯-喬登消去法會比較快
09/06 07:49

09/06 09:36,
LU factorization
09/06 09:36
高斯還有LU都有看過例子 不過看不太懂過程的作法 感覺上實做起來不會比較方便

09/06 11:04,
寫程式去看數值的書吧 演算法都寫好了 改一改而已
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

09/06 11:50, , 1F
原本在math版問 後來想說問問看這邊好了
09/06 11:50, 1F

09/06 11:50, , 2F
感謝@@
09/06 11:50, 2F

09/06 13:45, , 3F
最簡單就是去找個library
09/06 13:45, 3F
文章代碼(AID): #1Aep5Pd5 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Aep5Pd5 (C_and_CPP)