17.5 Utility Functions

Last-modified: 2025-04-02 (水) 21:57:26

17.5 ユーティリティ関数¶

: y = ceil (x)

x以上の最小の整数を返します。

これは正の無限大に向かって丸めることに相当します。

xが複素数の 場合はを返します。 ceil (real (x)) + ceil (imag (x)) * I

ceil ([-2.7, 2.7])
   ⇒ -2    3

See also: floor, round, fix.

: y = fix (x)

xの小数部分を切り捨て、整数部分を返します。

これはゼロに向かって丸めるのと同じです。x が複素数の場合はを返します 。 fix (real (x)) + fix (imag (x)) * I

fix ([-2.7, 2.7])
  ⇒ -2    2

See also: ceil, floor, round.

: y = floor (x)

x以下の最大の整数を返します。

これは負の無限大に向かって丸めるのと同じです。x が複素数の場合はを返します。 floor (real (x)) + floor (imag (x)) * I

floor ([-2.7, 2.7])
    ⇒ -3    2

See also: ceil, round, fix.

: y = round (x)
xに最も近い整数を返します。

xが複素数の 場合はを返します。最も近い整数が 2 つある場合は、ゼロから遠い方を返します。 round (real (x)) + round (imag (x)) * I

round ([-2.7, 2.7])
    ⇒ -3    3

See also: ceil, floor, fix, roundb.

: y = roundb (x)

xに最も近い整数を返します。最も近い整数が 2 つある場合は、偶数の方を返します (バンカー型丸め)。

xが複素数の場合はを返します。 roundb (real (x)) + roundb (imag (x)) * I

See also: round.

: m = max (x)

: m = max (x, [], dim)

: [m, im] = max (x)

: m = max (x, y)

配列x内の最大値を見つけます。

ベクトル引数の場合、最大値を返します。行列引数の場合、各列の最大値を含む行ベクトルを返します。多次元配列の場合、max最初の非シングルトン次元に沿って動作します。

オプションの 3 番目の引数dimが存在する場合は、この次元に沿って操作します。この場合、2 番目の引数は無視され、空の行列に設定する必要があります。

2 つの入力 ( xとy ) に対して、ブロードキャストの規則に従ってペアワイズの最大値を返します。

したがって、

max (max (x))

2次元行列xの最大要素を返し、

max (2:5, pi)
 ⇒  3.1416  3.1416  4.0000  5.0000

範囲の各要素2:5を と比較しpi、最大値の行ベクトルを返します。

複素引数の場合、要素の大きさが比較に使用されます。大きさが同じ場合、結果は(-pi, pi]の範囲内で位相角によって順序付けられます。したがって、
 max ([-1 i 1 -i])

   ⇒ -1

すべてのエントリの大きさは 1 ですが、-1 は値 pi で最大の位相角を持つためです。

1つの入力引数と2つの出力引数で呼び出された場合、max最大値の最初のインデックスも返されます。つまり、
 [x, ix] = max ([1, 3, 5, 2, 5])

   ⇒  x = 5
       ix = 3

See also: min, cummax, cummin.

: m = min (x)

: m = min (x, [], dim)

: [m, im] = min (x)

: m = min (x, y)

配列x内の最小値を見つけます。

ベクトル引数の場合、最小値を返します。行列引数の場合、各列の最小値を持つ行ベクトルを返します。多次元配列の場合、min最初の非シングルトン次元に沿って動作します。

オプションの 3 番目の引数dimが存在する場合は、この次元に沿って操作します。この場合、2 番目の引数は無視され、空の行列に設定する必要があります。

2 つの入力 ( xとy ) に対して、ブロードキャストの規則に従ってペアワイズ最小値を返します。

したがって、

min (min (x))

2次元行列xの最小要素を返し、

min (2:5, pi)
   ⇒  2.0000  3.0000  3.1416  3.1416

範囲の各要素2:5を と比較しpi、最小値の行ベクトルを返します。

複素引数の場合、要素の大きさが比較に使用されます。大きさが同じ場合、結果は(-pi, pi]の範囲内で位相角によって順序付けられます。したがって、

min ([-1 i 1 -i])
   ⇒ -i

すべてのエントリの大きさは 1 ですが、-i は値が -pi/2 の最小位相角を持つためです。

1つの入力引数と2つの出力引数で呼び出された場合、min最小値の最初のインデックスも返されます。つまり、

[x, ix] = min ([1, 3, 0, 2, 0])
   ⇒  x = 0
       ix = 3

See also: max, cummin, cummax.

: M = cummax (x)

: M = cummax (x, dim)

: [M, IM] = cummax (…)

次元dimに沿った累積最大値を返します。

dimが指定されていない場合は、デフォルトで列単位の操作になります。例:

