#はじめに
行列には苦手意識があったが、行列を操作で考え、逆行列を確認し**"アッ"**としたのを記事にしました
(行列を普通にやった人には、当然すぎる内容なんでしょうね)
行列計算は真面目にやると面倒なので、計算機(Julia言語が早いの)でサクっと求めて確認します。
#操作は行列だ
具体的に4枚のトランプを考え、並びを状態ベクトル$\boldsymbol{v}$で表す。
$$
\boldsymbol{v}=
\begin{bmatrix}
A \\
K \
Q \
J
\end{bmatrix}
$$
3枚目を取り、一番上に乗せるシャッフル操作$\boldsymbol{S}$は
$$
\boldsymbol{S}=
\begin{bmatrix}
0 & 0 & 1 & 0 \\
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & 0 & 1
\end{bmatrix}
$$
と表せ、状態ベクトル$\boldsymbol{v}$にシャッフル操作を作用させると
$$
\boldsymbol{S}×\boldsymbol{v}=
\begin{bmatrix}
0 & 0 & 1 & 0 \\
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
A \\
K \
Q \
J
\end{bmatrix}
=\begin{bmatrix}
Q \
A \\
K \
J
\end{bmatrix}
$$
と表せ、シャッフルされた状態$\boldsymbol{v}'$が得られます。
#逆行列は元に戻す操作だ
ここでシャッフル操作$\boldsymbol{S}$の逆行列$\boldsymbol{S}^{-1}$を求めてみる。
Juliaで逆行列は^-1
もしくはinv関数
で簡単に計算できます。
julia> S=[0 0 1 0;
1 0 0 0;
0 1 0 0;
0 0 0 1]
julia> inv(S)
4×4 Array{Float64,2}:
0.0 1.0 0.0 -0.0
0.0 0.0 1.0 -0.0
1.0 0.0 0.0 -0.0
0.0 0.0 0.0 1.0
$$\boldsymbol{S}^{-1}=
\begin{bmatrix}
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \
1 & 0 & 0 & 0 \
0 & 0 & 0 & 1
\end{bmatrix}
$$
が得られました。
当然、$$\boldsymbol{S}^{-1}×\boldsymbol{v}'
=\boldsymbol{S}^{-1}×\boldsymbol{S}×\boldsymbol{v}
=\boldsymbol{E}×\boldsymbol{v}
=\boldsymbol{v}$$ですが、$\boldsymbol{S}^{-1}$に注目し、初期の$\boldsymbol{v}$に作用させれば
$$\boldsymbol{S}^{-1}×\boldsymbol{v}
=\begin{bmatrix}
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \
1 & 0 & 0 & 0 \
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
A \\
K \
Q \
J
\end{bmatrix}
=\begin{bmatrix}
K \
Q \\
A \
J
\end{bmatrix}$$
となり、一番上を取り3枚目に差し込む動作になっています。
これは先ほどのシャッフル操作$\boldsymbol{S}$を、「元に戻そうとする操作」 になるのが分かります。
-これを、ずっと理解しずに逆行列を凄く神秘的なものと放置してました( ;∀;)-
#累積とかも行列だ
ちょっと煽り感の見出しを続けてますが・・・
毎月の売上げベクトル$\boldsymbol{v_{売上}}$に作用して、各月までの累積額を求める様な行列$\boldsymbol{I_{累積}}$を作ると
$$
\boldsymbol{I_{累積}}×\boldsymbol{v_{売上}}=
\begin{bmatrix}
1 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 \
1 & 1 & 1 & 0 \
1 & 1 & 1 & 1
\end{bmatrix}
\begin{bmatrix}
売上^{(1月)} \
売上^{(2月)} \
売上^{(3月)} \
売上^{(4月)}
\end{bmatrix}=
\begin{bmatrix}
累積額^{(1月)}\\
累積額^{(1月+2月)}\\
累積額^{(1月+2月+3月)}\\
累積額^{(1月+2月+3月+4月)}
\end{bmatrix}
$$
左下三角が「1」の行列で表せます。
そして先ほど同様、逆行列を求めます。
julia> N=4
julia> I=[i ≥ j ? 1 : 0 for i in 1:N , j in 1:N] #Iの表記は単位行列と被り良くないけど
4×4 Array{Int64,2}:
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
julia> D=inv(I)
4×4 Array{Float64,2}:
1.0 0.0 0.0 0.0
-1.0 1.0 0.0 0.0
0.0 -1.0 1.0 0.0
0.0 0.0 -1.0 1.0
$$
\boldsymbol{D_{差分}}=\boldsymbol{I_{累積}}^{-1}=
\begin{bmatrix}
1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 \
0 & -1 & 1 & 0 \
0 & 0 & -1 & 1
\end{bmatrix}
$$
となり、先に小さく書いてしまってますが、$\boldsymbol{D_{差分}}$ は2月以降、当月と先月の差分を求める行列となり
また同様に$\boldsymbol{v_{売上}}$に作用させれば
$$
\boldsymbol{D_{差分}}×\boldsymbol{v_{売上}}=
\begin{bmatrix}
売上変動^{(1月-(0))} \
売上変動^{(2月-1月)} \
売上変動^{(3月-2月)} \
売上変動^{(4月-3月)}
\end{bmatrix}
$$
となります。
累積と差分の関係は、ほぼ積分と微分考えられます。
$\boldsymbol{I_{累積}}$**(積分)の逆操作(逆行列)は$\boldsymbol{D_{差分}}$(微分)**となっているわけです
#演算子は行列だ(微積)
先ほどの$\boldsymbol{I_{累積}}$ , $\boldsymbol{D_{差分}}$を$\int dx$ , ${d}/{dx}$ と捉えます。
今度は売上げでなく$f(x)=x^2$を離散化したベクトル$\boldsymbol{fx}$に作用させ、普通に微積をしてみましょう。
ひとまず、$\boldsymbol{x}$を $1,2, … ,8$ の範囲で計算してみます。
julia> using Plots,LaTeXStrings
julia> N=8
julia> x_range=1:N
julia> I=[i ≥ j ? 1 : 0 for i in x_range , j in x_range]
8×8 Array{Int64,2}:
1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0
1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0
1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1
julia> D=inv(I)
8×8 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
-1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 -1.0 1.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 -1.0 1.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 -1.0 1.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 -1.0 1.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 -1.0 1.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 -1.0 1.0
julia> fx=[x^2 for x in x_range]
julia> pyplot()
julia> plot(x_range,[fx , I*fx , D*fx],label=[L"x^2" L"\int dx (x^2)" L"{d}/{dx} (x^2)"],xlims=(0,9),ylims=(0,30),m=:circle,ms=5,legendfontsize=11)
おっ、それっぽいグラフです。
最後、plot関数
にfx , I*fx , D*fx
と一気に入れてしまいましたが、各作用の結果は
$$
\boldsymbol{fx}=\boldsymbol{(x^2)}=
\begin{bmatrix}
1 \\
4 \
9 \
16 \
25 \
36 \
49 \
64
\end{bmatrix} ,
\boldsymbol{I×fx}=\int dx(x^2)=\frac{x^3}{3}=
\begin{bmatrix}
1 \\
5 \
14 \
30 \
55 \
91 \
140 \
204
\end{bmatrix}
?\ ,
\boldsymbol{D×fx}=\frac{d}{dx}(x^2)=2x=
\begin{bmatrix}
1 \\
3 \
5 \
7 \
9 \
11 \
13 \
15
\end{bmatrix}
?
$$
ん、なんか変。
あー、累積・差分として計算はあってるが、今回離散化幅 ($dx$) を 1 としているので微積にはデカすぎました。
$dx$を小さくして再び計算しましょう。
julia> dx=2^-8
0.00390625
julia> x_range=dx:dx:N
julia> I=[i ≥ j ? 1 : 0 for i in x_range , j in x_range]
julia> D=inv(I)
julia> fx=[x^2 for x in x_range]
julia> plot(x_range,[fx , I*dx*fx , D/dx*fx , D^2/dx^2*fx],label=[L"x^2" L"\int dx (x^2)" L"{d}/{dx} (x^2)" L"{d^2}/{dx^2} (x^2)"],xlims=(0,8),ylims=(0,30),legendfontsize=11)
だいぶ細かく刻んだので、良さげではないでしょうか。ついでに2回微分も追加してます。
#見比べてまとめ
さて、先ほど $dx$ を考慮する際、plot
関数に
fx , I*dx*fx , D/dx*fx , D^2/dx^2*fx
と入れています。
…
$fx\ ,\ \int dx\ (fx)\ ,\ \frac{d}{dx}(fx)\ ,\ \frac{d^2}{dx^2}(fx)$ と完全一致です!
なので さっきの訂正、$\boldsymbol{I_{累積}}$⇒「$\int$」、$\boldsymbol{D_{差分}}$⇒「${d}$」でよくて
- 積分 ⇒ $\boldsymbol{I_{累積}}$ × $dx$ × $\boldsymbol{fx}$ ⇒ $\int dx (fx)$
- 微分 ⇒ $\boldsymbol{D_{差分}}$/ $dx$ × $\boldsymbol{fx}$ ⇒ $\frac{d}{dx} (fx)$
- 二階微分 ⇒ $\boldsymbol{D_{差分}^2}$/ $dx^2$ × $\boldsymbol{fx}$ ⇒ $\frac{d^2}{dx^2} (fx)$
演算子は行列だ よく出来てるね。
ありがとうございました。
※タイトルはEMANの物理学内の量子力学ページの記事タイトルからです。
記事読んでたが、俺 行列なんも分らんと思って調べててこうなった。量子力学でのエルミート行列とか今回関係ない。