【问题标题】:Gaussian elimination without matrix storage没有矩阵存储的高斯消除
【发布时间】:2014-09-06 04:49:34
【问题描述】:

我在执行高斯消除时遇到问题。矩阵 A 很大,不能用我的内存限制存储,但是,A 的元素可以描述为 i 和 j 的函数,即 A(i,j) = f(i,j)。

另外,我不需要计算得到的上三角矩阵的所有元素。

现在的问题, 如何更新高斯消元算法以使用 f(i,j) 计算结果矩阵的特定元素而不是计算所有元素?

更新: 这是我的 A 矩阵:

                a_{11} & a_{12}  & a_{13}  & a_{14}  & .. & a_{1L} 
                q_1    & a_{22}  & a_{23}  & a_{23}  & .. & a_{2L} 
                q_2    & q_1     & a_{33}  & a_{34}  & .. & a_{3L} 
                q_3    & q_2     & q_1     & a_{44}  & .. & a_{3L} 
                q_4    & q_3     & q_2     & q_1     & .. & a_{3L} 
                 :     &  :      & :       & :       & :  & : 
                 :     &  :      & :       & :       & :  & : 
                q_L    & q_{L-1} & q_{L-2} & q_{L-3} & .. & a_{LL}

【问题讨论】:

  • “我不需要计算得到的上三角矩阵的所有元素”是什么意思。我知道这个名字的算法就是需要这个。
  • @laune “一个大到无法存储的矩阵?这是 2014 年!”可以想象,需要一种在无限矩阵上运行的算法。然后输出将是一个在指定条目处返回结果的函数。当然,您可以compute the spectrum 获取无限矩阵。
  • @laune:正如 Hooked 所说,矩阵是无限的,但我有一个函数可以用来获取某个元素。也谢谢你提醒我调整日历!
  • @Hamid 您正在使用什么函数来评估元素 A(i,j)。知道函数周期也有助于减少内存和计算

标签: algorithm matrix


【解决方案1】:

假设您要计算条目(m,n)m 行,n 列。

第一:
如果m > n,则该条目将为零,因为它位于对角线下方。
如果m = n 条目将是一(条目在对角线上)

所以让m < n.

我认为您可以通过仅存储 m^2+m 条目来计算此条目:

  1. 保存第一个m 条目和第一行的nth 条目,其中第一个条目不为零。将此条目称为M_11,M_12,...,M_1m,M_1n
  2. 将每个条目M_i除以M_1
  3. 保存第一个m条目和第一行nth条目yy_2 - y_1 * M_12不为零。
  4. 将此行另存为M_21,M_22,...M_2m,M_2n
  5. i = 2 ... mM_2i = M_2i - M_1i * M_21
  6. 对下一行执行相同操作:搜索对角线上有非零条目的行(减去已保存的行后)

最后(在m 行之后)条目M_mn 包含您的结果。

注意:如果必须切换两行,则必须保存新的行顺序。

关于空间和时间:
您可以使用空间来购买一些时间,反之亦然。如果您不想保存m^2 条目,可以只存储2m 条目,但这会花费您很多时间,在m 中达到指数级时间。

如果您对f(i,j) 有更多了解,可能有一种方法可以加快算法速度或减少所需空间。

【讨论】:

  • 感谢您的回复,但是我们仍然存在保存大量数据的相同问题。 - 步骤 3 中的 y 是什么意思? - 您如何建议更新算法以仅存储 2m 个条目?
  • 我想到了一些类似于递归函数的方法。基本上你必须计算一切都是新的,所以你每次调用只存储一个恒定的数字。问题是,时间复杂度将是巨大的。如果m 太大而无法存储 m^2 值,则此函数将永远不会给您结果。你有更多关于f(i,j)的信息吗?
  • y 只是满足约束的行的名称。如果没有名字,很难描述我的意思是什么条目^^
猜你喜欢
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
相关资源
最近更新 更多