4.8数字对象的判断函数

因为变量的类型可能在执行程序期间发生变化,因此可能需要在运行时进行类型检查。这样做还可以根据输入的类型更改函数的行为。举个例子,这里的天真的实现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)

如果返回truex是一个数字对象,即整数、实数或复数数组。

逻辑数组和字符数组不被视为数字数组。

详见: isinteger, isfloat, isreal, iscomplex, ischar, islogical, isstring, iscell, isstruct, isa.

广告
 
: tf = islogical (x)
: tf = isbool (x)

如果返回truex是一个逻辑对象。

编程说明:isbool是的别名islogical并且可以互换使用。

详见: ischar, isfloat, isinteger, isstring, isnumeric, isa.

广告
 
: tf = isfloat (x)

如果返回truex是一个浮点数字对象。

double或single类的对象是浮点对象。

详见: isinteger, ischar, islogical, isnumeric, isstring, isa.

广告
 
: tf = isreal (x)

如果返回truex是一个非复数矩阵或标量。

为了与兼容MATLAB,这包括逻辑矩阵和特征矩阵。

详见: iscomplex, isnumeric, isa.

广告
 
: tf = iscomplex (x)

如果返回truex是一个复值数值对象。

详见: isreal, isnumeric, ischar, isfloat, islogical, isstring, isa.

广告
 
: tf = ismatrix (x)

如果返回truex是二维数组。

矩阵是任何类型的数组,其中ndims (x) == 2以及为此size (x)返回[M, N] 具有非负M和N。

详见: isscalar, isvector, iscell, isstruct, issparse, isa.

广告
 
: tf = isvector (x)

如果返回truex是一个向量。

向量是任意类型的二维数组,其中一个维度等于1(1xN或Nx1)。因为这里的定义,1x1对象(标量)也是向量。

详见: isscalar, ismatrix, iscolumn, isrow, size.

广告
 
: tf = isrow (x)

如果返回truex是一个行向量。

行向量是任何类型的二维数组size (x)返回[1, N] 具有非负N。

详见: iscolumn, isscalar, isvector, ismatrix, size.

广告
 
: tf = iscolumn (x)

如果返回truex是列向量。

列向量是任何类型的二维数组size (x)返回[N, 1] 具有非负N。

详见: isrow, isscalar, isvector, ismatrix, size.

广告
 
: tf = isscalar (x)

如果返回truex是标量。

标量是任何类型的单个元素对象size (x)返回[1, 1] .

详见: isvector, ismatrix, size.

广告
 
: tf = issquare (x)

如果返回truex是二维正方形数组。

方形数组是任何类型的二维数组size (x)返回[N, N] 其中N是非负整数。

详见: isscalar, isvector, ismatrix, size.

广告
 
: tf = issymmetric (A)
: tf = issymmetric (A, tol)
: tf = issymmetric (A, "skew")
: tf = issymmetric (A, "skew", tol)

如果返回trueA是在从指定的误差范围内的对称或斜对称数字矩阵tol.

默认误差范围为零(使用更快的代码)。

可通过附加输入指定要检查的对称性类型"nonskew"(默认)用于规则对称或"skew"放弃对称性。

背景:如果矩阵的转置等于原始矩阵,则矩阵是对称的:A == A.' .如果给定误差范围,则对称性从norm (A - A.', Inf) / norm (A, Inf) < tol.

如果矩阵的转置等于原始矩阵的负,则矩阵是斜对称的:A == -A.' 。如果给出了环礁,则通过以下公式确定斜对称性:norm (A + A.', Inf) / norm (A, Inf) < tol.

详见: ishermitian, isdefinite.

广告
 
: tf = ishermitian (A)
: tf = ishermitian (A, tol)
: tf = ishermitian (A, "skew")
: tf = ishermitian (A, "skew", tol)

如果返回trueA是埃尔米特或斜埃尔米特数字矩阵,在从指定的误差范围内tol.

默认误差范围为零(使用更快的代码)。

可通过附加输入指定要检查的对称性类型"nonskew"(默认)对于常规Hermitian或"skew"抛弃埃尔米特人。

背景:如果矩阵的复共轭转置等于原始矩阵,则矩阵是埃尔米特矩阵:A == A' 。如果给定误差范围,则计算为norm (A - A', Inf) / norm (A, Inf) < tol.

如果矩阵轴的复共轭转置等于原始矩阵的负,则矩阵是斜埃尔米特矩阵:A == -A' 。如果给定了环礁,则计算为norm (A + A', Inf) / norm (A, Inf) < tol.

详见: issymmetric, isdefinite.

广告
 
: tf = isdefinite (A)
: tf = isdefinite (A, tol)

如果返回trueA是在从指定的误差范围内的对称正定数字矩阵tol.

如果tol被省略,使用的误差范围100 * eps * norm (A, "fro").

背景:正定矩阵的特征值都大于零。半正定矩阵的特征值都大于或等于零。矩阵A如果以下两个条件适用于极小的误差范围,则很可能是正半定的tol.

isdefinite (A) ⇒ 0
isdefinite (A + 5*tol, tol) ⇒ 1

详见: issymmetric, ishermitian.

广告
 
: tf = isbanded (A, lower, upper)

如果返回trueA是一个数值矩阵,其分量限制在lower主对角线下方的对角线,以及upper对角线在主对角线之上。

lowerupper必须是非负整数。

详见: isdiag, istril, istriu, bandwidth.

广告
 
: tf = isdiag (A)

如果返回trueA是对角线数字矩阵,其被定义为a二维数组,其中主对角线上方和下方的所有元素都为零。

详见: isbanded, istril, istriu, diag, bandwidth.

广告
 
: tf = istril (A)

如果返回trueA是下三角数字矩阵。

下三角矩阵仅在主对角线及以下具有非零项。

详见: istriu, isbanded, isdiag, tril, bandwidth.

广告
 
: tf = istriu (A)

如果返回trueA是一个上三角数字矩阵。

上三角矩阵只有在主对角线和上方才有非零项。

详见: isdiag, isbanded, istril, triu, bandwidth.

广告
 
: tf = isprime (x)

返回一个逻辑数组,该数组为true,其中的元素为x是素数,在不是素数的地方是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适合所有的x在abs范围内(x)<2^64铸造输入大于flintmaxuint64.

对于较大的输入,如果安装并加载了符号包,请使用“sym”:

isprime (sym ('58745389709258902525390450') + (0:4))
   ⇒  0  1  0  0  0

兼容性说明:MATLAB不扩展素数的定义,并且如果给定负数或复数输入,则会返回错误。

详见: primes, factor, gcd, lcm.

广告
 
: tf = isuniform (v)
: [tf, delta] = isuniform (v)

如果实际向量为true,则返回truev是均匀间隔的并且是假的。

如果平均差为(delta)在所有元素之间是相同的,在的误差范围范围内4 * eps (max (abs (v))) .

可选输出delta是元素之间的一致差异。如果向量不均匀,那么deltaNaN. delta与属于同一类v用于浮点输入,classdouble用于整数、逻辑和字符输入。

编程注意事项:对于空输入或标量输入的特殊情况,输出总是false。如果有任何元素NaN那么输出为false。如果delta小于计算的相对误差范围,则为的绝对误差范围eps使用。

详见: linspace, colon.

广告

如果您不想知道变量的属性,而是想知道定义了哪些变量,并收集有关起作用空间本身的其他信息,详见变量的状态.


版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2