cummax ([1 3 2 6 4 5])
  ⇒  1  3  3  6  6  6

2 つの出力引数を指定して呼び出された場合は、最大値のインデックスも返されます。

[w, iw] = cummax ([1 3 2 6 4 5])
⇒
M =  1  3  3  6  6  6
IM = 1  2  2  4  4  4

See also: cummin, max, min.

: M = cummin (x)

: M = cummin (x, dim)

: [M, IM] = cummin (x)

次元dimに沿った累積最小値を返します。

dimが指定されていない場合は、デフォルトで列単位の操作になります。例:

cummin ([5 4 6 2 3 1])
  ⇒  5  4  4  2  2  1

2 つの出力引数を指定して呼び出された場合は、最小値のインデックスも返されます。

[M, IM] = cummin ([5 4 6 2 3 1])
⇒
M =  5  4  4  2  2  1
IM = 1  2  2  4  4  6

See also: cummax, min, max.

: h = hypot (x, y)

: h = hypot (x, y, z, …)

xとyの二乗の合計の平方根を要素ごとに計算します 。

これは と同等です が、 xまたはyの大きな値によるオーバーフローを回避する方法で計算されます。 sqrt (x.^2 + y.^2)

hypot2 つ以上の引数を指定して呼び出すこともできます。この場合、引数は左から右に累積されます。

hypot (hypot (x, y), z)
hypot (hypot (hypot (x, y), z), w), etc.
: dx = gradient (m)
: [dx, dy, dz, …] = gradient (m)
: […] = gradient (m, s)
: […] = gradient (m, x, y, z, …)
: […] = gradient (f, x0)
: […] = gradient (f, x0, s)
: […] = gradient (f, x0, x, y, …)

サンプリングされたデータまたは関数の勾配を計算します。

mがベクトルの場合は、 mの 1 次元勾配を計算します。mが行列の場合は、各次元ごとに勾配が計算されます。

[dx, dy] = gradient (m)mが行列の場合、x方向とy方向の 1 次元勾配を計算します。多次元行列の場合は、追加の戻り引数を使用できます。

2 点間の一定の間隔は、s パラメータで指定できます。sがスカラーの場合、すべての次元の間隔であるとみなされます。それ以外の場合は、間隔の個別の値をx、… 引数で指定できます。スカラー値は等間隔を指定します。x、… 引数のベクトル値は、その次元の座標を指定します。長さは、mのそれぞれの次元と一致する必要があります。

境界点では線形外挿が適用される。内部点は数値勾配の最初の近似値で計算される。

y'(i) = 1/(x(i+1)-x(i-1)) * (y(i-1)-y(i+1)).

最初の引数fが関数ハンドルの場合、 x0の点における関数の勾配は中心差分を使用して近似されます。たとえば、はgradient (@cos, 0)点x0 = 0におけるコサイン関数の勾配を近似します。サンプリングされたデータと同様に、勾配を推定する点間の間隔値は、sまたはdx、dy、… 引数を介して設定できます。デフォルトでは、間隔 1 が使用されます。

See also: diff, del2.

: z = dot (x, y)

: z = dot (x, y, dim)

2 つのベクトルのドット積を計算します。

xとyが行列の場合、最初の非シングルトン次元に沿ってドット積を計算します。

オプションの引数dimが指定されている場合は、この次元に沿ってドット積を計算します。

実装上の注意: これは と同等です が、一時配列の形成を回避し、より高速です。X と Y が列ベクトルの場合、結果はと同等です。 は整数配列に対して定義されていますが 、整数オブジェクトの範囲が限られているため、出力は予想される結果と異なる場合があります。 sum (conj (X) .* Y, dim)X' * Ydot
See also: cross, divergence, tensorprod.

: z = cross (x, y)

: z = cross (x, y, dim)

2 つの 3 次元ベクトルxと yのベクトル外積を計算します。

xとyが配列の場合、外積は 3 つの要素を持つ最初の次元に沿って適用されます。

オプションの引数 dimは、指定された次元に沿って外積を計算するように強制します。指定された次元のサイズが 3 つの要素でない場合は、エラーが発生します。

Example Code:

cross ([1, 1, 0], [0, 1, 1])
 ⇒
      1  -1   1
cross (magic (3), eye (3), 2)
 ⇒
      0   6  -1
     -7   0   3
      9  -4   0

See also: dot, curl, divergence.

: div = divergence (x, y, z, fx, fy, fz)

: div = divergence (fx, fy, fz)

: div = divergence (x, y, fx, fy)

: div = divergence (fx, fy)

配列fx、 fy、fzまたはfx、fyによってそれぞれ指定されたベクトル場の発散を計算します。

                 d               d               d
div F(x,y,z)  =   -- F(x,y,z)  +  -- F(x,y,z)  +  -- F(x,y,z)
                 dx              dy              dz

