Logical operators are used in portions of programs known as flow control (for example if . . . else
. . . end blocks). Vector or matrix logical operations return vector or matrix output and that flow control blocks require scalar logical expressions.
> Greater than
>= Greater or equal to
< Less than
<= Less or equal to
== Equal to
~= Not equal to
Logical operators can operate on scalars, vector or matrices, all comparisons are done element-by element. Operator return either 1 (logical true) or 0 (logical false).
& (AND), | (OR) and ~ (NOT)
Logical expressions can be combined using three logical devices,
Recall that ~ (NOT) has higher precedence than & (AND) and j (OR). They follow the same as other logical operators. If used on two matrices, the dimensions must be the same. If used on a scalar and a matrix, the effect is the same as calling the logical device on the scalar and each element of the matrix.
It is use to convert non-logical elements to logical that take up only 1 byte of memory instead of 8 bytes.
In certain situations, a logical value is required, for instance by indexing an array we can access to the elements of
a matrix x x(#) where # can be a vector of indices. If # is not a number but a logical value, this
>> x = [1 2 3 4]; >> y = [1 1]; >> x(y) ans = 1 1 >> y = logical([1 1]); >> x(y) ans = 1 2 >> y = logical([1 0 1 0]); >> x(y) ans = 1 3
It forces MATLAB to interpret the indices as indicator variables when deciding what to return, logical turns any non-zero value into logical true (1).
>> x = [1 2 3 4]; >> y = x> x(y) ans = 1 2 >> y ans = 1 1 0 0
MATLAB will generate a warning if the values differ from 0 or 1.
>> x=[0 1 2 3] x = 0 1 2 3 >> logical(x) Warning: Values other than 0
find it takes logical inputs and returns matrix indices where the logical statement is true (usuful for multiple data series).
indices = find (x < y)
will return indices (1,2,. . .,numel(x))
[i,j] = find (x < y)
will return pairs of matrix indices what correspond to the places where x < y.
>> x = [1 2 3 4]; >> y = x> find(y) ans = 1 2 >> x = [1 2 ; 3 4]; >> y = x> find(y) ans = 1 2 3 >> [i,j] = find(y) i = 1 2 1 i = 1 1 2
It has a number of special purpose for logical tests to determine if a matrix has special characteristics.
Some operate element-by-element and produce a matrix of the same dimension as the input matrix while other produce only scalars. All begin with is.
isnan 1 if NaN element-by-element
isinf 1 if Inf element-by-element
isfinite 1 if not Inf element-by-element
isreal 1 if not complex valued. scalar
ischar 1 if input is a character array scalar
isempty 1 if empty scalar
isequal 1 if all elements are equal scalar
islogical 1 if input is a logical matrix scalar
isscalar 1 if scalar scalar
isvector 1 if input is a vector (1 x K of K x 1) scalar
For more information and logic functions search for is* in the help file.
- Load the “Returns” matrix created previously, count the number of negative returns for each asset.
- For each series, create an indicator variable that takes the value 1 is the return is larger than 2 by standard deviations or smaller than -2 by standard deviations. What is the average return conditional on falling into this range for both returns?
- Construct an indicator variable that takes the value of 1 when all returns are negative. Compute the correlation of the returns conditional on this indicator variable. How does this compare to the correlation of all returns?