Determine whether array uses complex storage



tf = isreal(A) returns logical 1 (true) when numeric array A does not have an imaginary part, and logical 0 (false) otherwise. isreal returns logical 0 (false) for complex values that have zero imaginary part, since the value is still stored as a complex number.


collapse all

Define a 3-by-4 matrix, A.

A = [7 3+4i 2 5i;...
     2i 1+3i 12 345;...
     52 108 78 3];

Determine whether the array is real.

tf = isreal(A)
tf = logical

Since A contains complex elements, isreal returns false.

Use the complex function to create a scalar, A, with zero-valued imaginary part.

A = complex(12)
A = 12.0000 + 0.0000i

Determine whether A is real.

tf = isreal(A)
tf = logical

A is not real because it has an imaginary part, even though the value of the imaginary part is 0.

Determine whether A contains any elements with zero-valued imaginary part.

ans = logical

A contains elements with zero-valued imaginary part.

Define two complex scalars, x and y.


Determine whether the addition of two complex scalars, x and y, is real.

A = x+y
A = 8

MATLAB® drops the zero imaginary part.

ans = logical

A is real since it does not have an imaginary part.

Create a cell array.

C{1,1} = pi;                 % double
C{2,1} = 'John Doe';         % char array
C{3,1} = 2 + 4i;             % complex double
C{4,1} = ispc;               % logical
C{5,1} = magic(3);           % double array
C{6,1} = complex(5,0)        % complex double
C=6×1 cell array
    {[          3.1416]}
    {'John Doe'        }
    {[2.0000 + 4.0000i]}
    {[               0]}
    {3x3 double        }
    {[5.0000 + 0.0000i]}

C is a 1-by-6 cell array.

Loop over the elements of a cell array to distinguish between real and complex elements.

for k = 1:6
x(k,1) = isreal(C{k,1});

x = 6x1 logical array


All but C{3,1} and C{6,1} are real arrays.

Input Arguments

collapse all

Input array, specified as a scalar, vector, matrix, or multidimensional array.

  • For numeric data types, if A does not have an imaginary part, isreal returns true; if A does have an imaginary part isreal returns false.

  • For duration, calendarDuration, logical, and char data types, isreal always returns true.

  • For string, table, cell, struct, datetime, function_handle, and object data types, isreal always returns false.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | datetime | duration | calendarDuration | function_handle
Complex Number Support: Yes


  • To check whether each element of an array A is real, use A == real(A).

  • isreal(complex(A)) always returns false, even when the imaginary part is all zeros.

  • ~isreal(x) detects arrays that have an imaginary part, even if it is all zeros.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

HDL Code Generation
Generate Verilog and VHDL code for FPGA and ASIC designs using HDL Coder™.

Introduced before R2006a