Python – scipy.linalg.expm()で行列指数関数を計算する方法
scipy.linalgパッケージに含まれるexpm()関数は、Padé近似を用いて行列指数関数(matrix exponential)を計算するための関数です。Padé近似とは、指定された次数の有理関数によって関数を「最も良く」近似する手法であり、この手法では近似式の冪級数が、近似対象となる関数の冪級数と一致するように構成されます。
なお、行列指数関数とは e^A = Σ A^k / k! として定義される行列演算で、線形微分方程式の求解や制御理論など、さまざまな分野で利用されます。
構文
scipy.linalg.expm(x)
ここで、x は指数関数を適用する対象となる入力行列です。
例1
まず、以下の例を見てみましょう。
# 必要なライブラリをインポート
from scipy import linalg
import numpy as np
# 入力配列を定義
e = np.array([[100 , 5] , [78 , 36]])
print("Input Array :\n", e)
# 行列の指数関数を計算
m = linalg.expm(e)
# 計算結果を表示
print("Exponential of e: \n", m)
出力結果
上記のプログラムを実行すると、次のような出力が得られます。
Input Array : [[100 5] [ 78 36]] Exponential of e: [[6.74928440e+45 4.84840154e+44] [7.56350640e+45 5.43330432e+44]]
このように、要素の値が大きい行列に対してexpm()を適用すると、非常に大きな数値を持つ行列が返されることがわかります。
例2
続いて、別の例を見てみましょう。
# 必要なライブラリをインポート
from scipy import linalg
import numpy as np
# 入力配列を定義(3×3のゼロ行列)
k = np.zeros((3, 3))
print("Input Array :\n", k)
# 行列の指数関数を計算
n = linalg.expm(k)
# 計算結果を表示
print("Exponential of k: \n", n)
出力結果
このプログラムを実行すると、次のような出力が得られます。
Input Array : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] Exponential of k: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
すべての要素が0の行列に対してexpm()を適用すると、単位行列が返されます。これは数学的に e^0 = I(零行列の指数は単位行列)という性質と一致しており、計算が正しく行われていることを確認できます。
-
Python – scipy.interpolate.interp1dで1次元補間を行う方法
scipy.interpolateパッケージに含まれるinterp1d()関数は、1次元関数の補間(インターポレーション)を行うための機能です。xとyといった値の配列を受け取り、何らかの関数y = f(x)を近似したうえで、補間によって新しい点における値を求めることができます。データ points 間の値を滑らかに推定したい場合に非常に便利なツールです。構文scipy.interpolate.interp1d(x, y)ここで、xは実数値からなる1次元配列、yは実数値からなるN次元配列です。補間軸に沿ったyの長さは、xの長さと一致している必要があります。例1まず、次の例を見てみましょう。# 必
-
【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説
はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが