【发布时间】:2011-12-13 06:52:04
【问题描述】:
实际上这就是我想要做的 Ad= and b= 同样 Ad 是稀疏矩阵,b 是非稀疏矩阵。下面是原始问题,我尝试更改语句 A =V'*V + y_0*y_0';使用你告诉我的块处理技术,现在问题出在下面提到的赋值语句上。
V=Ad;
b_1=b;
x_0=ones(size(V ,1) ,1);
y_0=V'*x_0;
A=V'*V + y_0*y_0';
b=V'*b_1 + dot(x_0,b_1)*y_0;
%%%%%%%%% 使用低于 %%%%%% 的块处理修改
V=Ad;
b_1=b;
x_0=ones(size(V ,1) ,1);
y_0=V'*x_0;
v=V'*V ; %%% v is updated here which is left hand side of equation
%%% Block Processing code %% For right hand side of equation
y_01 = y_0(1:size(y_0)/2);
y_02 = y_0(size(y_0)/2 + 1:end);
res =( y_01 * y_01'); % Upper left
Temp=v(1:size(v ,1)/2 , 1:size(v ,1)/2) + res ;
v(1:size(v ,1)/2 , 1:size(v ,1)/2) = Temp; %%%% Problem here gets hang
clear Temp; clear res ;
res = y_02 * y_02'; % Bottom right
Temp=v(size(v ,1)/2 + 1 :end , size(v ,1)/2 + 1 :end) + res ;
v(size(v ,1)/2 + 1:end , size(v ,1)/2 + 1:end) = Temp;
clear Temp; clear res ;
res = y_01 * y_02'; % Upper right
Temp=v(1:size(v ,1)/2 , size(v ,1)/2 + 1:end) + res ;
v(1:size(v ,1)/2 , size(v ,1)/2 + 1:end) = Temp;
clear Temp; clear res ;
res = y_02 * y_01'; % Bottom left
Temp=v(size(v ,1)/2 + 1:end, 1:size(v ,1)/2 ) + res ;
v(size(v ,1)/2 + 1:end, 1:size(v ,1)/2 ) = Temp;
clear Temp; clear res ;
【问题讨论】:
-
它产生一个 20k X 20k 的矩阵,大约 1.5GB。你能指望什么?您可以尝试将问题拆分为较小的问题或使用小于
double的变量 -
嗯,它肯定是一个包含大约
4e8元素的大矩阵,它需要大约3GB 内存。简单的答案是增加内存。您确定要使用外部产品而不是内部产品吗?即使您确实想使用外部产品,您能解释一下您要做什么吗?也许有更好的方法来做同样的事情。 -
谢谢阿尔伯特,我现在已经更新了我的问题,现在很清楚请指导我。
标签: matlab matrix-multiplication out-of-memory