何度でも大前提まで戻っての再考を迫られるのが数理の世界の宿命…
可逆な行列(正則行列)、逆行列とは?例と同値な条件
回転行列とは? 導出と例、性質を紹介
置換行列とは?置換との関係、性質、転置・直交行列
今回の投稿では連立線形方程式(Simultaneous Linear Equations)の行列表現から出発して可逆行列(Invertible Matrix)=正則行列(Regular Matrix)への入り口くらい切り拓けたらと考えています。
#一次方程式(First-degree Polynomial Equation)/線型方程式(Linear Equitation)の概念からの再出発
1次方程式を行列で解くメリット・方法・条件について、幾何学的に見る
ごく簡単な線形方程式(Linear Equitation)$ax=b$は、$a=0$のとき解が定まりませんが、$a≠0$の時は$x=a^{−1}b$と解が定まります。
既存投稿の内容を対応させていきましょう。
【数理考古学】代数方程式(Algebraic Formula)について。
-
代数方程式の最も簡単な例はxの一次方程式(First-degree Polynomial Equation)ax+b=0である。
-
xの係数a≠0の時、定数項(Constant Term)を移項(Transposition)し、両辺をaで割って一次方程式の根の公式$x=-\frac{b}{a}$を得る。
-
係数a=0で、さらにb=0の時、方程式は不定(Indeterminate)といい、この時根は無数に存在する。b≠0の時は不能(Inconsistent)といい、この場合根は一つも存在しない。
実はこの段階においてもう符号の正負問題が浮上してくるのですね。その話は「近代代数学の出発点は複式簿記の概念の成立にあった」という歴史的エピソードまで遡ります。
【Python演算処理】行列演算の基本④大源流における記述統計学との密接な関連性?
例えば300円のコーヒーと350円の紅茶しかメニューが存在しない喫茶店において、1日の売り上げを知りたいとすれば、その日のコーヒーの注文回数をx杯、紅茶の注文回数をy杯と置いて「300x+350y」の計算が成立します。
\left[\begin{matrix}300 & 350 & c\end{matrix}\right]\left[\begin{matrix}x\\y\\-1\end{matrix}\right]=\left[\begin{matrix}- c + 300 x + 350 y\end{matrix}\right] \\
- c + 300 x + 350 y=0 \\
y=\frac{c}{350} - \frac{6 x}{7} \\
x=\frac{c}{300} - \frac{7 y}{6} \\
300 x + 350 y=c
全体像を構築しようとすると行列に「-1」なる成分を追加する必要が生じますが、これは複式簿記における「借方(左側)」と「貸方(右側)」の関係の定義に対応します。そう歴史上における複式簿記の導入とは実は経済分野における会計処理の代数計算化に他ならなかったのです!!
\left[\begin{matrix}a & b & c\end{matrix}\right]\left[\begin{matrix}x\\y\\-1\end{matrix}\right]=\left[\begin{matrix}a x + b y - c\end{matrix}\right] \\
a x + b y - c=0 \\
y=\left[ \frac{- a x + c}{b}\right] \\
x=\left[ \frac{- b y + c}{a}\right] \\
\left[ a x + b y\right]=c
便宜上、こうして一次方程式(First-degree Polynomial Equation)における反数問題(移行に際して符号が逆転する問題)を複式簿記的概念(行列における-1項の追加)によって克服した式を以降は線形方程式(Linear Equitation)と呼び分ける事にしましょう。その結果、関心範囲から反数-aの問題が除去され、逆数$a^{-1}$の問題だけが残る展開を迎えます。
連立線形方程式は、行列とベクトルによって以下の様に表すことができます。
- 連立線型方程式
①…\left\{\begin{array}{ll}
x−y=1\\
−2x+y=4
\end{array}
\right.
- 2つの式を2次元ベクトルにまとめ、その上で左辺の係数を行列として取り出した結果。
②…\begin{bmatrix}
1 & -1 \\
-2 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
1 \\
4
\end{bmatrix}
この表記は以下の様に一般化されます。
- n個連立させた線形方程式
\left\{
\begin{array}{ll}
a_{11}x_{1}+\cdots+a_{1n}x_{n}=b_{1}\\
\vdots\\
a_{k1}x_{1}+\cdots+a_{kn}x_{n}=b_{k}\\
\vdots\\
a_{n1}x_{1}+\cdots+a_{nn}x_{n}=b_{n}\\
\end{array}
\right.
- n×nのサイズの正方行列$x=(x_1,…,x_j…,x_n),b=(b_1,…,b_i…,x_n)$へと落とし込んで線形方程式Ax=bの形で表記する場合。Aのi行j列成分は$a_{ij}$と記される。
\begin{bmatrix}
a_{11} & \cdots & a_{1j} & \cdots & a_{1n}\\
\vdots & \ddots & & & \vdots \\
a_{i1} & & a_{ij} & & a_{in} \\
\vdots & & & \ddots & \vdots \\
a_{n1} & \cdots & a_{nj} & \cdots & a_{nn}
\end{bmatrix}
\begin{bmatrix}
x_1\\
\vdots \\
x_j\\
\vdots\\
x_n
\end{bmatrix}
=
\begin{bmatrix}
b_1\\
\vdots \\
b_i\\
\vdots\\
b_n
\end{bmatrix}
それでは実際に連立方程式①を解いてみましょう。
###代数的に解く。
2つの変数xとyに対する連立1次方程式
\left\{
\begin{array}{ll}
ax+by=e\\
cx+dy=f
\end{array}
\right.
これをpython(sympy)は以下の様に解きます。
import sympy as sp
sp.init_printing()
sp.var('x, y, a, b, c, d, e, f')
eq1=sp.Eq(a*x+b*y, e)
eq2=sp.Eq(c*x+d*y, f)
sp.init_printing()
display(sp.solve ([eq1, eq2], [x, y]) )
print(sp.latex(sp.solve ([eq1, eq2], [x, y])))
\left\{ x : \frac{- b f + d e}{a d - b c}, \ y : \frac{a f - c e}{a d - b c}\right\}
①の場合は
sp.var('x, y')
eq3=sp.Eq(x-y, 1)
eq4=sp.Eq(-2*x+y, 4)
sp.init_printing()
display(sp.solve ([eq3, eq4], [x, y]) )
print(sp.latex(sp.solve ([eq3, eq4], [x, y])))
\left\{ x : -5, \ y : -6\right\}
あるいは代入を用いて
import sympy as sp
sp.init_printing()
sp.var('x, y, a, b, c, d, e, f')
eq1=sp.Eq(a*x+b*y, e)
eq2=sp.Eq(c*x+d*y, f)
eq3=eq1.subs([(a,1),(b,-1),(e,1)])
eq4=eq2.subs([(c,-2),(d,1),(f,4)])
sp.init_printing()
display(eq3)
print(sp.latex(eq3))
display(eq4)
print(sp.latex(eq4))
display(sp.solve ([eq3, eq4], [x, y]) )
print(sp.latex(sp.solve ([eq3, eq4], [x, y])))
x - y = 1\\
- 2 x + y = 4\\
\left\{ x : -5, \ y : -6\right\}
何かコンピューターに丸投げする時独特のブラックボックス感に満ちていますが、今はとりあえず先に進む事にします。
###幾何学的に解く。
連立方程式を解くことは、幾何学的には直線や平面(そして超平面)の交点を求める事に該当します。これを一次結合ベクトル表現(Linear Combination Vector Expression=直交基底ベクトルごとのスカラー倍の総和)で表すと以下の様になります。
x-y=1の一次結合ベクトル表現
y=0の時、x=1 \to \begin{pmatrix}
1 \\
0
\end{pmatrix}=1×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=-1 \to \begin{pmatrix}
0 \\
-1
\end{pmatrix}=-1×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は-\begin{pmatrix}
1 \\
0
\end{pmatrix}+\begin{pmatrix}
0 \\
1
\end{pmatrix}
-2x+y=4の一次結合ベクトル表現
y=0の時、x=-2 \to \begin{pmatrix}
-2 \\
0
\end{pmatrix}=-2×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=4 \to \begin{pmatrix}
0 \\
4
\end{pmatrix}=4×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は-2\begin{pmatrix}
1 \\
0
\end{pmatrix}+4\begin{pmatrix}
0 \\
1
\end{pmatrix}
すなわち
両ベクトルの延長線上に現れる交点(Intersection) \to -5\begin{pmatrix}
1 \\
0
\end{pmatrix}-6\begin{pmatrix}
0 \\
1
\end{pmatrix}
import matplotlib.pyplot as plt
# 等差数列を生成
X = np.array([-10,10])
Y1=X-1
Y2=4+2*X
plt.style.use('default')
fig = plt.figure()
# 可視化
plt.plot(X, Y1,color="blue", label="x-y=1")
plt.plot(X, Y2,color="red", label="-2x+y=4")
plt.plot(-5, -6,color="green" , marker="o",label="Intersection")
plt.plot(1, 0,color="blue", marker="o")
plt.plot(0, -1,color="blue", marker="o")
plt.plot(-2, 0,color="red", marker="o")
plt.plot(0, 4,color="red", marker="o")
plt.hlines(0,-10,10,color="black")
plt.vlines(0,-10,10,color="black")
plt.ylim([-7,7])
plt.xlim([-7,7])
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Simultaneous Linear Equations")
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.text(1, 0," (1,0)",color="blue", size=16)
ax.text(0, -1," (0,-1)",color="blue", size=16)
ax.text(-2, 0, " (-2,0)",color="red", size=16)
ax.text(0, 4," (0,4)",color="red", size=16)
ax.text(-5, -6," (-5,-6)",color="green", size=16)
ax.legend(loc='upper left')
plt.show()
- この様に元方程式それぞれのx=0の場合とy=0の場合を求め、それぞれをさらに「それぞれの基底ベクトルのスカラー倍」と表現してその総和を求める(一次結合表現として完成させる)操作の結果は、行列演算でいう対角行列(Diagonal Matrix)となり、単位行列に対する各要素のスカラー倍状況を表す。
単位行列\begin{bmatrix}
1&0 \\
0&1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
に対し\\
方程式x-y=1の一次結合表現\\
=対角行列\begin{bmatrix}
1&0 \\
0&-1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}\\
方程式-2x+y=4の一次結合表現\\
=対角行列\begin{bmatrix}
-2&0 \\
0&4
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}\\
新たに設定される連立線型方程式\\
=\begin{bmatrix}
1&-1 \\
-2&4
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=\begin{bmatrix}
1 \\
-14
\end{bmatrix}
かかる「定規を使った作図でわかる」幾何学的方式(Geometric Method)を代数的方法(Algebraic Method)に置き換える場合、まず最初の式をxの式に変形して次の式に代入する形でxを消去。傾きのないyについての定数式(Constant Expression)y=-6を得ます。
x-y=1 \to x=1+y\\
-2x+y=4 \to -2(1+y)+y=4\\
\to -2-2y+y=4 \to -2-y=4\\
\to -y=4+2 \to y=-6
import matplotlib.pyplot as plt
# 等差数列を生成
X = np.array([-10,10])
Y1=X-1
Y2=X*0-6
plt.style.use('default')
fig = plt.figure()
# 可視化
plt.plot(X, Y1,color="blue", label="x-y=1")
plt.plot(X, Y2,color="red", label="y=-6")
plt.plot(-5, -6,color="green" , marker="o",label="Intersection")
plt.plot(1, 0,color="blue", marker="o")
plt.plot(0, -1,color="blue", marker="o")
plt.plot(0, -6,color="red", marker="o")
plt.hlines(0,-10,10,color="black")
plt.vlines(0,-10,10,color="black")
plt.ylim([-7,7])
plt.xlim([-7,7])
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Simultaneous Linear Equations")
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.text(1, 0," (1,0)",color="blue", size=16)
ax.text(0, -1," (0,-1)",color="blue", size=16)
ax.text(-5, -6," (-5,-6)",color="green", size=16)
ax.text(0, -6," (0,-6)",color="red", size=16)
ax.legend(loc='upper left')
plt.show()
この定数式y=-6を最初の式に代入すると同様にxについて傾きのない定数式x=-5が得られ、連立線型方程式の解=2式の交点の一次結合ベクトル表現へと到達するのです。
x-y=1 \to x-(-6)=1\\
\to x+6=1 \to x=1-6\\
\to x=-5\\
import matplotlib.pyplot as plt
# 等差数列を生成
X = np.array([-10,10])
Y1=X*0-5
Y2=X*0-6
plt.style.use('default')
fig = plt.figure()
# 可視化
plt.plot(Y1, X,color="blue", label="x=5")
plt.plot(X, Y2,color="red", label="y=-6")
plt.plot(-5, -6,color="green" , marker="o",label="Intersection")
plt.plot(-5, 0,color="blue", marker="o")
plt.plot(0, -6,color="red", marker="o")
plt.hlines(0,-10,10,color="black")
plt.vlines(0,-10,10,color="black")
plt.ylim([-7,7])
plt.xlim([-7,7])
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Simultaneous Linear Equations")
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.text(-5, 0," (-5,0)",color="blue", size=16)
ax.text(-5, -6," (-5,-6)",color="green", size=16)
ax.text(0, -6," (0,-6)",color="red", size=16)
ax.legend(loc='upper right')
plt.show()
高校生時代まではこちらの解き方しか習いません。
###行列演算の場合
こちらは式②より出発します。
②…\begin{bmatrix}
1 & -1 \\
-2 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
1 \\
4
\end{bmatrix}
解き方は以下。
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
e \\
f
\end{bmatrix}の時\\
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}^{-1}
\begin{bmatrix}
e \\
f
\end{bmatrix}
逆行列(Inverse Matrix)$A^{-1}$には$AA^{-1}=I$(Identity Matrix=単位行列。任意の元と掛け合わせて値が変わらない)という特徴があり、式自体はそれを用いて単純に移項してるだけです。ただし逆行列の算出過程自体はかなり厄介だったりします。
import sympy
sympy.init_printing()
sympy.var('a, b, c, di')
A2 = sympy.Matrix([
[a, b],
[c,d]
])
sp.init_printing()
display(A2)
display(sympy.cancel(A2**(-1)))
print(sp.latex(A2)+"^{-1}="+sp.latex(sympy.cancel(A2**(-1))))
\left[\begin{matrix}a & b\\c & d\end{matrix}\right]^{-1}=\left[\begin{matrix}\frac{d}{a d - b c} & - \frac{b}{a d - b c}\\- \frac{c}{a d - b c} & \frac{a}{a d - b c}\end{matrix}\right]
ここで分母となっているad−bcは行列式(.det=determinant)と呼ばれます。
行列式 - Wikipedia
実2次正方行列X=\begin{bmatrix}a&b\\c&d\end{bmatrix}\\
Xの平面上における線型変換\begin{bmatrix}x\\y\end{bmatrix}}\mapsto {\begin{bmatrix}ax+by\\cx+dy\end{bmatrix}
この時、2つの平面ベクトル$u=(u_0,u_1),v=(v_0, v_1)$が張る「向きも込めた」平行四辺形の面積$A(u,v)=u_0 v_1-u_1 v_0$}が$A(X_u,X_v)=(ad−bc)A(u,v)$に対応するが、それは実2次正方行列Xの定める線型変換によって平面内の図形の面積が(ad−bc)倍されるとも解釈可能である。
行列式が0だったりマイナスだったりするときの話
実際に計算してみるとpython(sympy)に代数的方法で解かせた場合と一致します。
import sympy
sympy.init_printing()
sympy.var('a, b, c, d,e,f,x,y')
A = sympy.Matrix([
[a, b],
[c,d]
])
Y = sympy.Matrix([
[e],
[f]
])
X = sympy.Matrix([
[x],
[y]
])
eq1=sp.Eq(X,A**(-1)*Y)
eq2=eq1.subs([(a,1),(b,-1),(c,-2),(d,1),(e,1),(f,4)])
sp.init_printing()
display(eq1)
print(sp.latex(eq1))
display(eq2)
print(sp.latex(eq2))
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{b f}{a d - b c} + \frac{d e}{a d - b c}\\\frac{a f}{a d - b c} - \frac{c e}{a d - b c}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{-1×4}{1×1-(-1)×(-2)} + \frac{1×1}{1×1-(-1)×(-2)}\\\frac{1×4}{1×1-(-1)×(-2)} - \frac{-2×1}{1×1-(-1)×(-2)}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{-4}{-1} + \frac{1}{-1}\\\frac{4}{-1} - \frac{-2}{-1}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}-5\\-6\end{matrix}\right]
というより、今から見返すとpython(sympy)による計算途中に現れる式がまさにこれでした。両者は最初から同じ内容だったのです。ちなみに「一次結合を経た幾何学的方法に基づく計算過程」は以下の形で検算されます。
import sympy
sympy.init_printing()
sympy.var('a, b, c, d,e,f,x,y')
A = sympy.Matrix([
[a, b],
[c,d]
])
Y = sympy.Matrix([
[e],
[f]
])
X = sympy.Matrix([
[x],
[y]
])
eq1=sp.Eq(X,A**(-1)*Y)
eq2=eq1.subs([(a,1),(b,-1),(c,-2),(d,4),(e,1),(f,-14)])
sp.init_printing()
display(eq1)
print(sp.latex(eq1))
display(eq2)
print(sp.latex(eq2))
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{b f}{a d - b c} + \frac{d e}{a d - b c}\\\frac{a f}{a d - b c} - \frac{c e}{a d - b c}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{-1×-14}{1×4-(-1)×(-2)} + \frac{4×1}{1×4-(-1)×(-2)}\\\frac{1×-14}{1×4-(-1)×(-2)} - \frac{-2×1}{1×4-(-1)×(-2)}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}- \frac{14}{2} + \frac{4}{2}\\\frac{-14}{2} - \frac{-2}{2}\end{matrix}\right]\\
\left[\begin{matrix}x\\y\end{matrix}\right] = \left[\begin{matrix}-5\\-6\end{matrix}\right]
通り道こそ随分違って見えますが、計算結果はあくまで同じなのですね。
#行列式(.det=determinant)による不能(Inconsistent)と不定(Indeterminate)の概念の再定義。
冒頭の話に戻ります。
【数理考古学】代数方程式(Algebraic Formula)について。
一次方程式ax+b=0において、係数a=0かつb=0の時を不定(Indeterminate)といい、この時根は無数に存在する。またb≠0の時を不能(Inconsistent)といい、この場合根は一つも存在しない。
線形代数の世界ではこれがこういう言い換えられるのです。
1次方程式を行列で解くメリット・方法・条件について、幾何学的に見る
線形代数の扱う線形方程式$Ax=b$を$x=A^{−1}b$で解く場合、A≠0だからといって、解が必ずしも一意に存在する訳ではない。
###不定(Indeterminate)=解が無数に存在する場合
以下の連立線型方程式に注目します。
- 連立線型方程式
①…\left\{\begin{array}{ll}
x−y=1\\
0x+0y=0
\end{array}
\right.
- その行列表現。
②…\begin{bmatrix}
1 & -1 \\
0 & 0
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
1 \\
0
\end{bmatrix}
x-y=1の一次結合ベクトル表現
y=0の時、x=1 \to \begin{pmatrix}
1 \\
0
\end{pmatrix}=1×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=-1 \to \begin{pmatrix}
0 \\
-1
\end{pmatrix}=-1×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は-\begin{pmatrix}
1 \\
0
\end{pmatrix}+\begin{pmatrix}
0 \\
1
\end{pmatrix}
0x+0y=0の一次結合ベクトル表現
y=0の時、x=0 \to \begin{pmatrix}
0 \\
0
\end{pmatrix}=-0×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=0 \to \begin{pmatrix}
0 \\
0
\end{pmatrix}=0×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は0\begin{pmatrix}
1 \\
0
\end{pmatrix}+0\begin{pmatrix}
0 \\
1
\end{pmatrix}
import matplotlib.pyplot as plt
# 等差数列を生成
X = np.array([-10,10])
Y1=X-1
plt.style.use('default')
fig = plt.figure()
# 可視化
plt.plot(X, Y1,color="blue", label="x-y=1")
plt.plot(X, Y1,color="green", label="Intersection")
plt.plot(1, 0,color="blue", marker="o")
plt.plot(0, -1,color="blue", marker="o")
plt.hlines(0,-10,10,color="black")
plt.vlines(0,-10,10,color="black")
plt.ylim([-7,7])
plt.xlim([-7,7])
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Simultaneous Linear Equations")
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.text(1, 0," (1,0)",color="blue", size=16)
ax.text(0, -1," (0,-1)",color="blue", size=16)
ax.legend(loc='upper left')
plt.show()
- python(sympy)に計算させるとx-y=1の解(x:y+1)と表示される。
sp.var('x, y')
eq3=sp.Eq(x-y, 1)
eq4=sp.Eq(0*x+0*y,0)
sp.init_printing()
display(sp.solve ([eq3, eq4], [x, y]) )
print(sp.latex(sp.solve ([eq3, eq4], [x, y])))
\left\{ x : y + 1\right\}
- 代数的に解こうとしても0=0なるトートロジー(Tautology=同義反復状態)にしか到達し得ない。
x-y=1 \to x=y+1\\
代入して\\
0x+0y=0 \to 0(y+1)+0y=0\\
0=0
あるいは
x-y=1 \to -y=1-x \to y=x-1\\
代入して\\
0x+0y=0 \to 0x+0(x-1)=0\\
0=0
行列式を計算すると0となる。
import sympy as sp
sp.var('a, b, c, d')
A = sp.Matrix([
[a, b],
[c,d]
])
A1=A.subs([(a,1),(b,-1),(c,0),(d,0)])
sp.init_printing()
display(A)
print(sp.latex(A))
display(A1)
print(sp.latex(A1))
display(A.det())
print(sp.latex(A)+".det="+sp.latex(A.det()))
display(A1.det())
print(sp.latex(A1)+".det="+sp.latex(A1.det()))
\left[\begin{matrix}a & b\\c & d\end{matrix}\right].det=a d - b c
\\
\left[\begin{matrix}1 & -1\\0 & 0\end{matrix}\right].det=1×0-(-1)×0=0-0 =0
1次方程式を行列で解くメリット・方法・条件について、幾何学的に見る
2つ目の式が実質的に何の条件も課していない(退化している)ケースである。x−y=1を満たすx,y、例えば(2,1),(3,2)などが全て解となる。
-
ベクトル表現においては、しばしば「零ベクトルの場合を除く」という但し書きがつくが、これがまさにその「零ベクトル状態」なのである。
零ベクトル - Wikipedia
0(ゼロ)と0ベクトルの違いを説明するよ、ついでに0行列も。 -
関数的に表現すると任意の実数を独立変数(Independent Variable)/定義域(Domain)に取る関数f(x)=x-1の従属変数(Dependent Variable)/従属変数(Dependent Variable)が解となる状態を指す($(y|y=f(x),\forall x \in \mathbb{R}$)。
【Python演算処理】冪算と乗除算の関係について。 -
幾何学的に表現すると、図の様に一方の直線が指定されない為に直線x−y=1上の全ての点が解となる状態を指す。
1次方程式を行列で解くメリット・方法・条件について、幾何学的に見る
一般に、「ある行列の行ベクトル・列ベクトルのうち、線形独立なものの最大個数」をその行列のランクと呼びます。線形方程式に解が存在するかどうかを調べるためには、係数行列と、定数項を含む行列(拡大係数行列)のランクを比較します。ランクが等しければ存在し、そうでないなら存在しません。
行列の階数 - Wikipedia
行列のランクの意味(8通りの同値な定義) | 高校数学の美しい物語
いわゆる「二次形式行列」も次元縮退を含むと考えれれています。
【Python演算処理】行列演算の基本③パスカルの三角形から二次形式へ
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}1 & 1\\1 & 1\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}\left(a + b\right)^{2}\end{matrix}\right]\\
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}1 & -1\\-1 & 1\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}\left(a - b\right)^{2}\end{matrix}\right]\\
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}-1 & 1\\1 & -1\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}- \left(a - b\right)^{2}\end{matrix}\right]\\
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}-1 & -1\\-1 & -1\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}- \left(a + b\right)^{2}\end{matrix}\right]\\
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}a^{2} + b^{2}\end{matrix}\right]\\
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}0 & 1\\1 & 0\end{matrix}\right]\left[\begin{matrix}a\\b\end{matrix}\right]=\left[\begin{matrix}2 a b\end{matrix}\right]\\
また次元縮退自体は、相関係数が1ないしは-1となる場面でも起こります(分布範囲が楕円から線上に縮退)。
【Python演算処理】行列演算の基本④大源流における記述統計学との密接な関連性?
###不能(Inconsistent)=解なしの場合
以下の連立線型方程式に注目します。
- 連立線型方程式
①…\left\{\begin{array}{ll}
x−y=1\\
−2x+2y=-4
\end{array}
\right.
- その行列表現。
②…\begin{bmatrix}
1 & -1 \\
-2 & 2
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
1 \\
-4
\end{bmatrix}
x-y=1の一次結合ベクトル表現
y=0の時、x=1 \to \begin{pmatrix}
1 \\
0
\end{pmatrix}=1×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=-1 \to \begin{pmatrix}
0 \\
-1
\end{pmatrix}=-1×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は-\begin{pmatrix}
1 \\
0
\end{pmatrix}+\begin{pmatrix}
0 \\
1
\end{pmatrix}
-2x+-2y=-4の一次結合ベクトル表現
y=0の時、x=-2 \to \begin{pmatrix}
-2 \\
0
\end{pmatrix}=-2×直交基底ベクトル\begin{pmatrix}
1 \\
0
\end{pmatrix}\\
x=0の時、y=2 \to \begin{pmatrix}
0 \\
2
\end{pmatrix}=2×直交基底ベクトル\begin{pmatrix}
0 \\
1
\end{pmatrix}\\
よってその一次結合ベクトル表現は-2\begin{pmatrix}
1 \\
0
\end{pmatrix}+2\begin{pmatrix}
0 \\
1
\end{pmatrix}
import matplotlib.pyplot as plt
# 等差数列を生成
X = np.array([-10,10])
Y1=X-1
Y2=2+X
plt.style.use('default')
fig = plt.figure()
# 可視化
plt.plot(X, Y1,color="blue", label="x-y=1")
plt.plot(X, Y2,color="red", label="-2x+2y=-4")
plt.plot(1, 0,color="blue", marker="o")
plt.plot(0, -1,color="blue", marker="o")
plt.plot(-2, 0,color="red", marker="o")
plt.plot(0, 2,color="red", marker="o")
plt.hlines(0,-10,10,color="black")
plt.vlines(0,-10,10,color="black")
plt.ylim([-7,7])
plt.xlim([-7,7])
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Simultaneous Linear Equations")
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.text(1, 0," (1,0)",color="blue", size=16)
ax.text(0, -1," (0,-1)",color="blue", size=16)
ax.text(-2, 0, " (-2,0)",color="red", size=16)
ax.text(0, 2," (0,4)",color="red", size=16)
ax.legend(loc='upper left')
plt.show()
- python(sympy)に計算させると解なし([])と出る。
sp.var('x, y')
eq3=sp.Eq(x-y, 1)
eq4=sp.Eq(-2*x+2*y,- 4)
sp.init_printing()
display(sp.solve ([eq3, eq4], [x, y]) )
print(sp.latex(sp.solve ([eq3, eq4], [x, y])))
\left[ \right]
- 代数的に解こうとすると矛盾に直面する。
x-y=1 \to x=y+1\\
代入して\\
-2x+2y=-4 \to -2(y+1)+2y=-4\\
\to -2y-2+2y=-4 \to -2y+2y=-4+2\\
0=-2
あるいは
x-y=1 \to -y=1-x \to y=x-1\\
代入して\\
-2x+2y=-4 \to -2x+2(x-1)=-4\\
\to -2x+2x-2=-4 \to -2x+2x=-4+2\\
0=-2
行列式を計算すると0となる。
import sympy as sp
sp.var('a, b, c, d')
A = sp.Matrix([
[a, b],
[c,d]
])
A1=A.subs([(a,1),(b,-1),(c,-2),(d,2)])
sp.init_printing()
display(A)
print(sp.latex(A))
display(A1)
print(sp.latex(A1))
display(A.det())
print(sp.latex(A)+".det="+sp.latex(A.det()))
display(A1.det())
print(sp.latex(A1)+".det="+sp.latex(A1.det()))
\left[\begin{matrix}a & b\\c & d\end{matrix}\right].det=a d - b c
\\
\left[\begin{matrix}1 & -1\\-2 & 2\end{matrix}\right].det=1×2-(-1)×(-2)=2-2 =0
要するに両ベクトルは互いに「平行」なのでどこまで延長線を伸ばしても交わらない訳です。
- 関数的に表現すると傾き(Slope=勾配/Gradient。線形方程式y=ax+bのa)の大きさは一致するが切片(Intercept。線形方程式y=ax+bのb)の大きさが一致しない状態を指す。
【Python演算処理】環論に立脚した全体像再構築②同値関係の再習
m=\frac {\Delta y}{\Delta x}
-
曲線上の微分可能な1点に対しても、傾斜の具合を表す数値(微分係数)が傾きの考え方により定義できる。
【Python演算処理】微分の概念を高校数学段階からグレードアップ? -
増加量とは差の事でもあるので直線上の2点を任意に取り、それらを$(x_1,y_1),(x_2,y_2)$とする形でも定義可能である。
m={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}}
- また、同値な定義として、傾きmは傾斜角をθとして以下の様に書く事も出来る。
m=\tan θ=\frac {\sin θ}{\cos θ}
これらの等式が零除算となる事から鉛直線(y軸に平行な直線)の傾きは自明の場合(Trival Case)として定義不可能です。その一方で一般的な用語として水平は「傾いている」と言われないものの、数学において「傾き0」と定義され水平も傾きに含みます。その一方で並列的に用いられる傾斜角(Tilt Angle)の概念上、鉛直線の角度を90度ないしは$\frac{π}{2}$ラジアンで規定します。また基底や直交の概念との連続性について触れざるを得なくなる場面も存在します。
座標平面上の曲線などのグラフと座標軸の交点の事で、x軸とのそれをx切片、y軸とのそれをy切片と呼ぶ。
- x切片のx座標をa、y切片のy座標をbとすると、x軸との交点の座標は(a,0)、y軸との交点の座標は(0, b)となる。特に一次関数においてはこのaおよびbをそれぞれx切片、y切片に直接対応させる。
- x切片aは与えられた関数の根、y切片bは関数のx=0における値に対応する。
x切片がa、y切片がbの一次関数の方程式は以下で与えられます。
\frac{x}{a}+\frac{y}{b}=1
この方程式は、x=0の時y=b、y=0の時 x=aとなって定義を満足させるのです。
改めて以下に目を向けてみましょう。
連立線型方程式\left\{\begin{array}{ll}
x−y=1\\
−2x+2y=-4
\end{array}
\right.
- 式 x−y=1をy=x-1に変形させるとその傾きは1、(x)切片は-1となる。
- 式 -2x+2y=4をy=x+2に変形させるとその傾きは1、(x)切片は2となる。
まさしく「傾きは同じだが切片が異なる」平行条件を満たしている典型例という訳ですね。
#そして行列式(Determinant)と正則行列(Regular Matrix)…
「逆行列が存在しない」と「行列式が0」は同値なので、ある行列が与えられたときに、その行列式が0かどうか調べさえすれば、その行列に逆行列が存在するかどうか分かります。そして逆行列の存在する行列、すなわち行列式が0でない行列のことを正則行列といいます。
この人の投稿で興味深いのは、線形代数についての説明をアフィン群(Affine Group)における線型変換(回転、拡大縮小、剪断、平行移動)の紹介から始める辺り。幅広く活動されてるだけあって「3Dアニメーションで人を呼ぶ」みたいなエンタメ性もかなり高く実に勉強になるのです。
【Python画像処理】アフィン変換を試す。
【Python画像処理】スプライト・アニメーションを試す。
線形代数の知識ゼロから始めて行列式「だけ」理解する - アジマティクス
- 座標変換のうち、直線と原点を変えないものを線形変換という。
- 線形変換は、基底ベクトルがそれぞれどう変化するかだけで記述できる。
- 基底ベクトルがそれぞれどう変化するかは、一つの行列を使ってまとめて記述できる。そして行列とは線形変換であるといってよい。
- 行列(≒線形変換)からは、「その変換によって座標全体がどれくらい伸び縮みするか」という値を取り出すことができる。その値こそが行列式である。
この辺りの「魅せる」まとめ方も切れ味が違いますね。
行列式の計算結果がマイナスになってしまう行列があります。
import sympy as sp
sp.var('a, b, c, d')
A = sp.Matrix([
[a, b],
[c,d]
])
A1=A.subs([(a,1),(b,2),(c,2),(d,-1)])
sp.init_printing()
display(A)
print(sp.latex(A))
display(A1)
print(sp.latex(A1))
display(A.det())
print(sp.latex(A)+".det="+sp.latex(A.det()))
display(A1.det())
print(sp.latex(A1)+".det="+sp.latex(A1.det()))
\left[\begin{matrix}a & b\\c & d\end{matrix}\right].det=a d - b c\\
\left[\begin{matrix}1 & 2\\2 & -1\end{matrix}\right].det=-5
行列式って面積とか倍率とかの話だったはずなのにマイナスってどういうこと?実はこの符号にも、意味を見出すことができるのです。要するに座標が裏返ります。
- ここで出てきた値は絶対値を取ると面積そのものとなる。つまり行列式はその値で「座標全体がどれだけ伸び縮みするか」に加えその符号によって「座標が裏返っているかどうか」を表現しているといえる。
- 行列の中で任意の2列を入れ替えると、必ず「裏返るかどうか」が変わることが知られている。これは2×2行列で言うなら、基底ベクトルの$e_x=(1,0)$と$e_y=(0,1)$の「行き先」を入れ替えるのと同じである。
- 「なにか変換を施すと符号だけ変わる」という性質は「反対称性」と呼ばれており、行列式では列の交換に対して反対称性が成り立っている、ということになる(もっと言うと、行の交換に対しても)。
群成立に逆元の概念が、環成立に指数・対数写像の概念が必須である様に、可逆行列(Invertible Matrix)=正則行列(Regular Matrix)の成立には「逆行列がある事」が必須で、その有無を判定するのが行列式という位置付け。
正方行列(行数と列数が同じ行列)に対して定義される量で、歴史的には行列が表す一次方程式の可解性を判定する指標として導入された。行列の可逆性を判定する指標として線型代数学における最も重要な指標の一つと見なされている。
- 幾何的には線型空間またはより一般の有限生成自由加群上の自己準同型に対して定義され、線型変換に対して線形空間の拡大率ということができる。
- 実2次正方行列Xに対してX.det:=ad−bcを対応させると、det(XY)=(det X)(det Y) であることや、X.det>0であるときXの定める変換が図形の向きを保ち、反対にX.det< 0であるとき図形の向きは反転させられることが分かる。
- またdetの乗法性から Xが可逆ならばX.detは逆数を持つ数とされる。反対にXが退化した行列(つまり X の定める変換の像が一次元の部分空間)になる場合にはすべての図形の変換後の面積が0になることからX.det=0 となる。こうして「正方行列Xが正則であること」と「Xの行列式が可逆であること」は同値であることが分かる。
- 同様にして一般の次数の正方行列Xに対しXの定める線型変換が図形の体積を何倍にしているかという量をXの行列式として定義することができる。これは行列の成分を変数とする多項式の形でかけ、二次の場合と同様にこれは正則性など正方行列の重要な性質に対する指標を与えている。
- 一次方程式系が与えられるとき、方程式の係数行列に対してその行列式の値を調べることにより、方程式系の根の状態をある程度知ることができる。
行列式の基本的な性質として以下が成り立つ。
- $\det(E)=1$
- $\det(AB)=\det(A)\det(B)$
- $\det(A^{-1})=\det(A)^{-1}$
- $\det({}^{T}A)=\det(A)$
- $\det({\overline {A}})={\overline {\det(A)}}$
転置の性質
ある行列の転置行列の行列式の値はもとの行列式の値と変わらない。
行列式の行または列の入れ替えの性質
行列式の2つの行(または列)を入れ替えると、行列式の値は符号だけ変わる。
定数倍の性質
行列式の1つの行(または列)の各要素に一定の数cをかけた行列式の値は、もとの行列式の値のc倍になる。
同じ行があるときの性質
行列式の2つの行(または列)が行列式の一致する行列式なら、その行列式の値は0になる。
行列式の和の性質
行列式の1つの行(または列)の各要素が2つの数の和であるならば、その行(または列)を一方の数のみで置き換えた行列と、他方のみで置き換えた行列式との和になる。
行列式の計算則
行列式の1つの行(または列)の各要素に一定の数cをかけて他の行(または列)に加えても、行列式の値は変わらない。
行列の積の行列式
n次の正方行列A,Bに関して|AB|=|A||B|が成り立つ。
固有値との関係
行列 A の固有値を λi (i = 1, …, n) と置くと以下となる。
{\displaystyle \det(A)=\textstyle \prod \limits _{k=1}^{n}\lambda _{k}}
このことは、Aを三角化すると、対角成分に固有値が並ぶこと、すなわち以下のの両辺のdetを取ることで得られる。
{\displaystyle P^{-1}AP={\begin{bmatrix}\lambda _{1}&&&&*\\&\lambda _{2}&&&\\&&\ddots &&\\&&&\lambda _{n-1}&\\&&&&\lambda _{n}\end{bmatrix}}}
行列の通常の積に関する逆元を持つ正方行列の事で、この逆元を元の正方行列の逆行列という。ある体上の同じサイズの正則行列の全体は一般線型群と呼ばれる群を成す。多項式の根として定められる部分群は線形代数群あるいは行列群と呼ばれる代数群の一種で、その表現論が代数的整数論などに広い応用を持つ幾何学的対象である。
- 呼称が多数存在する。正則行列(Regular Matrix)、非特異行列(Non-Singular Matrix)、可逆行列(invertible matrix)など。
例えば、以下の複素数体上の二次正方行列が正則行列であるのはad−bc≠0が成立するとき、かつ、そのときに限る。
{\displaystyle A={\begin{bmatrix}a&b\\c&d\end{bmatrix}}}
このとき逆行列は以下の形で与えられる。
{\displaystyle A^{-1}={\frac {1}{ad-bc}}{\begin{bmatrix}d&-b\\-c&a\end{bmatrix}}}
より厳密な定義は以下によって与えられる:「n次単位行列を$E_n$やEで表す。環の元を成分にもつn次正方行列Aに対し、AB=E=BAを満たすn次正方行列Bが存在する時、Aはn次正則行列、あるいは単に正則であるという」。
- Aが正則ならば上の性質を満たすBは一意に定まる。これをAの逆行列(Inverse Matrix)と呼び、$A^{−1}$と表す。
- Aが正方行列でなくとも正則性は次のように定義できる:「m×n行列Aに対し、$AB=E_m$ かつ$BA=E_n$を満たすn×m行列Bが存在するとき、Aを正則という」。 しかし、このとき以下よりm=nとなるので、結局正則行列は正方行列なのである。
\max\{m,n\}=\max\{\operatorname {rank} E_{m},\operatorname {rank} E_{n}\}\\
=\max\{\operatorname {rank} AB,\operatorname {rank} BA\}\\
\leq \operatorname {rank} A\leq \min\{m,n\}
体の元を成分にもつn次正方行列Aに対し以下は同値である。
群・環・体
- Aは正則行列である。
- AB=単位元Eとなるn次正方行列Bが存在する。
- BA=単位元Eとなるn次正方行列Bが存在する。
- Aの階数がnである。
- Aは左基本変形(行操作)のみによって単位行列に変形できる。
- Aは右基本変形(列操作)のみによって単位行列に変形できる。
- 一次方程式Ax=0が自明な解しかもたない(自明な解のみ係数行列の列が線形独立を果たし、かつ自明解以外の解を持つ場合、係数行列の行列式が0となる)。
同次連立一次方程式と自明な解 - Aの行列式が0ではない。
- Aの列ベクトルの族が線型独立である。
- Aの行ベクトルの族が線型独立である。
- Aの固有値がどれも0ではない。
n次正則行列A、Bについて次が成り立つ。
- $|A^{−1}| = |A|^{−1}$
- $(A^{−1})^{−1} = A$
- $(AB)^{−1} = B^{−1}A^{−1}$
- Aの余因子行列$\tilde{A}$について$A^{−1}=|A|^{−1}\tilde{A}$
余因子行列 - Wikipedia - n次正方行列Nが冪零行列ならばI−Nは正則で、その逆行列は$I+N+…+N_n^{−1}となる。
冪零行列 - Wikipedia
やっと以下が視界内に捉えられる様になりました。
一般線型群 - Wikipedia
数学における一般線型群(GL:General Linear Group)とは線型空間上の自己同型写像のなす群だが、あるいは基底を固定することで、正則行列のなす群のことを指すこともある。
2つの定義…大雑把には、どちらも「行列式がゼロでない行列全体」を指す。
① Fを体(整数や実数や有理数や複素数を元とする群や環の上位概念)とする。 F線型空間V上の一般線型群とはV上の線型写像全体End(V)(Endomorphism=V上の自己準同型写像)のうち全単射な写像全体が写像の合成に関してなす群のことをいい、GL(V) またはAut(V)(Automorphism=V上の自己同型写像)と表す。
② n次元F線型空間Vの基底$B = (v_1,…,v_n)$をひとつ選び固定して、数ベクトル空間 Fn の元 (a1,…,an) と線型空間 V の元$a_1v_1+…+a_nv_n$とを同一視することによって、 n 次正方行列全体$M_n(F)$のうち正則な行列全体が行列の積に関してなす群のことを一般線型群ということも多い。この場合には GLn(F) または GL(n, F) と表す。行列式がゼロでない行列全体と言い換えてもよい。
{\displaystyle \operatorname {GL} (V)=\{\,f\in \operatorname {End} (V)\mid \exists g\in \operatorname {End} (V)\ f\circ g=\operatorname {id} _{V}=g\circ f\,\}}\\
{\displaystyle {\begin{aligned}\operatorname {GL} _{n}(F)&=\{\,A\in \operatorname {M} _{n}(F)\mid \exists B\in \operatorname {M} _{n}(F)\ AB=I_{n}=BA\,\}\\&=\{\,A\in \operatorname {M} _{n}(F)\mid \det A\neq 0\,\}\end{aligned}}}
どちらの定義も同じ対象を定めていると思ってよい。実際、n次元F線型空間V上の一般線型群 GL(V)とn次正則行列全体GLn(F)との間には次で定まる同型写像がある。
{\displaystyle \operatorname {GL} (V)\to \operatorname {GL} _{n}(F),\ f\mapsto A=(a_{ij})}\operatorname {GL}(V)\to \operatorname {GL}_{n}(F),\ f\mapsto A=(a_{{ij}})\\
{\displaystyle f(v_{i})=\sum _{j=1}^{n}a_{ji}v_{j}}{\displaystyle f(v_{i})=\sum _{j=1}^{n}a_{ji}v_{j}}
現段階では列記による定義の比較が精一杯ですが、空き時間が出来たら随時まとめながらアップデートを掛けていきます。そんな感じで以下続報…