这是我要解决的方程:
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)也无法解决。是否有将其拆分或专门用于处理如此大的逆矩阵的库的方法?
谢谢。
这是我要解决的方程:
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)也无法解决。是否有将其拆分或专门用于处理如此大的逆矩阵的库的方法?
谢谢。
这看起来像是一个伪逆矩阵。也许你只是在寻找
h = X \ y;
Jordan,你的方程式恰好是“Moore-Penrose矩阵逆”的定义。
请查看:http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html
直接使用h = X \ y;
应该有所帮助。或者查看Matlab中的pinv(X)*y
我生成了一个随机的10,000乘以10,000的矩阵X和一个随机的10,000乘以1的向量y。
我按步骤分解了我的计算过程。(代码如下)
我没有遇到计算问题。虽然需要一些时间,但将操作分解为尽可能小的组有助于防止计算机被压垮。但是,这可能与您使用的矩阵的组成有关(例如,稀疏矩阵、小数等)。
X = randi(2000, [10000, 10000]);
y = randi(2000, 10000, 1);
K = X';
A = K*X;
b = K*y;
S = A\b;
randint
的语法!我会更新我的答案。 - Derek W
X
和y
的维度是多少?如果维度非常高,您可能需要计算逆矩阵的近似值。顺便问一下,您不会错过一些*
吧? - sfotiadis