由于变量的类型可能在程序执行过程中发生变化,因此有时需要在运行时进行类型检查。这样做还可以根据输入的类型改变函数的行为。例如,下面这个 abs 函数的简单实现中,如果输入是实数则返回绝对值,如果输入是复数则返回其模长。
function a = abs (x)
if (isreal (x))
a = sign (x) .* x;
elseif (iscomplex (x))
a = sqrt (real(x).^2 + imag(x).^2);
endif
endfunction
以下函数可用于确定变量的类型。
tf = isnumeric (x) ¶如果 x 是数字对象(即整数、实数或复数数组),则返回 true。
逻辑数组和字符数组不被视为数字。
另请参阅: isinteger, isfloat, isreal, iscomplex, ischar, islogical, isstring, iscell, isstruct, isa.
tf = isfloat (x) ¶如果 x 是浮点数字对象,则返回 true。
类为 double 或 single 的对象属于浮点对象。
另请参阅: isinteger, ischar, islogical, isnumeric, isstring, isa.
tf = isreal (x) ¶如果 x 是非复数矩阵或标量,则返回 true。
为了与 MATLAB 兼容,这包括逻辑矩阵和字符矩阵。
tf = iscomplex (x) ¶如果 x 是复数数值对象,则返回 true。
另请参阅: isreal, isnumeric, ischar, isfloat, islogical, isstring, isa.
tf = ismatrix (x) ¶如果 x 是二维数组,则返回 true。
矩阵是任意类型的数组,满足 ndims (x) == 2 且 size (x) 返回 [M, N],其中 M 和 N 为非负数。
tf = isvector (x) ¶如果 x 是向量,则返回 true。
向量是二维数组 (ndims (x) == 2),其中其中一个维度的大小为 1(即 size (x) 返回 [1, N] 或 [N, 1],其中 N 为非负数)。
tf = issymmetric (A) ¶tf = issymmetric (A, tol) ¶如果 A 是对称矩阵(在公差 tol 范围内),则返回 true;否则返回 false。
如果使用单个参数调用,则默认公差为 eps(如果 A 是浮点类型)或 eps 的适当缩放值(如果 A 是整数类型)。
空矩阵或非方阵输入会使 issymmetric 返回 false。
另请参阅: ishermitian, isdefinite.
tf = ishermitian (A) ¶tf = ishermitian (A, tol) ¶如果 A 是 Hermite 矩阵(在公差 tol 范围内),则返回 true;否则返回 false。
如果使用单个参数调用,则默认公差为 eps(如果 A 是浮点类型)或 eps 的适当缩放值(如果 A 是整数类型)。
空矩阵或非方阵输入会使 ishermitian 返回 false。
另请参阅: issymmetric, isdefinite.
tf = isdefinite (A) ¶tf = isdefinite (A, tol) ¶如果 A 是对称正定矩阵(在公差 tol 范围内),则返回 true;否则返回 false。
如果 A 是对称半正定矩阵,则返回 1;如果 A 是对称负定矩阵,则返回 -1。
如果使用单个参数调用,则默认公差为 eps(如果 A 是浮点类型)或 eps 的适当缩放值(如果 A 是整数类型)。
另请参阅: issymmetric, ishermitian.
tf = isbanded (A, lower, upper) ¶如果 A 是带宽为 lower(下对角线数量)和 upper(上对角线数量)的带状矩阵,则返回 true。
如果 A 不是方阵,则返回 false。
tf = istriu (A) ¶如果 A 是上三角数字矩阵,则返回 true。
上三角矩阵只有主对角线及以上位置有非零元素。
tf = isprime (x) ¶返回一个逻辑数组,其中 x 中元素为素数的位置为 true,否则为 false。
素数通常定义为大于 1 的正整数(例如 2、3...),它只能被自身和 1 整除。Octave 将此定义扩展为包括负整数和复数值。如果负整数的绝对值是素数,则该负整数被视为素数,即等价于 isprime (abs (x))。
如果 class (x) 是复数,则在高斯整数域中测试素性(https://en.wikipedia.org/wiki/Gaussian_integer)。有些非复整数在通常意义下是素数,但在高斯整数域中却不是素数。例如,5 = (1+2i)*(1-2i) 表明 5 不是素数,因为它有一个除自身和 1 之外的因子。在同一矩阵中同时测试实数和复数时要谨慎。
示例:
isprime (1:6) ⇒ 0 1 1 0 1 0
isprime ([i, 2, 3, 5]) ⇒ 0 0 1 0
编程说明:isprime 适用于所有满足 abs(x) < 2^64 的 x。对于大于 flintmax 的输入,请转换为 uint64 类型。
对于更大的输入,如果已安装并加载了 Symbolic 包,请使用 'sym':
isprime (sym ('58745389709258902525390450') + (0:4))
⇒ 0 1 0 0 0
兼容性说明:MATLAB 不扩展素数的定义,如果输入为负数或复数则会报错。
tf = isuniform (v) ¶[tf, delta] = isuniform (v) ¶如果实数向量 v 是等间距的,则返回 true;否则返回 false。
如果所有元素之间的均值差 (delta) 在 4 * eps (max (abs (v))) 的容差范围内是相同的,则该向量是均匀的。
可选的输出 delta 是元素之间的均匀差值。如果向量不是均匀的,则 delta 为 NaN。delta 对于浮点输入与 v 的类型相同,对于整数、逻辑和字符输入则为 double 类型。
编程说明:对于空输入或标量输入这两种特殊情况,输出始终为 false。如果任意元素为 NaN,则输出也为 false。如果 delta 小于计算出的相对容差,则使用绝对容差 eps。
如果您不是想知道变量的属性,而是想知道定义了哪些变量,以及收集有关工作空间本身的其他信息,请参阅变量的状态。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2