19 算術演算 

編集

以下の解説において特に注釈がない場合,この章で紹介するすべての関数は,実数型と複素数型のス カラおよび行列のいずれにも使用することが出来ます。

 19.1 ユーティリティ関数 

編集

ここで紹介する関数群は,複素数に対しても使用することができます。 各関数とも,1 つの引数を与 えるように作られています。 これらの関数群を,マッピング関数(mapping function)と呼びます。

この名称は,引数として行列を与えたとき,行列の各要素に対して同じ処理をすることに由来するも のです。

ceil (x)

編集

                                                           [Mapping Function]

x よりも小さくない最小の整数を返します。 x が複素数のときは,ceil (real (x)) + ceil (imag (x)) * Iを返します。

exp (x)

編集

                                                           [Mapping Function]

x の指数関数を計算します。 行列に対して指数行列を計算するには,Chapter 20 [Linear Algebra]の章を参照してください。

fix (x)

編集

                                                           [Mapping Function]

x をゼロに向かって丸める。 x が複素数のときは,fix (real (x)) + fix (imag (x)) * I を返します。

floor (x)

編集

                                                           [Mapping Function]

x よりも大きくない最大の整数を返します。 x が複素数のときは,floor (real (x)) + floor (imag (x)) * Iを返します。

g = gcd (a1, ...)

編集

                                                           [Loadable Function]

[g, v1, ...] = gcd (a1, ...)

編集

                                                           [Loadable Function]

引数をひとつだけ与えると,その最大公約数を返します。 2 つ以上の引数を指定するときは,それ らが同じサイズのベクトルもしくはスカラでなければなりません。 この場合,対応する要素につ いてそれぞれ最大公約数を計算します。 指定する各要素は,整数でなければなりません。 以下に例 を示す。

gcd ([15, 20]) ) 5 あるいは,以下のようにすることもできます。

gcd ([15, 9], [20 18]) ) 5 9 v1 のように返り値を追加すると,以下のような整数のベクトルを返します。

g = v1a1 + v2a2 + ¢ ¢ ¢ 以前のOctave における後方互換性を確保するため,全ての引数がスカラであるときには,単 一の返り値v1 にすべての値(v1, ...)を含めるようになっています。


lcm (x, ...)

編集

                                                           [Mapping Function]

x あるいは指定した全引数について,その最小公倍数を計算します。 たとえば, lcm (a1, ..., ak) と lcm ([a1, ..., ak]). は同じ意味です。 全ての要素は同じ大きさであるか,スカラでなければなりません。

log (x)

編集

                                                           [Mapping Function]

x の各要素について,自然対数を計算します。 対数行列を計算するには,Chapter 20 [LinearAlgebra]の項を参照のこと。

log10 (x)

編集

                                                           [Mapping Function]

x の常用対数(10 を底とする対数)を計算します。

log2 (x)

編集

                                                           [Mapping Function]

[f, e] = log2 (x)

編集

                                                           [Mapping Function]

x について,2 を底とする対数を計算します。 返り値を2 つ指定すると,1=2 <= jfj < 1 およ びx = f ¢ 2e を満たすf とe を返します。

max (x, y, dim)

編集

                                                           [Mapping Function]

[w, iw] = max (x)

編集

                                                           [Mapping Function]

引数としてベクトルを渡すと,その要素の最大値を返します。 行列を渡すと,各列ごとに最大値を 返すので,結果は行ベクトルとなります。 dim を指定すると,その次数を指定することができます。

2 つの行列(あるいは行列とスカラ)を渡すと,対で比較した結果を返します。 以下に例を挙げる。

max (max (x)) この結果は,x に含まれる要素の最大値を返します。

max (2:5, pi) ) 3.1416 3.1416 4.0000 5.0000 これは,2:5の範囲にある各要素とpiとを比較し,最大値を含む行ベクトルを返します。

引数に複素数を渡すと,要素の大きさで比較を行う。

1 つの入力に対して2 つの返り値を受け取るとき,max関数は,最大値に対応する要素の位置 も返します。 以下の例を参照されたい。

[x, ix] = max ([1, 3, 5, 2, 5]) ) x = 5 ix = 3

min (x, y, dim)

編集

                                                           [Mapping Function]

[w, iw] = min (x)

編集

                                                           [Mapping Function]

