【问题标题】:Calculating determinant of Matrix in C++ without creating submatrices在 C++ 中计算矩阵的行列式而不创建子矩阵
【发布时间】:2018-11-09 12:50:34
【问题描述】:

有没有办法在 C++ 中仅使用一个变量(第一个加载的矩阵)来确定给定矩阵的行列式,并且在下一个递归函数中仅使用该矩阵的引用来确定行列式?

如何使用矩阵中元素的坐标来确定给定矩阵的子矩阵的行列式而不将它们创建为矩阵,只使用第一个矩阵中的元素及其坐标?可以使用递归还是不应该使用递归来完成?

【问题讨论】:

  • 对于任何给定维度还是对于固定维度?
  • 对于任何给定的维度
  • 无需制作子矩阵,只需使用原始矩阵参考 + x1、x2、y1、y2 索引即可了解您的子矩阵边界
  • 独立于你想对子矩阵做什么,你永远不需要明确地存储它们。您所需要的只是从索引到子矩阵到索引到原始矩阵的适当转换
  • 那么递归呢,能不能用在那个过程中?

标签: c++ algorithm matrix


【解决方案1】:

如果您尝试使用克莱默规则计算任何大小大于 3x3 的矩阵的行列式,那么您肯定做错了。性能会很糟糕。

可能对您来说最简单的方法是使用行缩减来使其成为上三角矩阵。找到上三角矩阵的行列式很容易 - 只需沿对角线相乘即可。至于其余的,只需乘以您使用的常数因子,并记住每次交换都是 -1。

【讨论】:

  • 感谢您提出这种方法!
  • @johnydr 不客气。根据math.stackexchange.com/questions/93501/…,这不是计算LU 分解的最快方法。但是它是O(n^3),不需要大量背景知识即可理解。
猜你喜欢
  • 1970-01-01
  • 2011-02-24
  • 2013-05-12
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2014-02-08
相关资源
最近更新 更多