2013-02-19 42 views
0

我知道如何在1x1 2x2和3x3中找到這些,但我想製作一個程序讓我輸入矩陣的維數,然後輸入矩陣中的數字。輸入數字後,我希望它給出確定性(如果能夠得到一個)和矩陣的逆矩陣,但我不知道如何繞過維度部分。有什麼好的開始呢?我應該使用什麼標題?我在Linux上運行,所以我沒有像Windows一樣的標題,如果有幫助的話。 :)如何製作一個C++程序來查找任意大小的矩陣的確定和逆矩陣?

+0

首先,您是否理解採用NxN矩陣行列式的(紙)數學?並找到一個NxN矩陣的逆? – Cornstalks 2013-02-19 23:11:52

+0

你應該瞭解你如何在紙上做這件事(即瞭解它背後的數學),那麼它就會變得清晰。除非你只想反轉矩陣,但不要自己寫,那麼你可以使用像Eigen這樣的庫。 – us2012 2013-02-19 23:12:03

+1

假設矩陣是正方形的,你可能要找的是一個原地矩陣求逆算法。 你應該檢查出http://math.stackexchange.com/questions/16940/in-place-inversion-of-large-matrices – user2051349 2013-02-19 23:12:10

回答

1

首先挑選一本線性代數書。吉爾伯特斯特朗的一個。它看起來像一個不錯的故事書。經過LU分解並進一步進入特徵值和特徵向量。在這個過程中,你會找到兩個問題的答案。

1

一個簡單的方法就是使用像Eigen這樣的庫。

如果你真的想自己做,你必須

  1. 決定如何表述你的存儲矩陣,
  2. 編寫代碼讀取和存儲按照自己的定義的矩陣,
  3. 根據您的定義編寫代碼以計算矩陣的逆/行列式。

很明顯,2.和3.取決於您對1的選擇,並且找到一個好的表示並非微不足道,而是取決於您的應用程序,例如,矩陣將會變大或者稀疏或密集。

如果您不關心效率或只是假設您的矩陣很小,那麼您可能想要將矩陣表示爲一維向量。例如,你有一個4x4的矩陣,你可以分配一個長度爲16的向量。

如果我正確理解你的問題,你實際上是在問怎麼動態地(在運行時)這樣做。使用數組,它看起來是這樣的:

double* yourMatrix 
yourMatrix = new double[columnCount * rowCount]; 

這種動態分配空間columnCount * rowCountdouble秒,您現在可以訪問該存儲器就像一個靜態數組。當你完成後,你必須delete[] yourMatrix以防止內存泄漏。

如果您知道如何計算紙張上的行列式/反比,您應該可以從這裏開始。