因为变量的类型可能在执行程序期间发生变化,因此可能需要在运行时进行类型检查。这样做还可以根据输入的类型更改函数的行为。举个例子,这里的天真的实现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 = islogical (x) ¶tf = isbool (x) ¶如果返回truex是一个逻辑对象。
编程说明:isbool是的别名islogical并且可以互换使用。
tf = isfloat (x) ¶如果返回truex是一个浮点数字对象。
double或single类的对象是浮点对象。
tf = iscomplex (x) ¶如果返回truex是一个复值数值对象。
详见: isreal, isnumeric, ischar, isfloat, islogical, isstring, isa.
tf = ismatrix (x) ¶如果返回truex是二维数组。
矩阵是任何类型的数组,其中ndims (x) == 2以及为此size (x)返回[M, N] 具有非负M和N。
tf = isvector (x) ¶如果返回truex是一个向量。
向量是任意类型的二维数组,其中一个维度等于1(1xN或Nx1)。因为这里的定义,1x1对象(标量)也是向量。
tf = isrow (x) ¶如果返回truex是一个行向量。
行向量是任何类型的二维数组size (x)返回[1, N] 具有非负N。
tf = iscolumn (x) ¶如果返回truex是列向量。
列向量是任何类型的二维数组size (x)返回[N, 1] 具有非负N。
tf = issquare (x) ¶如果返回truex是二维正方形数组。
方形数组是任何类型的二维数组size (x)返回[N, N] 其中N是非负整数。
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对角线在主对角线之上。
lower和upper必须是非负整数。
tf = isdiag (A) ¶如果返回trueA是对角线数字矩阵,其被定义为a二维数组,其中主对角线上方和下方的所有元素都为零。
tf = istril (A) ¶如果返回trueA是下三角数字矩阵。
下三角矩阵仅在主对角线及以下具有非零项。
tf = istriu (A) ¶如果返回trueA是一个上三角数字矩阵。
上三角矩阵只有在主对角线和上方才有非零项。
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铸造输入大于flintmax到uint64.
对于较大的输入,如果安装并加载了符号包,请使用“sym”:
isprime (sym ('58745389709258902525390450') + (0:4))
⇒ 0 1 0 0 0
兼容性说明:MATLAB不扩展素数的定义,并且如果给定负数或复数输入,则会返回错误。
tf = isuniform (v) ¶[tf, delta] = isuniform (v) ¶如果实际向量为true,则返回truev是均匀间隔的并且是假的。
如果平均差为(delta)在所有元素之间是相同的,在的误差范围范围内4 * eps (max (abs (v))) .
可选输出delta是元素之间的一致差异。如果向量不均匀,那么delta是NaN. delta与属于同一类v用于浮点输入,classdouble用于整数、逻辑和字符输入。
编程注意事项:对于空输入或标量输入的特殊情况,输出总是false。如果有任何元素NaN那么输出为false。如果delta小于计算的相对误差范围,则为的绝对误差范围eps使用。
如果您不想知道变量的属性,而是想知道定义了哪些变量,并收集有关起作用空间本身的其他信息,详见变量的状态.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2