Can't apply an IF function with 100000*1 matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Alexandra
am 4 Jun. 2015
Kommentiert: Alexandra
am 5 Jun. 2015
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 Kommentare
Akzeptierte Antwort
James Tursa
am 4 Jun. 2015
Bearbeitet: James Tursa
am 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;
Weitere Antworten (1)
Kelly Kearney
am 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 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!