Main Content

べき乗と指数

このトピックでは、さまざまな方法を使用して行列のべき乗と指数を計算する方法を説明します。

正の整数のべき乗

A が正方行列で p が正の整数の場合、A^pA をそれ自身に p-1 回乗算します。以下に例を示します。

A = [1 1 1
     1 2 3
     1 3 6];
A^2
ans = 3×3

     3     6    10
     6    14    25
    10    25    46

逆数と分数のべき乗

A が正方行列で特異でない場合、A^(-p)inv(A)p-1 回乗算します。

A^(-3)
ans = 3×3

  145.0000 -207.0000   81.0000
 -207.0000  298.0000 -117.0000
   81.0000 -117.0000   46.0000

MATLAB® では inv(A)A^(-1) が同じアルゴリズムで計算されるため、結果はまったく同じになります。行列が特異に近くなる場合、inv(A)A^(-1) はどちらも警告を発生させます。

isequal(inv(A),A^(-1))
ans = logical
   1

A^(2/3) のような分数のべき乗も計算可能です。分数のべき乗を使用した結果は、行列の固有値の分布によって異なります。

A^(2/3)
ans = 3×3

    0.8901    0.5882    0.3684
    0.5882    1.2035    1.3799
    0.3684    1.3799    3.1167

要素単位のべき乗

.^ 演算子は要素単位のべき乗を計算します。たとえば、行列の各要素を二乗するには、A.^2 を使用できます。

A.^2
ans = 3×3

     1     1     1
     1     4     9
     1     9    36

平方根

関数 sqrt は、行列の各要素の平方根を計算するのに便利な方法です。これを行う代替方法は A.^(1/2) です。

sqrt(A)
ans = 3×3

    1.0000    1.0000    1.0000
    1.0000    1.4142    1.7321
    1.0000    1.7321    2.4495

他の根には nthroot を使用できます。たとえば、A.^(1/3) を計算します。

nthroot(A,3)
ans = 3×3

    1.0000    1.0000    1.0000
    1.0000    1.2599    1.4422
    1.0000    1.4422    1.8171

これらの要素ごとの根は、A=BB となるように第 2 の行列 B が計算される、行列の平方根とは異なります。関数 sqrtm(A) は、より正確なアルゴリズムによって A^(1/2) を計算します。sqrtm の中の m によって、この関数は sqrt(A) と区別されますが、後者は A.^(1/2) と同様に要素ごとに計算を行います。

B = sqrtm(A)
B = 3×3

    0.8775    0.4387    0.1937
    0.4387    1.0099    0.8874
    0.1937    0.8874    2.2749

B^2
ans = 3×3

    1.0000    1.0000    1.0000
    1.0000    2.0000    3.0000
    1.0000    3.0000    6.0000

スカラー基底

行列をべき乗にするだけでなく、スカラーを行列のべき乗にすることもできます。

2^A
ans = 3×3

   10.4630   21.6602   38.5862
   21.6602   53.2807   94.6010
   38.5862   94.6010  173.7734

スカラーを行列のべき乗にする場合、MATLAB は行列の固有値と固有ベクトルを使用して行列のべき乗を計算します。[V,D] = eig(A) の場合は、2A=V 2D V-1 となります。

[V,D] = eig(A);
V*2^D*V^(-1)
ans = 3×3

   10.4630   21.6602   38.5862
   21.6602   53.2807   94.6010
   38.5862   94.6010  173.7734

行列の指数

行列指数は、スカラーを行列のべき乗にする特殊なケースです。行列指数の基底はオイラー数 e = exp(1) です。

e = exp(1);
e^A
ans = 3×3
103 ×

    0.1008    0.2407    0.4368
    0.2407    0.5867    1.0654
    0.4368    1.0654    1.9418

行列指数を計算するには、関数 expm がより便利です。

expm(A)
ans = 3×3
103 ×

    0.1008    0.2407    0.4368
    0.2407    0.5867    1.0654
    0.4368    1.0654    1.9418

行列指数の計算方法はいくつかあります。詳細については、行列の指数を参照してください。

小さい数値の処理

MATLAB 関数 log1p および expm1 は、x の非常に小さい値について log(1+x)ex-1 を正確に計算します。たとえば、マシンの精度より小さい数値を 1 に加算しようとすると、結果は 1 に丸められます。

log(1+eps/2)
ans = 0

しかし、log1p は、より精度の高い解を返すことができます。

log1p(eps/2)
ans = 1.1102e-16

同様に ex-1 では、x が非常に小さいとゼロに丸められます。

exp(eps/2)-1
ans = 0

この場合も、expm1 は、より精度の高い解を返すことができます。

expm1(eps/2)
ans = 1.1102e-16

参考

| | | | | | |

関連するトピック