2013-02-19 39 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以防止内存泄漏。

如果您知道如何计算纸张上的行列式/反比,您应该可以从这里开始。