matlab如何向一个10^5阶的大型稀疏矩阵赋值?求解

我的目的是要赋值一个10^5阶的稀疏矩阵 这段代码应该能让你知道我在干嘛了
n=10e5;
a=sparse(n,n);
for i=1:n
for j=1:n
if i==j
a(i,j)=3;
elseif abs(i-j)==1
a(i,j)=-1;
elseif i+j==n+1&i~=n/2&i~=n/2+1
a(i,j)=1/2;
end
end
end
a
%%%%%
但是这么坐时间太久啦 估计事不可能的是吧 帮忙修改一下代码了。

第1个回答  2013-04-27
>> tic
n=10e5;
i0=[1:n]';D0=[i0,i0,ones(n,1)*3];
i1=[1:n-1]';D1=[i1,i1+1,ones(length(i1),1)*-1];
i2=[2:n]';D2=[i2,i2-1,ones(length(i2),1)*-1];
ii=[1:(n/2-1),n:-1:(n/2+2)]';Di=[ii,n+1-ii,ones(length(ii),1)*0.5];
S=spconvert([D0;D1;D2;Di]);
toc
Elapsed time is 1.109511 seconds.本回答被提问者采纳
第2个回答  2013-04-27
把两重循环改一重循环, 把j的循环删掉, 用i计算出j就行了
另外, 前两个if分支连循环都不用写, 自己去查spdiags
第3个回答  2013-04-26
你运行一次。然后把这个矩阵存成.mat就好了啊。
相似回答