Abo*_*azl 5 matlab matrix large-data
在Ax=b类型问题中使用了一个大矩阵. A是对称的.有没有算法让我们只保存矩阵的一半并按照x=A\b它进行操作?
你只能节省一半的内存,但你可以通过创建一个平面版本的矩阵来保存,然后取消它.所需的额外时间可能不会使节省有价值,请注意:
% pretend this is symettric...
A = rand(10, 10);
% store it as a flat list
flatA = [];
for k = 1:size(A,1)
flatA = [flatA; A([1:k],k)];
end
save('flatA.mat', 'flatA');
% undo
N = (-1 + (1+4*2*length(flatA))^0.5)/2;
newA = NaN(N,N);
cur = 1;
for k = 1:N
len = k;
newA(1:len, k) = flatA(cur:cur+len-1);
cur = cur + len;
end
% real A cannot have NaNs or this trick fails
newA(isnan(newA)) = newA(isnan(newA'))';
Run Code Online (Sandbox Code Playgroud)