線形代数(Linear Algebra)とは任意の点の集合を任意の点の集合に推移させる計算(変換(Transformation)または関数(Function)または写像(Map))に他なりません。
線形変換(Liner Transformation)
一般的な四則演算の線形代数的表現となります。
代数式aX=bY→同次変換行列
\begin{pmatrix}
X & 0 & a\\
0 & Y & b\\
0 & 0 & -1 \\
\end{pmatrix}
代数式aX=bY=cZ→同次変換行列
\begin{pmatrix}
X & 0 & 0 & a\\
0 & Y & 0 & b\\
0 & 0 & Z & c \\
0 & 0 &0 & -1 \\
\end{pmatrix}
そしてここでいう「変数(列)の数に対してデータ=式(行)の数が多過ぎる場合(不能)」からおもむろに「人工知能アルゴリズム領域」が始まるのです。
アフィン変換(Affine Transformation)
上掲の単位行列(Identity matrix)を恒等変換(Identity Transformation)の演算子と考えて拡張する形となります。
恒等変換(Identity Transformation)
二次元アフィン変換
\begin{pmatrix}
X_1 \\
Y_1 \\
1\\
\end{pmatrix}
=\begin{pmatrix}
a & b & e\\
c & d & f\\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
並行移動(Parallel Movement)
並行移動(T_x,T_y)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & T_x \\
0 & 1 & T_y \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
拡大縮小(Scaling)
拡大縮小(S_x,S_y)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
S_x & 0 & 0\\
0 & S_y & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
回転(Rotate)
回転(θ)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & -sin(θ) & 0 \\
sin(θ) & cos(θ) & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
剪断(Shear)
剪断(θ_x)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & tan(θ_x) & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
剪断(θ_y)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0 \\
tan(θ_y) & 1 & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
三次元アフィン変換
上掲の二次元アフィン変換の応用として規定されます。
\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
a & b & c & j\\
d & e & f & k\\
g & h & i & l \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
並行移動(Parallel Movement)
並行移動(T_x,T_y,T_z)
\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0 & T_x\\
0 & 1 & 0 & T_y\\
0 & 0 & 1 & T_z\\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
拡大縮小(Scaling)
拡大縮小(S_x,S_y,S_z)
\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
S_x & 0 & 0 & 0\\
0 & S_y & 0 & 0\\
0 & 0 & S_z & 0 \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
回転(Rotate)
x軸まわりの回転(θ)\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & cos(θ) & -sin(θ) & 0\\
0 & sin(θ) & cos(θ) & 0 \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
y軸まわりの回転(θ)
\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & 0 & sin(θ) & 0\\
0 & 1 & 0 & 0\\
-sin(θ) & 0& cos(θ) & 0 \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
Z軸まわりの回転(θ)\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & -sin(θ) & 0 & 0\\
sin(θ) & cos(θ) & 0 & 0 \\
0 & 0 & 1 & 0\\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
回転を「一軸を固定した二次元回転」に分解してるのが特徴で、全軸の同次回転を考えたい場合には四元数(Quaternion)を用います。
【Token】ハミルトンの四元数(Hamilton's quaternion)
- ベクトル$v=iv_x+jv_y+kv_z$を単位ベクトル$a=ia_x+ja_y+ka_z$を軸に角度θ回転させ、ベクトル$v'=iv'_x+jv'_y+kv'_z$に遷移させるものとする。この時、
v'=qv\bar{q}
q=\cos( \frac{θ}{2})+a\sin(\frac{θ}{2})
\bar{q}=\cos( \frac{θ}{2})-a\sin(\frac{θ}{2})
難易度が急激に上がるので現時点における用途は宇宙船やドローンの制御の様な「重力を無視して考えた方が都合がいい」場合に限られています。
そんな感じで以下続報…