Matlab Program running very slow
Show older comments
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
Answers (0)
Categories
Find more on Sparse Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!