引数としてベクトルを渡すと,その要素の最小値を返します。 行列を渡すと,各列ごとに最小値を 返すので,結果は行ベクトルとなります。 dim を指定すると,その次数を指定することができます。 2 つの行列(あるいは行列とスカラ)を渡すと,対で比較した結果を返します。 以下に例を挙げる。

min (min (x))

この結果は,x に含まれる要素の最小値を返します。

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

これは,2:5の範囲にある各要素とpiとを比較し,最小値を含む行ベクトルを返します。 引数に複素数を渡すと,要素の大きさで比較を行う。 1つの入力に対して2つの返り値を受け取るとき,min関数は,最小値に対応する要素の位置も返します。 以下の例を参照してください。

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

mod (x, y)

編集

                                                           [Mapping Function]

以下の計算式により,剰余(割り算の余り)を計算します。

x - y .* floor (x ./ y) 負の値を正しく扱うことに注意されたい。 つまり,mod (-1, 3)の結果は2 であり,-1 ではな い。 rem (-1, 3)の結果は-1 となります。 また,mod (x, 0)は,x を返します。

引数の次数が合わないとき,あるいは引数に複素数を指定したときはエラーメッセージを表示 します。

nextpow2 (x)

編集

                                                           [Function File] x がスカラであれば,2n , jxj. を満たす最初の整数n を返します。

x がベクトルであれば,nextpow2 (length (x))を返します。

pow2 (x)

編集

                                                           [Mapping Function] pow2 (f, e) ====                                                            [Mapping Function]

引数を1つだけ指定したときには,x の各要素について2x を計算します。 2つの引数に対して は,f ¢ 2e. を計算します。

rem (x, y)

編集

                                                           [Mapping Function]

以下の式によって,x / yの余りを計算します。

x - y .* fix (x ./ y) 引数の次数が合わないとき,あるいは複素数が渡されたときにはエラーメッセージを表示します。

round (x)

編集

                                                           [Mapping Function]

x に最も近い整数を返します。 x が複素数のときには,round (real (x)) + round (imag (x))

  • Iを返します。

sign (x)

編集

                                                           [Mapping Function]

符号関数(signum function)を計算します。 この関数は,以下のように定義されます。

sign(x) = 8<

1; x > 0; 0; x = 0; !1; x < 0. 複素数については,x ./ abs (x)を返します。


sqrt (x)

編集

                                                           [Mapping Function]

x の正の平方根(ルート)を計算します。 x が負のとき,複素数を返します。 行列の平方根について は,Chapter 20 [Linear Algebra]を参照してください。

19.2 複素数演算

編集

ここで紹介する関数群は,複素数に対しても使用することができます。 各関数とも,1 つの引数を与え るように作られています。 引数として行列を与えたとき,行列の各要素ごとに同じ処理をします。 以 降の解説において,z は複素数x + iy であり,i は虚数単位( p !1)です。

abs (z)

編集

                                                           [Mapping Function]

z の大きさを,jzj = p x2 + y2. から計算します。

以下に例を示す。

abs (3 + 4i) ) 5

conj (z)

編集

                                                           [Mapping Function]

z の共役複素数 ̄z = x ! iy を返します。

imag (z)

編集

                                                           [Mapping Function]

z の虚部を実数で返します。

real (z)

編集

                                                           [Mapping Function]

z の実部を返します。

 19.3 三角関数 

編集

Octave では以下の三角関数を提供しています。 引数はラジアンで指定します。 角度(degree)をラ ジアンに変換するには,角度に?=180 を乗じてください(たとえば,sin (30 * pi/180)は,30 度 に対する正弦の値を返す)。

sin (x)

編集

                                                           [Mapping Function]

x の各要素について,正弦(サイン)を計算します。

cos (x)

編集

                                                           [Mapping Function]

x の各要素について,余弦(コサイン)を計算します。

tan (z)

編集

                                                           [Mapping Function]

x の各要素について,正接(タンジェント)を計算します。

sec (x)

編集

                                                           [Mapping Function]

x の各要素について,余割(セカント)を計算します。

csc (x)

編集

                                                           [Mapping Function]

x の各要素について,余割(コセカント)を計算します。

cot (x)

編集

                                                           [Mapping Function]

x の各要素について,余接(コタンジェント)を計算します。


asin (x)

編集

                                                           [Mapping Function]

x の各要素について,逆正弦(アークサイン)を計算します。

acos (x)

編集

                                                           [Mapping Function]

x の各要素について,逆余弦(アークコサイン)を計算します。

atan (x)

編集

                                                           [Mapping Function]

