大矩阵的Matlab逆

时间:2013-03-12 23:46:01

标签: matlab matrix-inverse

这是我想要解决的等式:

h =(X'* X)^ - 1 * X'* y

其中X是矩阵,y是矢量((X'X)^ - 1是X-转置时间X)的倒数。我在Matlab中将其编码为:

h = (X'*X)\X'*y

我认为是正确的。问题是X大约是10000x10000,并且尝试计算反向正在使Matlab崩溃甚至是我能找到的最强大的计算机(16核,24GB RAM)。有没有办法将其拆分,或者设计用于进行如此大的反演的库?

谢谢。

4 个答案:

答案 0 :(得分:1)

看起来像伪逆。您是否正在寻找

h = X \ y;

答案 1 :(得分:0)

我生成了一个随机10,000乘10,000的矩阵X和一个随机的10,000 x 1矢量y。

我只是逐步分解了我的计算。 (代码如下所示)

  1. 计算转置并将其保存在矩阵K
  2. 然后我通过将K乘以X
  3. 来计算矩阵A.
  4. 通过将K乘以向量y来计算向量b
  5. 最后,我使用A和b上的反斜杠运算符来解决
  6. 我的计算没有问题。花了一段时间,但将操作分解成最小的组可能有助于防止计算机被淹没。但是,它可能是您正在使用的矩阵的组成(即稀疏,小数等)。

    X = randi(2000, [10000, 10000]);
    y = randi(2000, 10000, 1);
    K = X';
    A = K*X;
    b = K*y;
    S = A\b;
    

答案 2 :(得分:0)

如果您有多台计算机可供使用,并且您可以按@Ben的建议将问题重新转换为h = X\y形式,那么您可以使用分布式阵列。 This demo展示了如何做到这一点。

答案 3 :(得分:0)

约旦, 您的等式正是“Moore-Penrose Matrix Inverse”的定义。

检查:http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html

直接使用h = X \ y;会有所帮助。 或者查看Matlab pinv(X)*y