【Python入門】行列の累乗|matrix_power()関数を学ぶ

行列の累乗|matrix_power()関数を学ぶ_アイキャッチプログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

行列の累乗は、Pythonで簡単に計算することができます。

本記事では、Pythonを使用した行列の累乗の計算方法について、詳しくご説明します。

こんな人に読んでほしい
  • Python初心者の人
  • Pythonを使用した行列の累乗の計算方法について学びたい人
levtech-ad

行列の累乗

行列の累乗とは、同じ行列を\(n\)回乗算することです。

行列\(A\)の\(n\)乗は、対角行列\(D\)と固有ベクトル\(P\)を用いて、下式で計算できます。

\(A^{n}=PD^{n}P^{-1}\)

対角行列による行列の累乗

対角行列を出力する、実装関数diagonalization()を使用して、行列の累乗を計算してみます。

実装関数diagonalization()の説明については、以下記事を参照ください。

#input
import numpy as np
np.set_printoptions(precision=3)

def diagonalization(x):
    eig = np.linalg.eig(x)
    e = np.diag(eig[0])
    p = eig[1]
    return e, p

np.random.seed(0)

A = np.random.randint(0,10,(3,3))
print("行列A:\n{}\n".format(A))

e = diagonalization(A)
D = e[0]
P = e[1]
P_inv = np.linalg.inv(P)

A_3 = P @ (D**3) @ P_inv
print("行列Aの3乗:\n{}".format(A_3))
#output
行列A:
[[5 0 3]
 [3 7 9]
 [3 5 2]]

行列Aの3乗:
[[ 278.  210.  279.]
 [ 867. 1108. 1215.]
 [ 489.  605.  629.]]

numpy.linalg.matrix_power()

NumPyのnumpy.linalg.matrix_power()を使用すると、第一引数に指定した行列について、第二引数に指定した数の累乗を計算することができます。

対角行列を使用して計算した上記結果と一致するか、確認してみます。

#input
import numpy as np

np.random.seed(0)

A = np.random.randint(0,10,(3,3))
print("行列A:\n{}\n".format(A))

A_3 = np.linalg.matrix_power(A,3)

print("行列Aの3乗:\n{}".format(A_3))
#output
行列A:
[[5 0 3]
 [3 7 9]
 [3 5 2]]

行列Aの3乗:
[[ 278  210  279]
 [ 867 1108 1215]
 [ 489  605  629]]

対角行列を使用して計算した結果と一致しました。

SymPyによる行列の累乗

計算機代数システムSymPyを使用すると、行列の累乗の一般表式を出力することができます。

#input
import sympy

sympy.init_printing()

a,b,c,d = sympy.symbols('a,b,c,d')

A = sympy.Matrix([[a, b],
                  [c, d]])

A_4 = sympy.expand(A**4)

print(A_4[0])
print(A_4[1])
print(A_4[2])
print(A_4[3])
#output
a**4 + 3*a**2*b*c + 2*a*b*c*d + b**2*c**2 + b*c*d**2
a**3*b + a**2*b*d + 2*a*b**2*c + a*b*d**2 + 2*b**2*c*d + b*d**3
a**3*c + a**2*c*d + 2*a*b*c**2 + a*c*d**2 + 2*b*c**2*d + c*d**3
a**2*b*c + 2*a*b*c*d + b**2*c**2 + 3*b*c*d**2 + d**4

まとめ

この記事では、Pythonを使用した行列の累乗の計算方法について、ご説明しました。

本記事を参考に、ぜひ試してみて下さい。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました