【问题标题】:How can I make a c++ program to find the determinate and inverse of any sized matrix?如何制作一个 C++ 程序来找到任何大小矩阵的行列式和逆矩阵?
【发布时间】:2013-02-19 23:08:14
【问题描述】:

我知道如何在 1x1、2x2 和 3x3 中找到这些,但我想编写一个程序,让我输入矩阵的维度,然后输入矩阵中的数字。输入数字后,我希望它给出确定的(如果能够得到一个)和矩阵的逆矩阵,但我不知道如何绕过维度部分。什么是开始这个​​的好方法?我应该使用什么标题?我在Linux上运行,所以我没有像windows那样的一些标题,如果有帮助的话。 :)

【问题讨论】:

  • 首先,您是否了解获取 NxN 矩阵行列式背后的(论文)数学?并找到 NxN 矩阵的逆矩阵?
  • 你应该在纸上了解你是如何做到这一点的(即学习它背后的数学),然后你就会明白了。当然,除非您只是想反转矩阵,而不是自己编写,否则您可以使用像 Eigen 这样的库。
  • 假设矩阵是正方形的,您可能正在寻找一个就地矩阵求逆算法。你应该看看math.stackexchange.com/questions/16940/…
  • 澄清一下:您是在问如何输入和存储任意大小的矩阵,还是在寻找行列式/逆矩阵?
  • 输入自定义大小和矩阵中的所有数字,然后找到倒数和行列式。谢谢! :) 算法会有很大帮助!我听说数组很适合这种东西,但我不知道如何使用数组......(我一直很简单地坚持使用 iostream。lol。imma newb。)另外我必须从某个地方开始,一旦我弄清楚这件事,我相信它会变得容易一些! :D

标签: c++ linux matrix matrix-inverse determinants


【解决方案1】:

从挑选一本线性代数书开始。吉尔伯特·斯特朗 (Gilbert Strang) 的作品。它读起来就像一本很好的故事书。进行 LU 分解并进一步分解为特征值和特征向量。在此过程中,您会找到两个问题的答案。

【讨论】:

    【解决方案2】:

    一个简单的方法是使用像 Eigen 这样的库。

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

    1. 决定如何在内存中表示您的矩阵,
    2. 根据您的定义编写代码来读取和存储矩阵,并且
    3. 编写代码以根据您的定义计算矩阵的逆/行列式。

    显然,2. 和 3. 取决于您对 1. 的选择,找到一个好的表示并非易事,并且取决于您的应用程序,例如您的矩阵将有多大,或者它是稀疏的还是密集的。

    如果您不关心效率或只是假设您的矩阵很小,那么您可能希望将您的矩阵表示为一维向量。例如,你有一个 4x4 矩阵,你可以分配一个长度为 16 的向量。

    如果我正确理解了您的问题,那么您实际上是在询问如何动态地(在运行时)执行此操作。使用数组,它看起来像这样:

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

    这会为columnCount * rowCountdoubles 动态分配空间,您现在可以像访问静态数组一样访问该内存。完成后,您必须delete[] yourMatrix 以防止内存泄漏。

    如果你知道如何在纸上计算行列式/倒数,你应该可以从这里开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多