【问题标题】:Speeding up some matrix arithmetic operation加快一些矩阵算术运算
【发布时间】:2014-01-13 16:22:12
【问题描述】:

我有两个矩阵 A 和 B。

B 只是一个矩阵,其中只有一个对角线元素非零。所有非对角元素也为零。我必须计算 $A^{-1}B$。我的 $A^{-1}B$ 矩阵是稀疏的。在matlab中我可以做A\B。但是有什么技巧可以进一步加快速度吗?

我有一堆 B 矩阵,其中只有一个对角线元素不为零,非对角线元素为零。我无法存储 $A^{-1}$。有什么办法可以加快速度吗?

【问题讨论】:

  • 设 n 为 A 和 B 的行数或列数。在最坏的情况下,A^-1 有 n^2 个非零条目。对于每个 B,A^-1*B 有 n 个非零条目。您的意思是您可以存储所有 A^-1*B 结果但不能存储 A^-1?你有多少个 B 矩阵?在您的问题中,n 的典型值是多少?
  • 你考虑过spinv(稀疏矩阵求逆吗?mathworks.com/help/matlab/math/…

标签: matlab linear-algebra matrix-inverse


【解决方案1】:

如果零矩阵 $B$ 的 $(i,i)^{th}$ 元素等于 1,并且您将某个矩阵 $A^{-1}$ 后乘以该矩阵,则您实际上,从 $A^{-1}$ 中提取 $i^{th}$ 列并将所有其他元素设置为零。由于您需要 $A^{-1}$ 的完整 $i^{th}$ 列,因此您仍然需要反转 $A$,但您不需要实际执行后乘法;只需创建一个零矩阵并将 $i^{th}$ 列替换为 $A^{-1}$ 列。

【讨论】:

    【解决方案2】:

    您的问题可以大大简化。假设我们想将解决方案存储在一个新矩阵中(C 说),并且

    a) A 是一个 NxN 矩阵

    b) 你知道B 只有主对角线有元素(它本身是一个 NxN 矩阵)

    c) 你想要A*B

    C = zeros(size(A));
    new_B = diag(B)';
    [A_rows, A_cols] = size(A);
    for i=1:A_rows
        C(i,:) = A(i,:).*new_B;
    end
    

    【讨论】:

    • 我不得不对你的回答投反对票。看来您正在计算 A*B。 OP 要求计算 A^-1*B
    • @LuisMendo 我的错。完整阅读后的棘手问题。我似乎无法击败内置 A\b 的 MATLAB。如果找到某种尺寸的解决方案仍然很有趣
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多