LoginSignup
6
1

More than 3 years have passed since last update.

演算子は行列だ(微積編)

Last updated at Posted at 2019-12-18

はじめに

行列には苦手意識があったが、行列を操作で考え、逆行列を確認し"アッ"としたのを記事にしました
(行列を普通にやった人には、当然すぎる内容なんでしょうね)

行列計算は真面目にやると面倒なので、計算機(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)

結果プロット
Figure_1.png

おっ、それっぽいグラフです。
最後、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)

結果プロット
Figure_2.png

だいぶ細かく刻んだので、良さげではないでしょうか。ついでに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の物理学内の量子力学ページの記事タイトルからです。
記事読んでたが、俺 行列なんも分らんと思って調べててこうなった。量子力学でのエルミート行列とか今回関係ない。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1