没有矩阵存储的高斯消元法

时间:2014-07-15 20:27:36

标签: algorithm matrix

我在执行高斯消除时遇到问题。矩阵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}

1 个答案:

答案 0 :(得分:0)

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

第一:
如果m > n条目为零,则因为它在对角线下 如果m = n条目为1(条目在对角线上)

所以请m < n

我认为您只需存储m^2+m entrys:

即可计算此条目
  1. 保存第一个m次要和第一行的n条目,第一个条目不为零。称之为M_11,M_12,...,M_1m,M_1n
  2. 将每个条目M_i除以M_1
  3. 保存第一个m次要信息,第ny的{​​{1}}条目y_2 - y_1 * M_12不为零。
  4. 将此行另存为M_21,M_22,...M_2m,M_2n
  5. for i = 2 ... m do M_2i = M_2i - M_1i * M_21
  6. 对下一行执行相同操作:搜索对角线上具有非零条目的行(扣除保存的行后)
  7. 最后(m行之后)条目M_mn包含您的结果。

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

    关于时空:
    您可以使用空间来购买一些时间,反之亦然。如果您不想保存m^2次托管,则可能只会存储2m次托管,但这会花费您很多时间,直至{{1}的指数时间}}

    如果您对m有更多了解,可以采用一种方法来加快算法速度或减少所需的空间。