Anyone can help me to improve this code?
    3 views (last 30 days)
  
       Show older comments
    
Dear friends; I have a code which is not suitable for big matrices or unlimited matrice. I would like to make it better because some times i have a very big matrices such as A = (100,100)
A = zeros(n,n) matrix.
R = [ 0 0 0 1 1] vector
c=2
if R(5,1) == 1
    A(5,5) = c
    A(5,4) = - c  
    A(4,5) = - c 
else 
    A(5,5) = 0    
    A(5,4) = 0  
    A(4,5) = 0
end
if R(4,1) == 1
    A(4,4) = c + A(5,5)
    A(3,4) = - c  
    A(4,3) = - c
else 
    A(4,4) = 0    
    A(3,4) = 0  
    A(4,3) = 0
end
.
.
.
ans
A =
     0     0     0     0     0
     0     0     0     0     0
     0     0     0    -2     0
     0     0    -2     4    -2
     0     0     0    -2     2
Thanks in advance, your help always appreciated
0 Comments
Accepted Answer
  Andrei Bobrov
      
      
 on 22 May 2013
        
      Edited: Andrei Bobrov
      
      
 on 22 May 2013
  
      [EDIT]
n = 5;           % 
R = [0 0 0 1 1]';% eg
c = 2;           %
A1 = spdiags(-c*R,1,n,n);
A = A1 + A1' + spdiags(c*(R + [R(2:end);0]),0,n,n);
full(A)
OR
Rin(:,[1 3 2]) = c*[-[circshift(R,-1) R],R + [R(2:end);0]];
A = spdiags(Rin,-1:1,n,n);
full(A)
OR
Rin(:,[1 3 2]) = c*[-[circshift(R,-1) R],conv(R,[1;1],'same')];
A = spdiags(Rin,-1:1,n,n);
full(A)
3 Comments
More Answers (2)
  David Sanchez
      
 on 22 May 2013
        Ii this what you need?
for k=1:n-1
  if R(k,1) == 1
    A(k,k)= c + A(k+1,k+1);
  else 
    A(k,k) = A(k+1,k+1);
end
4 Comments
  David Sanchez
      
 on 22 May 2013
				I see, you have to start the for loop by the end.
c=2;
if R(5,1) == 1
      A(5,5) = c
      A(5,4) = - c  
      A(4,5) = - c 
  else 
      A(5,5) = 0    
      A(5,4) = 0  
      A(4,5) = 0
  end
for k=(n-1):-1:1
  if R(k) == 1
    A(k,k)= c + A(k+1,k+1);
  else 
    A(k,k) = A(k+1,k+1);
end
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!