# Logical operator not evaluating correctly

1 Ansicht (letzte 30 Tage)
Andrew am 26 Jan. 2023
Beantwortet: Star Strider am 26 Jan. 2023
Given the provided array X, create an array Y that is:
equal to 0 if the corresponding element of X is between -5 and +5, inclusive
equal to -1 if the corresponding element of X is less than -5
equalt to +1 if the corresponding element of X is greater than 5
Here is what I have:
Y = (~(X >= -5 & X <= 5) | (-1*(X < -5)) | (X>5)).
Why is the X < -5 not evaluationg to -1?
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Star Strider am 26 Jan. 2023
Only two comparisons are actually required here —
X = linspace(-7, 7, 15);
Y = -(X < -5) + (X > 5);
Check_Result = [X; Y]
Check_Result = 2×15
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 1
.
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (2)

Walter Roberson am 26 Jan. 2023
A|B is an or test and returns a logical value -1 is nonzero which is considered true, and since you or everything together you are going to end up with logical true for those entries.
Try adding the results of the computation
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Les Beckham am 26 Jan. 2023
I would do this in separate steps.
X = randi([-20, 20], [1 15])
X = 1×15
3 -6 2 6 -7 -8 -7 13 17 -3 5 -13 -17 5 -1
Y = zeros(size(X));
Y(X < -5) = -1;
Y(X > 5) = 1
Y = 1×15
0 -1 0 1 -1 -1 -1 1 1 0 0 -1 -1 0 0
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Creating and Concatenating Matrices 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!

Translated by