ベクトル場の座標は、それぞれ引数x、 y、z、またはx、yで指定できます。

See also: curl, gradient, del2, dot.

: [cx, cy, cz, v] = curl (x, y, z, fx, fy, fz)

: [cz, v] = curl (x, y, fx, fy)

: […] = curl (fx, fy, fz)

: […] = curl (fx, fy)

: v = curl (…)

配列fx、fy、 fzまたはfx、fyによってそれぞれ指定されたベクトル場の回転を計算します。

                 / d         d       d         d       d         d     \
curl F(x,y,z)  =  | -- Fz  -  -- Fy,  -- Fx  -  -- Fz,  -- Fy  -  -- Fx |
                 \ dy        dz      dz        dx      dx        dy    /

ベクトル場の座標は、それぞれ引数x、 y、zまたはx、yで指定できます。 v は、2 次元入力の場合、角速度ベクトルのスカラー成分を z 軸方向に計算します。3 次元入力の場合、スカラー回転は各グリッド ポイントでそのポイントのベクトル場の方向に計算されます。

See also: divergence, gradient, del2, cross.

: L = del2 (M)

: L = del2 (M, h)

: L = del2 (M, dx, dy, …)

離散ラプラス演算子を計算します。

2次元行列Mの場合、これは次のように定義されます。

     1    / d^2            d^2         \
L  = --- * | ---  M(x,y) +  ---  M(x,y) |
     4    \ dx^2           dy^2        /

N 次元配列の場合、括弧内の合計は、追加の高次元にわたる 2 次導関数を含むように拡張されます。

評価ポイント間の間隔は、すべての次元で等間隔を定義するスカラーであるhによって定義できます。または、各次元の間隔をdx、 dyなどで個別に定義することもできます。スカラー間隔引数は等間隔を定義しますが、ベクトル引数は可変間隔を指定するために使用できます。間隔ベクトルの長さは、 Mのそれぞれの次元と一致する必要があります 。デフォルトの間隔値は 1 です。

データ ポイントが 3 個未満のディメンションはスキップされます。境界ポイントは、内部ポイントの線形外挿から計算されます。

Example: Second derivative of 2*x^3

f = @(x) 2*x.^3;
dd = @(x) 12*x;
x = 1:6;
L = 4*del2 (f(x));
assert (L, dd (x));

See also: gradient, diff.

: f = factorial (n)

n が負でない実数の整数である 場合、 nの階乗を返します。

nがスカラーの場合、これは と同等です。ベクトルまたは行列引数の場合、配列内の各要素の階乗を返します。 prod (1:n)

非整数については、一般化された階乗関数 を参照してくださいgamma。階乗関数は急速に大きくなり、倍精度値であってもn > 171 の場合はオーバーフローが発生することに注意してください。このような場合は を考慮してくださいgammaln。

See also: prod, gamma, gammaln.

: pf = factor (q)

: [pf, n] = factor (q)

qの素因数分解を返します。

素因数分解は、pf のすべての要素が素数である場合に定義されます。 の場合は1 を返します。出力pf は、入力と同じ数値クラスになります。 prod (pf) == qq == 1

2 つの出力引数を使用して、一意の素因数pfとその重複度を返します。つまり、 です 。 prod (pf .^ n) == q

実装上の注意: 入力qがsingleまたは の場合double、対応する を超えてはなりません。入力が2^64 未満の場合 flintmax、入力をuint64にキャストします。

factor (uint64 (18446744073709011493))
  ⇒     571111    761213  42431951

さらに大きな入力の場合は、symSymbolic パッケージがインストールされ、ロードされている場合は以下を使用します。

factor (sym ('9444733049654361449941'))
  ⇒ (sym)
             1           1
1099511627689 ⋅8589934669

See also: gcd, lcm, isprime, primes.

: g = gcd (a1, a2, …)

: [g, v1, …] = gcd (a1, a2, …)

a1、a2 、…の最大公約数を計算します。

すべての引数は同じサイズまたはスカラーである必要があります。配列の場合、最大公約数は各要素ごとに個別に計算されます。すべての要素は通常の整数またはガウス (複素) 整数である必要があります。ガウス整数の場合、最大公約数は位相係数 (1、-1、i、または -i による乗算) までしか一意ではないため、4 つの可能な最大公約数の中から任意の最大公約数が返されることに注意してください。

オプションの戻り引数v1 ,…には、次のような整数ベクトルが含まれます。

g = v1 .* a1 + v2 .* a2 + ...

Example code:

gcd ([15, 9], [20, 18])
  ⇒  5  9

プログラミングのヒント: 単一の配列のすべての要素の GCD を見つけるには、 num2cellネストされた呼び出しやループの代わりに を使用します。

