Matlab Program running very slow

Hi All,
I have a function that assigns a matrix 400*400 element value based on another 400*400 matrix element value. It can not be simply done by matrix_A=matrix_B. I do it elementwise.
The program runs super slow. I used a double loop to call the function. Anybody has suggestion/advice on the issue? I posted my codes as below just for reference. Thanks a million in advance.
iInd=zeros((nqubits-1)*nqubits,1);
jInd=zeros((nqubits-1)*nqubits,1);
val=zeros((nqubits-1)*nqubits,1)
elementNum=1;
%add coupling
for i=1:1:(num-1)
for j=i:1:num
if interaction(i,j) ~=0
%J=zeros(nqubits,nqubits)
H=zeros(1,nqubits)
varindex1=getvarindex(i,var_size);
varindex2=getvarindex(j,var_size);
if varindex1==1
startnum1=0
varstartnum1=0
else
startnum1=0
varstartnum1=0
for k=1:1:(varindex1-1)
startnum1=startnum1+var_size(k)-1
varstartnum1=varstartnum1+var_size(k)
end
end
if varindex2==1
startnum2=0
varstartnum2=0
else
startnum2=0
varstartnum2=0
for k=1:1:(varindex2-1)
startnum2=startnum2+var_size(k)-1
varstartnum2=varstartnum2+var_size(k)
end
end
if (i-varstartnum1) ==1
if (j-varstartnum2)==1
%J(startnum1+1,startnum2+1)=1
iInd(elementNum)=startnum1+1;
jInd(elementNum)=startnum2+1;
val(elementNum)=1;
elementNum=elementNum+1;
H(startnum1+1)=1
H(startnum2+1)=1
elseif (j-varstartnum2)==var_size(varindex2)
m=var_size(varindex2)
%J(startnum1+1,startnum2+m-1)=-1
iInd(elementNum)=startnum1+1;
jInd(elementNum)=startnum2+m-1;
val(elementNum)=-1;
elementNum=elementNum+1;
H(startnum1+1)=1
H(startnum2+m-1)=-1
else
% k1=i-varstartnum1
k2=j-varstartnum2
%J(startnum1+1,startnum2+k2)=1
iInd(elementNum)=startnum1+1;
iInd(elementNum+1)=startnum1+1;
jInd(elementNum)=startnum2+k2;
jInd(elementNum+1)=startnum2+k2-1;
val(elementNum)=1;
val(elementNum+1)=-1;
elementNum=elementNum+2;
%J(startnum1+1,startnum2+k2-1)=-1
H(startnum2+k2)=1
H(startnum2+k2-1)=-1
end
elseif (i-varstartnum1)==var_size(varindex1)
m1=var_size(varindex1)
if (j-varstartnum2)==1
%J(startnum1+m1-1,startnum2+1)=-1
iInd(elementNum)=startnum1+m1-1;
jInd(elementNum)=startnum2+1;
val(elementNum)=-1;
elementNum=elementNum+1;
H(startnum1+m1-1)=-1
H(startnum2+1)=1
elseif (j-varstartnum2)==var_size(varindex2)
m2=var_size(varindex2)
%J(startnum1+m1-1,startnum2+m2-1)=1
iInd(elementNum)=startnum1+m1-1;
jInd(elementNum)=startnum2+m2-1;
val(elementNum)=1;
elementNum=elementNum+1;
H(startnum1+m1-1)=-1
H(startnum2+m2-1)=-1
else
k2=j-varstartnum2
%J(startnum1+m1-1,startnum2+k2)=-1
%J(startnum1+m1-1,startnum2+k2-1)=1
iInd(elementNum)=startnum1+m1-1;
iInd(elementNum+1)=startnum1+m1-1;
jInd(elementNum)=startnum2+k2;
jInd(elementNum+1)=startnum2+k2-1;
val(elementNum)=-1;
val(elementNum+1)=1;
elementNum=elementNum+2;
H(startnum2+k2)=1
H(startnum2+k2-1)=-1
end
else
k1=i-varstartnum1
if (j-varstartnum2)==1
%J(startnum1+k1,startnum2+1)=1
%J(startnum1+k1-1,startnum2+1)=-1
iInd(elementNum)=startnum1+k1;
iInd(elementNum+1)=startnum1+k1-1;
jInd(elementNum)=startnum2+1;
jInd(elementNum+1)=startnum2+1;
val(elementNum)=1;
val(elementNum+1)=-1;
elementNum=elementNum+2;
H(startnum1+k1)=1
H(startnum1+k1-1)=-1
elseif (j-varstartnum2)==var_size(varindex2)
m2=var_size(varindex2)
%J(startnum1+k1,startnum2+m2-1)=-1
%J(startnum1+k1-1,startnum2+m2-1)=1
iInd(elementNum)=startnum1+k1;
iInd(elementNum+1)=startnum1+k1-1;
jInd(elementNum)=startnum2+m2-1;
jInd(elementNum+1)=startnum2+m2-1;
val(elementNum)=-1;
val(elementNum+1)=1;
elementNum=elementNum+2;
H(startnum1+k1)=1
H(startnum1+k1-1)=-1
else
k2=j-varstartnum2
%J(startnum1+k1,startnum2+k2)=1
%J(startnum1+k1,startnum2+k2-1)=-1
iInd(elementNum)=startnum1+k1;
iInd(elementNum+1)=startnum1+k1;
jInd(elementNum)=startnum2+k2;
jInd(elementNum+1)=startnum2+k2-1;
val(elementNum)=1;
val(elementNum+1)=-1;
elementNum=elementNum+2;
J(startnum1+k1-1,startnum2+k2)=-1
J(startnum1+k1-1,startnum2+k2-1)=1
end
end
end
H=1/4*H*interaction(i,j);
H_prob=H_prob+H;
iInd=iInd(1:elementNum-1); % remove extra entries
jInd=jInd(1:elementNum-1); % remove extra entries
val=val(1:elementNum-1); % list of values (all ones in this case)
J=sparse(iInd,jInd,val,nqubits,nqubits);
J=1/4*J*interaction(i,j);
J_prob=J_prob+J;
end
end

回答(0 个)

类别

帮助中心File Exchange 中查找有关 Sparse Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by