推 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