Can't apply an IF function with 100000*1 matrix
    7 views (last 30 days)
  
       Show older comments
    
Hi! I built this code:
if A1 <0
    D = 0.8;
elseif A2 <0
    D = 0.7;
elseif A3 <0
    D = 0.6;
elseif A4 <0
    D = 0.5;
else
    D = 0.3;
end
My problem is that A1, A2, A3 and A4 are 100000x1 matrixes from Monte Carlo Simulations so I would expect D to be 100000x1 too. Instead I get a flat value like 0.8. What I am doing wrong? The strange part is that it works when test with a 5x1 matrix. Thanks a lot.
0 Comments
Accepted Answer
  James Tursa
      
      
 on 4 Jun 2015
        
      Edited: James Tursa
      
      
 on 4 Jun 2015
  
      To make your code work, wrap a loop around it. E.g.,
D = zeros(size(A1));
n = numel(D);
for k=1:n
    if A1(k) <0
        D(k) = 0.8;
    elseif A2(k) <0
        D(k) = 0.7;
    elseif A3(k) <0
        D(k) = 0.6;
    elseif A4(k) <0
        D(k) = 0.5;
    else
        D(k) = 0.3;
    end 
end
Or perhaps you might use a vectorized approach. E.g.:
D = 0.3 * ones(size(A1));
D(A4<0) = 0.5;
D(A3<0) = 0.6;
D(A2<0) = 0.7;
D(A1<0) = 0.8;
More Answers (1)
  Kelly Kearney
      
 on 4 Jun 2015
        When applied to a vector, if x < 0 is the same as if all(x < 0). It doesn't iterate over the vector, and therefore it returns the single scalar value that you assign.
You need to either loop over all the values, or use logical indexing instead:
D = ones(size(A1)) * 0.3;
D(A1 < 0) = 0.8;
D(A1 >= 0 & A2 < 0) = 0.6;
D(A1 >= 0 & A2 >= 0 & A3 < 0) = 0.4;
D(A1 >= 0 & A2 >= 0 & A3 >= 0 & A4 < 0) = 0.5;
0 Comments
See Also
Categories
				Find more on Repeated Measures and MANOVA 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!