x = [30 42 70 105];    # vector or array of inputs
gcd (num2cell (x) {:})
  ⇒     1

See also: lcm, factor, isprime.

: l = lcm (x, y)

: l = lcm (x, y, …)

xとy、またはすべての引数のリストの 最小公倍数を計算します。

すべての入力は同じサイズまたはスカラーである必要があります。すべての要素は実数整数またはガウス (複素) 整数である必要があります。複素入力の場合、結果は位相係数 (+1、+i、-1、または -i による乗算) までのみ一意であり、4 つのうちの 1 つが任意に返されます。

Example code:

lcm (5:8, 9:12)
  ⇒  45  30  77  24

プログラミングのヒント: 単一の配列のすべての要素の LCM を見つけるには、 num2cellネストされた呼び出しやループの代わりに を使用します。

x = 1:10;    # vector or array of inputs
lcm (num2cell (x) {:})
  ⇒     2520

See also: factor, gcd, isprime.

: r = rem (x, y)

割り算の余りを返します。 x / y

剰余は次の式で計算される。

x - y .* fix (x ./ y)

引数の次元が一致しない場合、またはいずれかの引数が複素数の場合は、エラー メッセージが出力されます。

プログラミング ノート: 浮動小数点数 (double、single) で計算する場合、MATLABとの互換性を保つため、整数から数 eps 以内の値は計算前にその整数に丸められます。(double の場合は 2^53) より大きい浮動小数点整数flintmaxは正しく計算されません。より大きな整数値の場合は、この関数を呼び出す前に入力を に変換してくださいuint64。

慣例により、

rem (x, 0) = NaN  if x is a floating point variable
rem (x, 0) = 0    if x is an integer variable
rem (x, y)  returns a value with the signbit from x

反対の規則については、mod関数を参照してください。一般に、 は 2 つの正のrem数を割った後の剰余を計算する場合に最適です 。負の数の場合、または値が周期的である場合は、の方が適しています。 mod

See also: mod.

: m = mod (x, y)

xとyの剰余を計算します。

概念的には、これは次のように表される。

x - y .* floor (x ./ y)

整数型に対して正しい係数が返されるように記述されています。この関数は負の値を正しく処理します。つまり、 mod (-1, 3) が返す値は -1 ではなく 2 ですrem (-1, 3) 。

引数の次元が一致しない場合、または引数のいずれかが複素数である場合は、エラーが発生します。

プログラミング ノート: 浮動小数点数 (double、single) で計算する場合、MATLABとの互換性を保つため、整数から数 eps 以内の値は計算前にその整数に丸められます。(double の場合は 2^53) より大きい浮動小数点整数flintmaxは正しく計算されません。より大きな整数値の場合は、この関数を呼び出す前に入力を に変換してくださいuint64。

慣例により、

mod (x, 0) = x
mod (x, y)      returns a value with the signbit from y

反対の規則については、rem関数を参照してください。一般に、 入力のいずれかが負の数である場合や値が周期的である場合 modよりも、の方が適切な選択です。rem

See also: rem.

: p = primes (n)

nまでのすべての素数を返します。

出力データ クラス (double、single、uint32 など) はnの入力クラスと同じです。使用されるアルゴリズムはエラトステネスのふるいです。

注: 特定の数の素数nに対して、 を呼び出します 。または、 kが約 5 または 6 のときに を呼び出します。これは、平均すると、1 つの素数から次の素数までの距離が素数の対数に比例するため機能します。積分すると、未満の素数が約n個あります。 list_primes (n)primes (n*log (k*n))(1:n)n * log (5*n)

See also: list_primes, isprime.

: p = list_primes ()

: p = list_primes (n)

最初のn個の素数をリストします。

nが指定されていない場合は、最初の 25 個の素数がリストされます。

See also: primes, isprime.

: y = sign (x)

符号関数を計算します。

これは次のように定義されます

          -1, x < 0;
sign (x) =  0, x = 0;
           1, x > 0.

複素引数の場合はsignを返します。 x ./ abs (x)

は 0 であることに注意してくださいsign (-0.0)。IEEE 754 浮動小数点ではゼロに符号を付けることができますが、0.0 と -0.0 は等しくなります。ゼロに符号が付いているかどうかをテストする必要がある場合は、signbit関数を使用します。

See also: signbit.

: y = signbit (x)

xの値の符号ビットが設定されている場合は論理 true を返し、そうでない場合は false を返します。

この動作は他の論理関数と一致しています。論理値を参照してください。この動作は、符号ビットが設定されている場合にゼロ以外の値を返す C 言語関数とは異なります。

これは と同じではありませんx < 0.0。IEEE 754 浮動小数点ではゼロに符号を付けることができるためです。比較は-0.0 < 0.0false になりますが、signbit (-0.0)ゼロ以外の値が返されます。

See also: sign.