どうも、木村(@kimu3_slime)です。
今回は、Julia(SymPy)で行列の核、像、線形空間の基底と次元を求める方法を紹介します。
準備
SymPyを使うので、持っていなければインストールしておきましょう。
1 2 | using Pkg Pkg.add("SymPy") |
準備として、以下のコードを実行しておきます。
1 | using SymPy |
行列の核、像、線形空間の基底と次元を求める方法
「行列.columnspace()」で行列の像(列空間 column space)の基底の集まりを求められます。
1 2 3 4 | B= Sym[1 2; 3 4] B.columnspace() B.columnspace()[1] B.columnspace()[2] |
1 2 3 | 2-element Vector{Matrix{Sym}}: [1; 3;;] [2; 4;;] |
\[ \begin{aligned}\left[ \begin{array}{r}1\\3\end{array}\right]\end{aligned} \]
\[ \begin{aligned}\left[ \begin{array}{r}2\\4\end{array}\right]\end{aligned} \]
像空間の結果は横向きの表示になっていて少しわかりにくいですが、各成分を参照すればきちんと表示されます。
columnspaceの結果が像空間の基底で、\((1,3),(2,4)\)が基底です。
「行列.nullspace」で核(ゼロ空間)の基底が求められます。
1 | B.nullspace() |
「Any[]」は結果が空であること、つまり核が空集合\(\ker B = \varnothing\)であることを意味しています。
lengthで要素の個数を数えることができます。基底の個数が線形空間の次元なので、これによって像と核の次元を求めてみましょう。
1 2 | length(B.columnspace()) length(B.nullspace()) |
\[ \begin{aligned}2\end{aligned} \]
\[ \begin{aligned}0\end{aligned} \]
回転行列について、文字を含んでいても同様の計算ができます。
1 2 3 4 | @vars x y z n α β R_α= Sym[cos(α) -sin(α); sin(α) cos(α)] R_α.columnspace() R_α.nullspace() |
\[ \begin{aligned}\left[ \begin{array}{rr}\cos{\left(α \right)}&- \sin{\left(α \right)}\\\sin{\left(α \right)}&\cos{\left(α \right)}\end{array}\right]\end{aligned} \]
次の4つのベクトルによって定まる行列の像、核を求めてみましょう。
\[ \begin{aligned}b_1,b_2,b_3,b_4 =\begin{pmatrix} 2\\ 0 \\-3 \\-4\end{pmatrix},\begin{pmatrix} 0\\ 3 \\1 \\ 2\end{pmatrix}, \begin{pmatrix} 1\\ 2 \\1 \\ 0 \end{pmatrix} , \begin{pmatrix} 0\\ -1 \\-4 \\ -2 \end{pmatrix}\end{aligned} \]
1 2 3 | F = Sym[2 0 1 0; 0 3 2 -1;-3 1 1 -4; -4 2 0 -2] F.columnspace() F.nullspace() |
この像は、4つのベクトルが生成する空間に等しいです。4つベクトルはありますが、その基底は3つ(3次元)です。
1 2 | length(F.columnspace()) length(F.nullspace()) |
\[ \begin{aligned}3\end{aligned} \]
\[ \begin{aligned}1\end{aligned} \]
一般論として、像の次元とランクは等しく\(\dim A(\mathbb{R}^n)= \operatorname{rank} A\)、像と核の次元の間には次元定理\(\dim A(\mathbb{R}^n)+\dim (\ker A)= n\)が成り立ちます。
今回の例で、計算して確かめてみましょう。
1 2 3 4 5 6 7 | F.rank() function nullity(A::Matrix{Sym}) return A.shape[2]-A.rank() end nullity(F) |
\[ \begin{aligned}3\end{aligned} \]
\[ \begin{aligned}1\end{aligned} \]
結果は確かに一致していますね。
次の行列によって定まる線形方程式\(Ax=0\)の解空間を求めてみましょう。
1 2 3 | A= Sym[2 0 1 0; 0 3 2 -1; -2 3 1 -1; 2 3 3 -1] A.nullspace() length(A.nullspace()) |
\[ \begin{aligned}\left[ \begin{array}{rrrr}2&0&1&0\\0&3&2&-1\\-2&3&1&-1\\2&3&3&-1\end{array}\right]\end{aligned} \]
\[ \begin{aligned}2\end{aligned} \]
解空間の基底は基本解と呼ばれますが、それが求められています。\(Ax=0\)を満たす0でない解が、2次元分あることがわかりますね。
以上、Julia(SymPy)で行列の核、像、線形空間の基底と次元を求める方法を紹介してきました。
ランクを求める方法と違って、基底が具体的に得られるのが嬉しいですね。
木村すらいむ(@kimu3_slime)でした。ではでは。
コロナ社 (2020-03-26T00:00:01Z)
¥7,353 (コレクター商品)
こちらもおすすめ
実数空間、線形結合、線形部分空間、次元とは何か:2次元を例に