这是我要解决的方程式:
h = (X'*X)^-1*X'*y
其中 X 是矩阵,y 是向量((X'X)^-1 是 X 转置乘以 X 的倒数)。我在 Matlab 中将其编码为:
h = (X'*X)\X'*y
我认为这是正确的。问题是 X 大约是 10000x10000,即使是我能找到的最强大的计算机(16 核,24GB RAM),试图计算这个逆也会使 Matlab 崩溃。有什么方法可以将其拆分,或者有一个专为进行如此大的反转而设计的库吗?
谢谢你。
这是我要解决的方程式:
h = (X'*X)^-1*X'*y
其中 X 是矩阵,y 是向量((X'X)^-1 是 X 转置乘以 X 的倒数)。我在 Matlab 中将其编码为:
h = (X'*X)\X'*y
我认为这是正确的。问题是 X 大约是 10000x10000,即使是我能找到的最强大的计算机(16 核,24GB RAM),试图计算这个逆也会使 Matlab 崩溃。有什么方法可以将其拆分,或者有一个专为进行如此大的反转而设计的库吗?
谢谢你。
这看起来像一个伪逆。您是否正在寻找只是
h = X \ y;
我生成了一个随机的 10,000 x 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;
如果您有多台机器可供使用,并且您可以将问题重新转换h = X\y
为@Ben 提出的形式,那么您可以使用分布式数组。这个演示展示了如何做到这一点。
乔丹,你的方程正是“摩尔-彭罗斯矩阵逆”的定义。
检查: http: //mathworld.wolfram.com/Moore-PenroseMatrixInverse.html
直接使用h = X \ y;
应该会有所帮助。或者查看 Matlabpinv(X)*y