Wenn ein logical
Array als Bedingung für eine if
Anweisung verwendet wird, wird es nur als wahr ausgewertet if all elements of the array are true
and it is non-empty.
Ein Ausdruck ist wahr, wenn das Ergebnis nicht leer ist und nur Elemente ungleich Null (logisch oder reell numerisch) enthält. Ansonsten ist der Ausdruck falsch.
if [true false]
disp('Will not run')
end
if [true true]
disp('Will run')
end
if [false false]
disp('Will not run')
end
In Ihrem Beispiel die Ausgabe von X > 0 & Y > 0
ist etwa die Hälfte true
Werte und die Hälfte false
Werte, die die if
Ausdruck führt zu false
und der else
Block bewerten stattdessen ausgeführt.
Was Sie stattdessen tun möchten, ist X > 0 & Y > 0
zu verwenden, um eine logische Maske zu erstellen, die Sie dann verwenden können, um das Ergebnis zu bearbeiten.
mask = x > 0 & y > 0;
R = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2));
R(~mask) = 0;