octave: Predicates for Numeric Objects
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.
DONTPRINTYET See also: isinteger XREFisinteger, *noteisfloat:
DONTPRINTYET DONTPRINTYET See also: isinteger XREFisinteger, isfloat
XREFisfloat, isreal XREFisreal, *noteiscomplex:
DONTPRINTYET DONTPRINTYET DONTPRINTYET See also: isinteger XREFisinteger, isfloat
XREFisfloat, isreal XREFisreal, iscomplex
XREFiscomplex, islogical XREFislogical, *noteischar:
DONTPRINTYET DONTPRINTYET DONTPRINTYET See also: isinteger XREFisinteger, isfloat
XREFisfloat, isreal XREFisreal, iscomplex
XREFiscomplex, islogical XREFislogical, ischar
XREFischar, iscell XREFiscell, isstruct XREFisstruct,
isa XREFisa.
-- : islogical (X)
-- : isbool (X)
Return true if X is a logical object.
DONTPRINTYET See also: isfloat XREFisfloat, *noteisinteger:
DONTPRINTYET DONTPRINTYET See also: isfloat XREFisfloat, isinteger
XREFisinteger, ischar XREFischar, *noteisnumeric:
DONTPRINTYET DONTPRINTYET See also: isfloat XREFisfloat, isinteger
XREFisinteger, ischar XREFischar, isnumeric
XREFisnumeric, isa XREFisa.
-- : 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 XREFisinteger, ischar XREFischar,
islogical XREFislogical, isnumeric XREFisnumeric,
isa XREFisa.
-- : isreal (X)
Return true if X is a non-complex matrix or scalar.
For compatibility with MATLAB, this includes logical and character
matrices.
DONTPRINTYET See also: iscomplex XREFiscomplex, *noteisnumeric:
DONTPRINTYET See also: iscomplex XREFiscomplex, isnumeric
XREFisnumeric, isa XREFisa.
-- : iscomplex (X)
Return true if X is a complex-valued numeric object.
See also: isreal XREFisreal, isnumeric XREFisnumeric,
DONTPRINTYET islogical XREFislogical, ischar XREFischar, *noteDONTPRINTYET islogical XREFislogical, ischar XREFischar,
isfloat XREFisfloat, isa XREFisa.
-- : ismatrix (A)
Return true if A is a 2-D array.
DONTPRINTYET See also: isscalar XREFisscalar, *noteisvector:
DONTPRINTYET DONTPRINTYET See also: isscalar XREFisscalar, isvector
XREFisvector, iscell XREFiscell, *noteisstruct:
DONTPRINTYET DONTPRINTYET See also: isscalar XREFisscalar, isvector
XREFisvector, iscell XREFiscell, isstruct
XREFisstruct, issparse XREFissparse, isa XREFisa.
-- : 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.
DONTPRINTYET See also: isscalar XREFisscalar, *noteismatrix:
DONTPRINTYET DONTPRINTYET See also: isscalar XREFisscalar, ismatrix
XREFismatrix, size XREFsize, rows XREFrows, *noteDONTPRINTYET DONTPRINTYET See also: isscalar XREFisscalar, ismatrix
XREFismatrix, size XREFsize, rows XREFrows,
columns XREFcolumns, length XREFlength.
-- : isrow (X)
Return true if X is a row vector 1xN with non-negative N.
DONTPRINTYET See also: iscolumn XREFiscolumn, *noteisscalar:
DONTPRINTYET DONTPRINTYET See also: iscolumn XREFiscolumn, isscalar
XREFisscalar, isvector XREFisvector, *noteismatrix:
DONTPRINTYET DONTPRINTYET See also: iscolumn XREFiscolumn, isscalar
XREFisscalar, isvector XREFisvector, ismatrix
XREFismatrix.
-- : iscolumn (X)
Return true if X is a column vector Nx1 with non-negative N.
See also: isrow XREFisrow, isscalar XREFisscalar,
isvector XREFisvector, ismatrix XREFismatrix.
-- : isscalar (X)
Return true if X is a scalar.
DONTPRINTYET See also: isvector XREFisvector, *noteismatrix:
DONTPRINTYET See also: isvector XREFisvector, ismatrix
XREFismatrix.
-- : issquare (X)
Return true if X is a square matrix.
DONTPRINTYET See also: isscalar XREFisscalar, *noteisvector:
DONTPRINTYET See also: isscalar XREFisscalar, isvector
XREFisvector, ismatrix XREFismatrix, size XREFsize.
-- : 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’.
DONTPRINTYET See also: ishermitian XREFishermitian, *noteisdefinite:
DONTPRINTYET See also: ishermitian XREFishermitian, isdefinite
XREFisdefinite.
-- : 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’.
DONTPRINTYET See also: issymmetric XREFissymmetric, *noteisdefinite:
DONTPRINTYET See also: issymmetric XREFissymmetric, isdefinite
XREFisdefinite.
-- : 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")’
DONTPRINTYET See also: issymmetric XREFissymmetric, *noteishermitian:
DONTPRINTYET See also: issymmetric XREFissymmetric, ishermitian
XREFishermitian.
-- : 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.
DONTPRINTYET See also: isdiag XREFisdiag, istril XREFistril, *noteDONTPRINTYET See also: isdiag XREFisdiag, istril XREFistril,
istriu XREFistriu, bandwidth XREFbandwidth.
-- : isdiag (A)
Return true if A is a diagonal matrix.
See also: isbanded XREFisbanded, istril XREFistril,
DONTPRINTYET istriu XREFistriu, diag XREFdiag, *notebandwidth:
DONTPRINTYET istriu XREFistriu, diag XREFdiag, bandwidth
XREFbandwidth.
-- : 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 XREFistriu, isbanded XREFisbanded,
DONTPRINTYET isdiag XREFisdiag, tril XREFtril, *notebandwidth:
DONTPRINTYET isdiag XREFisdiag, tril XREFtril, bandwidth
XREFbandwidth.
-- : 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 XREFisdiag, isbanded XREFisbanded,
DONTPRINTYET istril XREFistril, triu XREFtriu, *notebandwidth:
DONTPRINTYET istril XREFistril, triu XREFtriu, bandwidth
XREFbandwidth.
-- : 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.
DONTPRINTYET See also: primes XREFprimes, factor XREFfactor, *noteDONTPRINTYET See also: primes XREFprimes, factor XREFfactor,
gcd XREFgcd, lcm XREFlcm.
If instead of knowing properties of variables, you wish to know which
variables are defined and to gather other information about the
workspace itself, Status of Variables.