Previous: Promotion and Demotion of Data Types, Up: Numeric Data Types [Contents][Index]

### 4.8 Predicates for Numeric Objects

Since the type of a variable may change during the execution of a program, it can be necessary to do type checking at run-time. Doing this also allows you to change the behavior of a function depending on the type of the input. As an example, this naive implementation of `abs` returns the absolute value of the input if it is a real number, and the length of the input if it is a complex number.

    function a = abs (x)
      if (isreal (x))
        a = sign (x) .* x;
      elseif (iscomplex (x))
        a = sqrt (real(x).^2 + imag(x).^2);
      endif
    endfunction

The following functions are available for determining the type of a variable.

: isnumeric (x)

  Return true if x is a numeric object, i.e., an integer, real, or complex array.

  Logical and character arrays are not considered to be numeric.

  See also: isinteger, isfloat, isreal, iscomplex, islogical, ischar, iscell, isstruct, isa.

: islogical (x)
: isbool (x)

  Return true if x is a logical object.

  See also: isfloat, isinteger, ischar, isnumeric, isa.

: isfloat (x)

  Return true if x is a floating-point numeric object.

  Objects of class double or single are floating-point objects.

  See also: isinteger, ischar, islogical, isnumeric, isa.

: isreal (x)

  Return true if x is a non-complex matrix or scalar.

  For compatibility with MATLAB, this includes logical and character matrices.

  See also: iscomplex, isnumeric, isa.

: iscomplex (x)

  Return true if x is a complex-valued numeric object.

  See also: isreal, isnumeric, islogical, ischar, isfloat, isa.

: ismatrix (a)

  Return true if a is a 2-D array.

  See also: isscalar, isvector, iscell, isstruct, issparse, isa.

: isvector (x)

  Return true if x is a vector.

  A vector is a 2-D array where one of the dimensions is equal to 1. As a consequence a 1x1 array, or scalar, is also a vector.

  See also: isscalar, ismatrix, size, rows, columns, length.

: isrow (x)

  Return true if x is a row vector 1xN with non-negative N.

  See also: iscolumn, isscalar, isvector, ismatrix.

: iscolumn (x)

  Return true if x is a column vector Nx1 with non-negative N.

  See also: isrow, isscalar, isvector, ismatrix.

: isscalar (x)

  Return true if x is a scalar.

  See also: isvector, ismatrix.

: issquare (x)

  Return true if x is a square matrix.

  See also: isscalar, isvector, ismatrix, size.

: issymmetric (A)
: issymmetric (A, tol)

  Return true if A is a symmetric matrix within the tolerance specified by tol.

  The default tolerance is zero (uses faster code).

  Matrix A is considered symmetric if `norm (A - A.', Inf) / norm (A, Inf) < tol`.

  See also: ishermitian, isdefinite.

: ishermitian (A)
: ishermitian (A, tol)

  Return true if A is Hermitian within the tolerance specified by tol.

  The default tolerance is zero (uses faster code).

  Matrix A is considered symmetric if `norm (A - A', Inf) / norm (A, Inf) < tol`.

  See also: issymmetric, isdefinite.

: isdefinite (A)
: isdefinite (A, tol)

  Return 1 if A is symmetric positive definite within the tolerance specified by tol or 0 if A is symmetric positive semidefinite. Otherwise, return -1.

  If tol is omitted, use a tolerance of `100 * eps * norm (A, "fro")`

  See also: issymmetric, ishermitian.

: isbanded (A, lower, upper)

  Return true if A is a matrix with entries confined between lower diagonals below the main diagonal and upper diagonals above the main diagonal.

  lower and upper must be non-negative integers.

  See also: isdiag, istril, istriu, bandwidth.

: isdiag (A)

  Return true if A is a diagonal matrix.

  See also: isbanded, istril, istriu, diag, bandwidth.

: istril (A)

  Return true if A is a lower triangular matrix.

  A lower triangular matrix has nonzero entries only on the main diagonal and below.

  See also: istriu, isbanded, isdiag, tril, bandwidth.

: istriu (A)

  Return true if A is an upper triangular matrix.

  An upper triangular matrix has nonzero entries only on the main diagonal and above.

  See also: isdiag, isbanded, istril, triu, bandwidth.

: isprime (x)

  Return a logical array which is true where the elements of x are prime numbers and false where they are not.

  A prime number is conventionally defined as a positive integer greater than 1 (e.g., 2, 3, …) which is divisible only by itself and 1. Octave extends this definition to include both negative integers and complex values. A negative integer is prime if its positive counterpart is prime. This is equivalent to `isprime (abs (x))`.

  If `class (x)` is complex, then primality is tested in the domain of Gaussian integers (http://en.wikipedia.org/wiki/Gaussian_integer). Some non-complex integers are prime in the ordinary sense, but not in the domain of Gaussian integers. For example, 5 = (1+2i)*(1-2i) shows that 5 is not prime because it has a factor other than itself and 1. Exercise caution when testing complex and real values together in the same matrix.

  Examples:

      isprime (1:6)
          ⇒ [0, 1, 1, 0, 1, 0]

      isprime ([i, 2, 3, 5])
          ⇒ [0, 0, 1, 0]

  Programming Note: `isprime` is appropriate if the maximum value in x is not too large (< 1e15). For larger values special purpose factorization code should be used.

  Compatibility Note: matlab does not extend the definition of prime numbers and will produce an error if given negative or complex inputs.

  See also: primes, factor, gcd, lcm.

If instead of knowing properties of variables, you wish to know which variables are defined and to gather other information about the workspace itself, see Status of Variables.

Previous: Promotion and Demotion of Data Types, Up: Numeric Data Types [Contents][Index]