4.8 Predicates for Numeric Objects

Last-modified: 2025-03-20 (木) 20:40:26

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)

xが数値オブジェクト、つまり整数、実数、または複素数配列の 場合は true を返します。

論理配列と文字配列は数値とは見なされません。

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

: tf = islogical (x)

: tf = isbool (x)
vxが論理オブジェクトの 場合は true を返します。

プログラミング ノート:isboolは の別名でありislogical、互換的に使用できます。

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

: tf = isfloat (x)

xが浮動小数点数値オブジェクトの 場合は true を返します。

double または single クラスのオブジェクトは浮動小数点オブジェクトです。

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

: tf = isreal (x)

xが非複素行列またはスカラーの 場合は true を返します。

MATLABとの互換性のため、これには論理行列と文字行列が含まれます。

See also: iscomplex, isnumeric, isa.

: tf = iscomplex (x)

xが複素数値オブジェクトの 場合は true を返します。

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

: tf = ismatrix (x)

xが 2 次元配列の 場合は true を返します。

行列は、 負でない M と N を 返す、任意の型の配列です。ndims (x) == 2size (x)[M, N]
See also: isscalar, isvector, iscell, isstruct, issparse, isa.

: tf = isvector (x)
vxがベクトルの 場合は true を返します。

ベクトルは、次元の 1 つが 1 (1xN または Nx1) に等しい任意のタイプの 2 次元配列です。この定義の結果として、1x1 オブジェクト (スカラー) もベクトルになります。
See also: isscalar, ismatrix, iscolumn, isrow, size.

: tf = isrow (x)

が行ベクトルの 場合は true を返します。

行ベクトルは、負でない N を 返す 任意の型の 2 次元配列です。size (x)[1, N]

See also: iscolumn, isscalar, isvector, ismatrix, size.

: tf = iscolumn (x)

xが列ベクトルの 場合は true を返します。

列ベクトルは、負でない N を 返す任意の型の 2 次元配列です。size (x)[N, 1]

See also: isrow, isscalar, isvector, ismatrix, size.

: tf = isscalar (x)

xがスカラーの 場合は true を返します。

スカラーは、 size (x)[1, 1]を返す任意の型の単一要素オブジェクトです。

See also: isvector, ismatrix, size.

: tf = issquare (x)

xが 2 次元の正方配列の 場合は true を返します。

正方配列は、を返す任意のタイプの 2 次元配列です。 ここで、N は負でない整数です。 size (x)[N, N]

See also: isscalar, isvector, ismatrix, size.

: tf = issymmetric (A)

: tf = issymmetric (A, tol)

: tf = issymmetric (A, "skew")

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

Aがtolで指定された許容範囲内の対称または歪対称の数値行列である場合は true を返します。

デフォルトの許容値はゼロです (より高速なコードを使用します)。

チェックする対称性のタイプは、 "nonskew"通常の対称性または"skew"歪んだ対称性の追加入力(デフォルト)で指定できます。

背景: 行列の転置が元の行列と等しい場合、その行列は対称行列です。許容値が指定されている場合、対称性は A == A.'norm (A - A.', Inf) / norm (A, Inf) < tolによって決定されます 。

行列の転置が元の行列の負の値に等しい場合、その行列は歪対称行列と呼ばれます。許容値が指定されている場合、歪対称性はA == -A.'norm (A + A.', Inf) / norm (A, Inf) < tolによって決定されます 。

See also: ishermitian, isdefinite.

: tf = ishermitian (A)

: tf = ishermitian (A, tol)

: tf = ishermitian (A, "skew")

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

Aがtolで指定された許容値内のエルミートまたは歪エルミート数値行列である場合は true を返します。

デフォルトの許容値はゼロです (より高速なコードを使用します)。

チェックする対称性のタイプは、 "nonskew"通常のエルミートまたは"skew"歪んだエルミートの追加入力 (デフォルト) で指定できます。

背景: 行列の複素共役転置が元の行列と等しい場合、その行列はエルミート行列です。許容値が指定されている場合、計算は A == A'norm (A - A', Inf) / norm (A, Inf) < tolになります 。

行列の複素共役転置が元の行列の負の値に等しい場合、その行列は歪エルミート行列と呼ばれます。 許容値が指定されている場合、計算はA == -A'norm (A + A', Inf) / norm (A, Inf) < tolになります 。
See also: issymmetric, isdefinite.

: tf = isdefinite (A)

: tf = isdefinite (A, tol)

Aがtolで指定された許容値内の対称正定値数値行列である場合は true を返します。

tolが省略されている場合は、許容値 100 * eps * norm (A, "fro")を使用します 。

背景: 正定値行列の固有値はすべて 0 より大きいです。半正定値行列の固有値はすべて 0 以上です。次の 2 つの条件が適切に小さい許容値 tol に対して成り立つ場合、行列A は半正定値である可能性が非常に高くなります。

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

See also: issymmetric, ishermitian.

: tf = isbanded (A, lower, upper)

A が、主対角線の下の下対角線と主対角線の上の 上対角線の間にある要素を持つ数値行列である 場合は true を返します。

lowerとupper は負でない整数でなければなりません。

See also: isdiag, istril, istriu, bandwidth.

: tf = isdiag (A)

A が、主対角線の上と下のすべての要素がゼロである 2 次元配列として定義されている対角数値行列である 場合は true を返します。

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

: tf = istril (A)

Aが下三角数値行列の 場合は true を返します。

下三角行列には、主対角線とその下にのみゼロ以外の要素があります。

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

: tf = istriu (A)

が上三角数値行列の 場合は true を返します。

上三角行列には、主対角線とその上にのみゼロ以外の要素があります。

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

: 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

プログラミングノート:は、abs( x ) < 2^64 の 範囲内のすべてのxisprimeに適しています。より大きい入力はflintmaxuint64にキャストします。

より大きな入力の場合、Symbolic パッケージがインストールされロードされている場合は、「sym」を使用します。

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

互換性に関する注意: MATLAB は素数の定義を拡張しないため、負の数または複素数の入力が与えられた場合はエラーが発生します。

: tf = isuniform (v)

: [tf, delta] = isuniform (v)

実数ベクトルvが等間隔の場合は true を返し、そうでない場合は false を返します。

すべての要素間の平均差 (デルタ) が許容範囲内で同じである 4 * eps (max (abs (v)))場合、ベクトルは均一です。

オプションの出力deltaは、要素間の均一な差です。ベクトルが均一でない場合、deltaは ですNaN。delta は、浮動小数点入力の場合はv と同じクラスであり、整数、論理、および文字入力の場合は double クラスです。

プログラミング ノート: 空の入力またはスカラー入力の特殊なケースでは、出力は常に false になります。いずれかの要素がそうである場合、NaN出力は false になります。deltaが計算された相対許容値より小さい場合は、の絶対許容値がeps使用されます。

See also: linspace, colon.

変数のプロパティを知るのではなく、どの変数が定義されているかを知り、ワークスペース自体に関するその他の情報を収集したい場合は、「変数のステータス」を参照してください。