行列式の幾何的な解釈:体積拡大率#
2つのベクトルが四角形を表すとみなす。この四角形を変形させる行列\(A\)があったとき、変換後の四角形の面積はもとの面積の\(\text{det}(A)\)倍である、と解釈できる
(行列式の値が正の値のとき。負の場合は軸が反転して裏返しになる。\(\text{det}(A)=0\)ならぺちゃんこに潰れている状態)
例えば\(I \in \mathbb{R}^{2\times 2}\)が構成する四角形に\(A\)を乗じて\(AI=A\)とするときの拡大率ともいえるし、\(A\)の面積とも言える
適当な行列\(A\)で変換するとこうなる
A = np.array([
[1, 1],
[0, 1]
])
e0_ = A @ e0
e1_ = A @ e1
y_ = e0_ + e1_
平行四辺形の面積は底辺×高さ。今回は底辺も高さも1なので、面積は変わっていない。
この行列\(A\)の行列式は1になる
np.linalg.det(A)
1.0
参考:Chapter 6 行列式 | 線形代数のエッセンス - YouTube
(例)次のような行列の場合は…?#
A = np.array([
[1, 2],
[1, 3]
])
B = np.array([
[1, 102],
[1, 103]
])
fig, axes = plt.subplots(ncols=2, figsize=[8, 4], dpi=72)
for X, ax in zip([A, B], axes):
x0_ = X[0]
x1_ = X[1]
y_ = x0_ + x1_
ax.grid(True, alpha=.5)
ax.arrow(0, 0, *x0_, width=0.01, color="black", length_includes_head=True)
ax.arrow(0, 0, *x1_, width=0.01, color="black", length_includes_head=True)
d = np.array([x0_, y_])
ax.plot(d[:, 0], d[:, 1], color="black", linestyle="--")
d = np.array([x1_, y_])
ax.plot(d[:, 0], d[:, 1], color="black", linestyle="--")
x = np.linspace(0, y_[0], 11)
ax.set(title=f"det = {np.linalg.det(X)}")
fig.show()
どうしてそうなるのか#
\(\boldsymbol{a}, \boldsymbol{b}\) を平面 \(\boldsymbol{R}^2\) の 2 つのベクトルとする。 \(O\) を座標の原点とし、 \(A, B\) を \(\overrightarrow{O A}\) \(=\boldsymbol{a}, \overrightarrow{O B}=\boldsymbol{b}\) であるような点とする。 \(O A, O B\) を 2 辺とする平行四辺形 \(O A P B\) を、\(\boldsymbol{a}, \boldsymbol{b}\)を2辺とする平行四辺形という。その面積Sを求めたい。
もし\(\boldsymbol{a}, \boldsymbol{b}\)が1次従属なら、OAPBは1つの線分になるので\(S=0\)
\(\boldsymbol{a}, \boldsymbol{b}\)が1次独立のとき、\(\boldsymbol{a}, \boldsymbol{b}\)のなす角を\(\theta\)とすれば、 \(B\)から辺\(OA\)に下した垂線の長さは\(\|\boldsymbol{b}\| \sin \theta\)であるから、面積は底辺×高さで
両辺を2乗にする
\(\sin ^2 \theta=1-\cos ^2 \theta\) であり \(\cos \theta = \frac{ \boldsymbol{a} \cdot \boldsymbol{b} }{ \|\boldsymbol{a}\| \|\boldsymbol{b}\| }\)なので
\(\boldsymbol{a} = (a_1, a_2)^T, \boldsymbol{b}=(b_1, b_2)^T\)とすれば、
ゆえに
import numpy as np
np.sin(np.pi) - np.cos(np.pi)
1.0000000000000002
- np.cos(np.pi) + np.sin(np.pi)
1.0000000000000002