这是我想要解决的等式:
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)。有没有办法将其拆分,或者设计用于进行如此大的反演的库?
谢谢。
答案 0 :(得分:1)
看起来像伪逆。您是否正在寻找
h = X \ y;
答案 1 :(得分:0)
我生成了一个随机10,000乘10,000的矩阵X和一个随机的10,000 x 1矢量y。
我只是逐步分解了我的计算。 (代码如下所示)
我的计算没有问题。花了一段时间,但将操作分解成最小的组可能有助于防止计算机被淹没。但是,它可能是您正在使用的矩阵的组成(即稀疏,小数等)。
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