2013-05-04 231 views
0

我想反轉4x4矩陣,我已經看到了幾個計算行列式計算的一些例子,這似乎不適用於我,我可能只是搞砸了某個地方,但我一直在試圖尋找另一種方式來解決這個問題,我的回答是這樣的:反轉4x4矩陣算法

public Matrix inverse() 
{ 
    double[] array = new double[]{ 
     1/m[0], m[4], m[8],  0, 
     m[1], 1/m[5], m[9],  0, 
     m[2], m[6], 1/m[10], 0, 
     -m[12], -m[13], -m[14],  1/m[15] 
    }; 
    return new Matrix(array); 
} 

Basicly我做的是,計算它的所有部件,這一直相當不錯的反轉,期待對於第15號,最後一個號碼,出於某種原因它已經噴出無窮大,有人知道爲什麼嗎?我唯一的猜測是除以零,但接下來的問題是什麼是0的倒數?答案是0嗎?

(不知道這是相關的,但我的矩陣是行優先)

+3

你的矩陣反轉不好,你應該感覺不好。 – 2013-05-04 13:07:06

+1

你提出的'解決方案'是純粹的廢話... – 2013-05-04 13:07:58

回答

1

您試圖寫下一個4x4矩陣的逆是完全錯誤的。嘗試修復它絕對沒有意義,因爲它無法工作。

你問1/0的結果是什麼。那麼,這是零除,結果沒有定義。沒有實際編號x滿足1/0 == x。如果那時有1 == x*0 == 0,是矛盾的。在計算機上,嘗試執行除零有時會導致錯誤,或者有時會返回一個特殊的浮點值Inf。後者似乎是在你的環境中發生的事情。我不知道你爲什麼拒絕determinant based code。也許你發現實施起來很棘手。但事實就是這樣。你不會簡化這種複雜性。

+0

我想我會嘗試很長的路,然後感謝至少看。 – user2037921 2013-05-04 13:11:42

+0

難道你用'double [,]'更好嗎?或者是一個包含成員m00,m01,...,m10,m11等的結構體。然後您可以使用以下代碼:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index熱媒 – 2013-05-04 13:13:52