x の各要素について,逆正接(アークタンジェント)を計算します。

asec (x)

編集

                                                           [Mapping Function]

x の各要素について,逆正割(アークセカント)を計算します。

acsc (x)

編集

                                                           [Mapping Function]

x の各要素について,逆余割(アークコセカント)を計算します。

acot (x)

編集

                                                           [Mapping Function]

x の各要素について,逆余接(アークコタンジェント)を計算します。

sinh (x)

編集

                                                           [Mapping Function]

x の各要素について,双曲線正弦(ハイパボリックサイン)を計算します。

cosh (x)

編集

                                                           [Mapping Function]

x の各要素について,双曲線余弦(ハイパボリックコサイン)を計算します。

tanh (x)

編集

                                                           [Mapping Function]

x の各要素について,双曲線正接(ハイパボリックタンジェント)を計算します。

sech (x)

編集

                                                           [Mapping Function]

x の各要素について,双曲線正割(ハイパボリックセカント)を計算します。

csch (x)

編集

                                                           [Mapping Function]

x の各要素について,双曲線余割(ハイパボリックコセカント)を計算します。

coth (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線余接(逆ハイパボリックコタンジェント)を計算します。

asinh (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線正弦(逆ハイパボリックサイン)を計算します。

acosh (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線正接(逆ハイパボリックコサイン)を計算します。

atanh (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線正接(逆ハイパボリックタンジェント)を計算します。


asech (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線正割(逆ハイパボリックセカント)を計算します。

acsch (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線余割(逆ハイパボリックコセカント)を計算します。

acoth (x)

編集

                                                           [Mapping Function]

x の各要素について,逆双曲線余接(逆ハイパボリックコタンジェント)を計算します。

以上の関数は,引数が1 つであることを想定しています。 引数に行列を与えたときは,以下に示す ように,各要素ごとに計算を行います。

sin ([1, 2; 3, 4]) ) 0.84147 0.90930 0.14112 -0.75680

atan2 (y, x)

編集

                                                           [Mapping Function]

x とy の対応する要素について,y / x の逆正接(アークタンジェント)を計算します。 結果を !? から? の範囲で返します。

19.4 和と積

編集

sum (x, dim)

編集

                                                           [Built-in Function]

次元dim 方向の和を計算します。 dim が省略されたときは,1 を指定した(列方向に和をとる) とみなす。

例外として,x がベクトルでdim を省略したとき,要素の和を返します。

prod (x, dim)

編集

                                                           [Built-in Function]

次元dim 方向の積を計算します。 dim が省略されたときは,1を指定した(列方向に積をとる)とみなす。 例外として,x がベクトルでdim を省略したとき,x の要素の積を返します。

cumsum (x, dim)

編集

                                                           [Built-in Function]

次元dim 方向の累積和を計算します。 dim が省略されたときは,1 を指定した(列方向に累積和をとる)とみなす。 例外として,x がベクトルでdim を省略したとき,x の要素の累積和を返します。

cumprod (x, dim)

編集

                                                           [Built-in Function]

次元dim 方向の累積積を計算します。 dim が省略されたときは,1 を指定した(列方向に累積積 をとる)とみなす。

例外として,x がベクトルでdim を省略したとき,x の要素の累積積を返します。

sumsq (x, dim)

編集

                                                           [Built-in Function] 次元dim 方向の積和を計算します。 dim が省略されたときは,1を指定した(列方向に積和をとる)とみなす。 例外として,x がベクトルでdim を省略したとき,要素の積和を返します。 この関数は,概念的には以下の計算を行っているに等しい。

sum (x .* conj (x), dim)

しかし,この関数の方が使用メモリが少なく,xが実数の場合にconjを呼び出さないので,より効率的です。

 19.5 特殊な関数 

編集

[j, ierr] = besselj (alpha, x, opt)

編集

                                                           [Loadable Function]

[y, ierr] = bessely (alpha, x, opt)

編集

                                                           [Loadable Function]

[i, ierr] = besseli (alpha, x, opt)

編集

                                                           [Loadable Function]

[k, ierr] = besselk (alpha, x, opt)

編集

                                                           [Loadable Function]

[h, ierr] = besselh (alpha, k, x, opt)

編集

                                                           [Loadable Function]

さまざまなBessel(あるいはHankel)関数を計算します。

besselj 第1 種のBessel 関数
bessely 第2 種のBessel 関数
besseli 第1 種の修正Bessel 関数
besselk 第2 種の修正Bessel 関数
besselh 第1 種(k=1)あるいは第2 種(k=2)のHankel 関数

引数opt を与えたとき,k = 1 に対してexp (-I*x),k = 2 に対してexp (I*x)によってスケール化した値を返します。

alpha がスカラであれば,結果はx と同じサイズになります。 x がスカラであれば,結果はalpha と 同じサイズになります。 alpha が行ベクトルでx が列ベクトルであれば,返す結果はlength (x) 行length (alpha)列の行列となります。 一方,alpha とx は整合性がなければならず,結果は同 じサイズとなります。

alpha の値は実数でなければなりません。 x は複素数でもよい。

必要に応じてierr を指定することにより,以下のような実行結果を得ることができます。 これは 結果と同じサイズになります。

0. 正常終了
1. 入力エラーによりNaNを返した
2. オーバーフローによりInfを返した
3. argument reduction による有効桁のロスにより,計算機精度の半分以下の精度となった
4. argument reduction によって有効桁が完全にロスした
5. エラー?計算は行われず,収束せずにNaNを返した

[a, ierr] = airy (k, z, opt)

編集

                                                           [Loadable Function]

第1 種および第2 種のAiry 関数,およびその導関数を計算します。

K Function Scale factor (if a third argument is supplied)

--- -------- ----------------------------------------------

0 Ai (Z) exp ((2/3) * Z * sqrt (Z)) 1 dAi(Z)/dZ exp ((2/3) * Z * sqrt (Z)) 2 Bi (Z) exp (-abs (real ((2/3) * Z *sqrt (Z)))) 3 dBi(Z)/dZ exp (-abs (real ((2/3) * Z *sqrt (Z)))) 関数をairy (z)の形式で呼び出すと,airy (0, z) として実行したものと見なします。


結果はz と同じサイズになります。

必要に応じてierr を指定することにより,以下のような実行結果を得ることができます。 これは 結果と同じサイズになります。

0. 正常終了
1. 入力エラーによりNaNを返した
2. オーバーフローによりInfを返した
3. argument reduction による有効桁のロスにより,計算機精度の半分以下の精度となった
4. argument reduction によって有効桁が完全にロスした
5. エラー?計算は行われず,収束せずにNaNを返した

beta (a, b)

編集

                                                           [Mapping Function]

ベータ関数を返します。

B(a; b) = !(a)!(b) !(a + b) :

betainc (x, a, b)

編集

                                                           [Mapping Function]

不完全ベータ関数を返します。

 ̄(x; a; b) = B(a; b)!1 Z x 0 t(a!z)(1 ! t)(b!1)dt: x が複数の成分を含むならば,a とb の両方ともスカラでなければなりません。 x がスカラなら ば,a とb は同じ次数でなければなりません。

bincoeff (n, k)

編集

                                                           [Mapping Function]

以下の計算式においてn とk を与えたときの二項係数を返します。

A n k ! = n(n ! 1)(n ! 2) ¢ ¢ ¢ (n ! k + 1) k! たとえば, bincoeff (5, 2) ) 10 となります。

erf (z)

編集

                                                           [Mapping Function]

誤差関数を計算します。

erf(z) = 2 p ? Z z 0 e!t2 dt

erfc (z)

編集

                                                           [Mapping Function]

補誤差関数1 ! erf(z) を計算します。

erfinv (z)

編集

                                                           [Mapping Function]

誤差関数の逆関数を計算します。


gamma (z)

編集

                                                           [Mapping Function]

ガンマ関数を計算します。

!(z) = Z 1 0 tz!1e!tdt:

gammainc (x, a)

編集

                                                           [Mapping Function]

不完全ガンマ関数を計算します。

°(x; a) = Z x 0 e!tta!1dt !(a) a がスカラならば,gammainc (x, a)はx の各要素に対して結果を返します。

x とa の両方ともスカラではないならば,x とa は同じサイズでなければなりません。 このとき, 要素ごとに結果を返します。

lgamma (a, x)

編集

                                                           [Mapping Function]

gammaln (a, x)

編集

                                                           [Mapping Function]

ガンマ関数の自然対数を返します。

cross (x, y, dim)

編集

                                                           [Function File] 3次元のベクトルx とy のcross product を計算します。

cross ([1,1,0], [0,1,1]) ) [ 1; -1; 1 ] x とy が行列ならば,最初の次元の3 要素についてcross product を計算します。 オプション引 数dim を指定すると,dim 次元の方向に沿ってcross product を計算します。

commutation_matrix (m, n)

編集

                                                           [Function File] 交換行列(commutation matrix)Km;n を返します。 これは,m£n の行列A に対して,Km;n ¢ vec(A) = vec(AT ) となるmn×mn の行列です。

引数としてm のみを与えるならば,Km;m を返します。

統計学ならびに経済学における行列の微分についての応用は,Magnus and Neudecker (1988) を参照してください。

duplication_matrix (n)

編集

                                                           [Function File] duplication matrix Dn を返します。 これは,n×n の対称行列matrices A について,Dn ? vech(A) = vec(A) なるn2×n(n + 1)=2 の行列です。

統計学ならびに経済学における行列の微分についての応用は,Magnus and Neudecker (1988) を参照してください。


19.6 座標変換

編集

[theta, r] = cart2pol (x, y)

編集

                                                           [Function File]

[theta, r, z] = cart2pol (x, y, z)

編集

                                                           [Function File] Transform cartesian to polar or cylindrical coordinates. x, y (and z) must be of same shape. theta describes the angle relative to the x - axis. r is the distance to the z - axis (0, 0, z).

[x, y] = pol2cart (theta, r)

編集

                                                           [Function File]

[x, y, z] = pol2cart (theta, r, z)

編集

                                                           [Function File]

Transform polar or cylindrical to cartesian coordinates. theta, r (and z) must be of same shape. theta describes the angle relative to the x - axis. r is the distance to the z - axis (0, 0, z).

[theta, phi, r] = cart2sph (x, y, z)

編集

                                                           [Function File]

Transform cartesian to spherical coordinates. x, y and z must be of same shape. theta describes the angle relative to the x - axis. phi is the angle relative to the xy - plane. r is the distance to the origin (0, 0, 0).

[x, y, z] = sph2cart (theta, phi, r)

編集

                                                           [Function File]

Transform spherical to cartesian coordinates. x, y and z must be of same shape. theta describes the angle relative to the x-axis. phi is the angle relative to the xy-plane. r is the distance to the origin (0, 0, 0).

19.7 数学的定数

編集

                                                           [Built-in Variable]

                                                           [Built-in Variable]

                                                           [Built-in Variable]

                                                           [Built-in Variable] 虚数単位であり,

sqrt(-1)

と定義されます。 これらの組み込み変数は,関数のような挙動をします。 ゆえに,その名前を別の目的に使用することができます。 もし,これらを変数名として使用して値 を代入し,その後クリアするならば,それらは再びあらかじめ特別に定義してあったものとし て機能します。 詳細は,Section 9.3 [Status of Variables]を参照のこと。

                                                           [Built-in Variable]

                                                           [Built-in Variable] 無限大を表す。 これは,1/0 のような演算,あるいは浮動小数点オーバーフローの結果として 返されます。

                                                           [Built-in Variable]

                                                           [Built-in Variable] 非数を表す。 これは,0=0,あるいは1!1,さらにはNaN を含む演算を行った場合に返さ れる。

ある演算で返されたNaNは,別のNaNと比較できません。 この挙動は,浮動小数点演算のIEEE 標準において明記されています。 ある値がNaN かどうかを判定するには,isnan関数を使用す ること。

                                                           [Built-in Variable] 円周率です。 内部的には,piは‘4.0 * atan (1.0)’として計算されます。

                                                           [Built-in Variable] 自然対数の底です。 この定数e は,log(e) = 1. を満たす。

                                                           [Built-in Variable] 計算機の精度を表す。 正確に言えば,epsは計算機の浮動小数点演算機能において,任意の隣 り合うふたつの数の相対間隔の最大値です。 この数値は,明らかにシステムに依存します。 64ビットIEEE 浮動小数点数値をサポートする計算機において,epsは近似的に2:2204£10!16となります。

realmax

編集

                                                           [Built-in Variable] 浮動小数点値として表すことのできる最も大きな値です。 実際の値は,システムに依存す る。 64 ビットIEEE 浮動小数点数値をサポートする計算機において,realmaxは近似的に 1:7977×10^308. となります。

realmin

編集

                                                           [Built-in Variable] 浮動小数点値として表すことのできる最も小さな値です。 実際の値は,システムに依存す る。 64 ビットIEEE 浮動小数点数値をサポートする計算機において,realmaxは近似的に 2:2251×10!308. となります。