スポンサーリンク
行列の累乗は、Pythonで簡単に計算することができます。
本記事では、Pythonを使用した行列の累乗の計算方法について、詳しくご説明します。
行列の累乗
行列の累乗とは、同じ行列を\(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(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!
\まずは無料体験!/
スポンサーリンク