【数理溢れ話】【Token】アフィン変換(線形代数)による代数式と集合論の統合

線形代数(Linear Algebra)とは任意の点の集合を任意の点の集合に推移させる計算(変換(Transformation)または関数(Function)または写像(Map))に他なりません。

# 線形変換(Liner Transformation)

一般的な四則演算の線形代数的表現となります。

### 加減算

行と列の数が同じ行列の場合のみ成立
```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
+\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22} \\
\end{pmatrix}
=\begin{pmatrix}
a_{11}+b_{11} & a_{12}+b_{12}\\
a_{21}+b_{21} & a_{22}+b_{22} \\
\end{pmatrix}
```

```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
-\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22} \\
\end{pmatrix}
=\begin{pmatrix}
a_{11}-b_{11} & a_{12}-b_{12}\\
a_{21}-b_{21} & a_{22}-b_{22} \\
\end{pmatrix}
```

### 乗算

**スカラー倍**

```math
C\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
=\begin{pmatrix}
Ca_{11}&Ca_{12}\\
Ca_{21}&Ca_{22}
\end{pmatrix}
```
```math
\frac{1}{C}\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
=\begin{pmatrix}
\frac{a_{11}}{C}&\frac{a_{12}}{C}\\
\frac{a_{21}}{C}&\frac{a_{22}}{C}
\end{pmatrix}
```
**アダマール積**

アダマール積(Hadamard Product, シューア積(Schur Product)とも)は同じサイズの行列A,Bに対し成分ごとの積をとる演算で、交換則と分配則を満たします。

* A∘B=B∘A
* A∘(B∘C)=(A∘B)∘C
* A∘(B+C)=A∘B+A∘C

例えば機械学習では行列$a^{ij}$と$b^{ij}$それぞれのアダマール積をとって全ての成分の和をとる演算が実践的技法として使われます。


```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
○\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22} \\
\end{pmatrix}
=\begin{pmatrix}
a_{11}b_{11}&a_{12}b_{12}\\
a_{21}b_{21}&a_{22}b_{22}
\end{pmatrix}
```
```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22} \\
\end{pmatrix}
○\begin{pmatrix}
\frac{1}{b_{11}} & \frac{1}{b_{12}}\\
\frac{1}{b_{21}} & \frac{1}{b_{22}} \\
\end{pmatrix}
=\begin{pmatrix}
\frac{a_{11}}{b_{11}}&\frac{a_{12}}{b_{12}}\\
\frac{a_{21}}{b_{21}}&\frac{a_{22}}{b_{22}}
\end{pmatrix}
```
**一般的乗算**

行列$a_{mn}$と縦行列$b_m$を掛けると縦行列となります。
```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}\\
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2\\
\end{pmatrix}
=\begin{pmatrix}
a_{11}b_1 + b_{12}v_2\\
a_{21}b_1 + b_{22}v_2\\
\end{pmatrix}
```
```math
\begin{pmatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
\begin{pmatrix}
b_{1}\\
b_{2}\\
b_{3}
\end{pmatrix}
=\begin{pmatrix}
a_{11} b_{1} + a_{12} b_{2} + a_{13} b_{3}\\
a_{21} b_{1} + a_{22} b_{2} + a_{23} b_{3}\\
a_{31} b_{1} + a_{32} b_{2} + a_{33} b_{3}
\end{pmatrix}
```
```math
b_n=\sum_ka_{nk}b_k
```
横行列$a_n$と行列$b_{mn}$とを掛けると横行列となります。

```math
\begin{pmatrix}
a_1&a_2
\end{pmatrix}
\begin{pmatrix}
b_{11}&b_{12}\\
b_{21}&b_{22}
\end{pmatrix}\\ 
=\begin{pmatrix}
a_1b_{11}+a_2b_{21}&a_1b_{12}+a_2b_{22}
\end{pmatrix}
```
```math
\begin{pmatrix}
a_{1} & a_{2} & a_{3}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12} & b_{13}\\
b_{21} & b_{22} & b_{23}\\
b_{31} & b_{32} & b_{33}
\end{pmatrix}
=\begin{pmatrix}
a_{1} b_{11} + a_{2} b_{21} + a_{3} b_{31} & a_{1} b_{12} + a_{2} b_{22} + a_{3} b_{32} & a_{1} b_{13} + a_{2} b_{23} + a_{3} b_{33}\end{pmatrix}
```
```math
b_m=\sum_ka_kb_{mk}
```
合算すると以下の形となります。
```math
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
=\begin{pmatrix}
a_{11} b_{11} + a_{12} b_{21} & a_{11} b_{12} + a_{12} b_{22}\\
a_{21} b_{11} + a_{22} b_{21} & a_{21} b_{12} + a_{22} b_{22}
\end{pmatrix}
```
```math
\begin{pmatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12} & b_{13}\\
b_{21} & b_{22} & b_{23}\\
b_{31} & b_{32} & b_{33}
\end{pmatrix}
=\begin{pmatrix}
a_{11} b_{11} + a_{12} b_{21} + a_{13} b_{31} & a_{11} b_{12} + a_{12} b_{22} + a_{13} b_{32} & a_{11} b_{13} + a_{12} b_{23} + a_{13} b_{33}\\
a_{21} b_{11} + a_{22} b_{21} + a_{23} b_{31} & a_{21} b_{12} + a_{22} b_{22} + a_{23} b_{32} & a_{21} b_{13} + a_{22} b_{23} + a_{23} b_{33}\\
a_{31} b_{11} + a_{32} b_{21} + a_{33} b_{31} & a_{31} b_{12} + a_{32} b_{22} + a_{33} b_{32} & a_{31} b_{13} + a_{32} b_{23} + a_{33} b_{33}
\end{pmatrix}
```
**行列のn乗**

```math
\begin{pmatrix}
a & b\\
c & d
\end{pmatrix}^2
=\begin{pmatrix}
a^{2} + b c & a b + b d\\
a c + c d & b c + d^{2}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & b & c\\
d & e & f\\
g & h & i
\end{pmatrix}^2
=\begin{pmatrix}
a^{2} + b d + c g & a b + b e + c h & a c + b f + c i\\
a d + d e + f g & b d + e^{2} + f h & c d + e f + f i\\
a g + d h + g i & b g + e h + h i & c g + f h + i^{2}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & b\\
c & d
\end{pmatrix}^3
=\begin{pmatrix}
a^{3} + 2 a b c + b c d & a^{2} b + a b d + b^{2} c + b d^{2}\\
a^{2} c + a c d + b c^{2} + c d^{2} & a b c + 2 b c d + d^{3}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & b & c\\
d & e & f\\
g & h & i
\end{pmatrix}^3
=\begin{pmatrix}
a^{3} + 2 a b d + 2 a c g + b d e + b f g + c d h + c g i & a^{2} b + a b e + a c h + b^{2} d + b c g + b e^{2} + b f h + c e h + c h i & a^{2} c + a b f + a c i + b c d + b e f + b f i + c^{2} g + c f h + c i^{2}\\
a^{2} d + a d e + a f g + b d^{2} + c d g + d e^{2} + d f h + e f g + f g i & a b d + 2 b d e + b f g + c d h + e^{3} + 2 e f h + f h i & a c d + b d f + c d e + c d i + c f g + e^{2} f + e f i + f^{2} h + f i^{2}\\
a^{2} g + a d h + a g i + b d g + c g^{2} + d e h + d h i + f g h + g i^{2} & a b g + b d h + b e g + b g i + c g h + e^{2} h + e h i + f h^{2} + h i^{2} & a c g + b f g + c d h + 2 c g i + e f h + 2 f h i + i^{3}
\end{pmatrix}
```
対角化すると計算がグッと楽になります。
 [行列演算の基本③パスカルの三角形から二次形式へ](https://qiita.com/ochimusha01/items/97f8354035dc3f824fc3)
```math
\begin{pmatrix}
a & 0\\
0 & b
\end{pmatrix}^2
=\begin{pmatrix}
a^{2} & 0\\
0 & b^{2}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & 0 & 0\\
0 & b & 0\\
0 & 0 & c
\end{pmatrix}^2
=\begin{pmatrix}
a^{2} & 0 & 0\\
0 & b^{2} & 0\\
0 & 0 & c^{2}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & 0\\
0 & b
\end{pmatrix}^3
=\begin{pmatrix}
a^{3} & 0\\
0 & b^{3}
\end{pmatrix}
```
```math
\begin{pmatrix}
a & 0 & 0\\
0 & b & 0\\
0 & 0 & c
\end{pmatrix}^3
=\begin{pmatrix}
a^3 & 0 & 0\\
0 & b^3 & 0\\
0 & 0 & c^3
\end{pmatrix}
```
**二次形式および行列の内積と外積**
横行列(行ベクトル)と縦行列(列ベクトル)の積はスカラーとなります。
```math
\begin{pmatrix}
a_1&a_2
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2
\end{pmatrix}
=a_1b_1+a_2b_2
```
```math
\begin{pmatrix}
a_1&a_2&a_3
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2\\
b_3
\end{pmatrix}=a_1b_1+a_2b_2+a_3b_3\\
```
いわゆるベクトルの内積(Inner Product)です。
```math
\overrightarrow{a}・\overrightarrow{b}=\sum_ka_{k}b_{k}
```
```math
\overrightarrow{a}・\overrightarrow{b}=|a||b|\cos(θ)
```
![スクリーンショット 2024-12-29 4.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/a08acf3e-1a1c-d1ff-3cd1-59bf5ccbc6d8.png)
一方、縦行列(列ベクトル)と横行列(行ベクトル)の積は行列となります。

```math
\begin{pmatrix}
a_1\\
a_2
\end{pmatrix}
\begin{pmatrix}
p_1&b_2
\end{pmatrix}
=\begin{pmatrix}
a_1b_1&a_1b_2\\
a_2b_1&a_2b_2
\end{pmatrix}
```
```math
\begin{pmatrix}
a_{1}\\
a_{2}\\
a_{3}
\end{pmatrix}
\begin{pmatrix}
b_{1} & b_{2} & b_{3}
\end{pmatrix}
=\begin{pmatrix}
a_{1} b_{1} & a_{1} b_{2} & a_{1} b_{3}\\
a_{2} b_{1} & a_{2} b_{2} & a_{2} b_{3}\\
a_{3} b_{1} & a_{3} b_{2} & a_{3} b_{3}
\end{pmatrix}
```
このように「横行列(行ベクトル)と縦行列(列ベクトル)を掛ける順番が異なると結果が異なるのはこの演算が単なる四則演算ではなく連立方程式における係数と変数に対応しているからです。
```math
\left\{
\begin{array}{l}
2x+4y=7\\
x+3y=6
\end{array}
\right.
→\begin{pmatrix}
2&4\\
1&3
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}
=\begin{pmatrix}
7\\
6
\end{pmatrix}
```
以下はとりあえずサイズ違いから計算出来ません。

```math
\begin{pmatrix}
x\\
y
\end{pmatrix}
\begin{pmatrix}
2&4\\
1&3
\end{pmatrix}
```
ちなみに積の形で表される計算可能な横行列(行ベクトル)と縦行列(列ベクトル)の組み合わせのランクは必ず１(すなわち線形従属状態)となります。

[線形代数の基礎 第9回 - 行列のランク](https://qiita.com/nognog/items/42f6a9e4839a7d8fbd63)
[線形代数の基礎 第10回 - 行列のランクの計算](https://qiita.com/nognog/items/2d2344dc1d9ab118eddc)

またこの形なら計算こそ通りますが、答えが変わってしまいます。

```math
\begin{pmatrix}
x&y
\end{pmatrix}
\begin{pmatrix}
2&4\\
1&3
\end{pmatrix}
=\begin{pmatrix}
2 x + y & 4 x + 3 y
\end{pmatrix}
```
そして横行列(行ベクトル)と縦行列(列ベクトル)の間に行列を挟んだ計算の積はスカラーとなります。
```math
\begin{pmatrix}
x_1&x_2
\end{pmatrix}
\begin{pmatrix}
a_{11}&a_{12}\\
a_{21}&a_{22}
\end{pmatrix}
\begin{pmatrix}
y_1\\
y_2
\end{pmatrix}
```
```math
=x_1a_{11}y_1+x_1a_{12}y_2+x_2a_{21}y_1+x_2a_{22}y_2
```
```math
\begin{pmatrix}
x_{1} & x_{2} & x_{3}
\end{pmatrix}
\begin{pmatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
\begin{pmatrix}
y_{1}\\
y_{2}\\
y_{3}
\end{pmatrix}
```
```math
=\left[\begin{matrix}y_{1} \left(a_{11} x_{1} + a_{21} x_{2} + a_{31} x_{3}\right) + y_{2} \left(a_{12} x_{1} + a_{22} x_{2} + a_{32} x_{3}\right) + y_{3} \left(a_{13} x_{1} + a_{23} x_{2} + a_{33} x_{3}\right)\end{matrix}\right]
```
この起算で特に行列が対称行列(Symmetric Matrix=自身の転置行列と一致するような正方行列を)で、横行列(行ベクトル)と縦行列(列ベクトル)の成分が同じ場合を特別に二次形式と呼びます。2x2の時は二項式の二乗の場合に対応。　

[対称行列 - Wikipedia](https://ja.wikipedia.org/wiki/%E5%AF%BE%E7%A7%B0%E8%A1%8C%E5%88%97)
[二次形式の意味，微分，標準形など](https://manabitimes.jp/math/1240)

```math
\begin{pmatrix}
x_1&x_2
\end{pmatrix}
\begin{pmatrix}
a_1&b\\
b&a_2
\end{pmatrix}
\begin{pmatrix}
x_1\\
x_2
\end{pmatrix} 
=a_1x_1^2+a_2x_2^2+2bx_1x_2
```
```math
\begin{pmatrix}
x_{1} & x_{2} & x_{3}
\end{pmatrix}
\begin{pmatrix}
a_{1} & b & c\\
b & a_{2} & d\\
c & d & a_{3}
\end{pmatrix}
\begin{pmatrix}
x_{1}
\\x_{2}
\\x_{3}
\end{pmatrix}
```
```math
=a_1x_1^2+a_2x_2^2+a_3x_3^2+2bx_1x_2+2cx_1x_3+2dx_2x_3
```
なお正方行列には行列式(Determinant)が定義で可能で、こちらは外積(Outer Product)と関係してきます。
```math
\overrightarrow{a}○\overrightarrow{b}=|a||b|\sin(θ)
```
![スクリーンショット 2024-12-29 4.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/a08acf3e-1a1c-d1ff-3cd1-59bf5ccbc6d8.png)

* 始点を同じくする長さ(半径)1の二つのベクトルの内積は、ピッタリ重なりあう時に最大の１、正反対に向かい合う時最小の-1隣、この場合だけ１次元に収まる(外積0)。
* 一方、この二つのベクトルが直交する時(内積0)に外積は最大限の1となり、その向きはさらにこの二つのベクトルと直行する第三の方向となる。この時、計算の順序が符号に対応しabを+と考えればbaは-となる。

![スクリーンショット 2024-12-29 5.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/fda20764-3d3a-8bee-ec3b-0b62a3a309b5.png)

[2×2行列（2次正方行列）の行列式の定義と意味（行列と外積の関係）](https://www.irohabook.com/2matrix-determinant)

>行列Aの行列式det(A)(ないしはdetAまたは|A|)は以下の様に表される。

```math
A=\begin{pmatrix}
a&b\\
c&d
\end{pmatrix}|A|
=\begin{vmatrix}
a&b\\
c&d
\end{vmatrix}=ad-bc
```
外積はこの行列式を使って定義されます。
```math
\vec{a}×\vec{b}=\begin{pmatrix}
a_x\\
a_y
\end{pmatrix}
×\begin{pmatrix}
b_x\\
b_y
\end{pmatrix}
=\begin{pmatrix}
a_xb_y-a_yb_x\\
a_yb_x-a_xb_y
\end{pmatrix}
```
![スクリーンショット 2024-12-21 18.25.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d8d8dfa2-21cd-0770-3aa4-dd682dd0f13a.png)
```math
\vec{a}×\vec{b}=\begin{pmatrix}
a_x\\
a_y\\
a_z
\end{pmatrix}
×\begin{pmatrix}
b_x\\
b_y\\
b_z
\end{pmatrix}
=\begin{pmatrix}
a_yb_z-a_zb_y\\
a_zb_x-a_xb_z\\
a_xb_y-a_yb_x
\end{pmatrix}
```
![スクリーンショット 2024-12-21 18.29.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0dd47b7d-e4ca-b11b-62b1-981be3fe02ae.png)

**除算**
行列演算に割り算の設定はなく[(元行列に掛けると単位元となる)逆行列との掛け算]として規定されます。
[行列演算の基本②単位行列と逆行列そして連立一次方程式の解法](https://qiita.com/ochimusha01/items/18679906ba8fa3c783b0)

```math
A^{-1}=(\forall A_n \in Square Matrix_n:A_nA_n^{-1}=A_n^{-1}A_n=E_n)
```
* 逆数が0でない数に対してのみ存在する様に、逆行列は行列式$det(A)$が0とならない行列に対してのみ存在する。その一方で逆行列が存在する行列は正則(Regular)であるといい、その様な行列を正則行列(Regular Matrix)という。

例えば以下の二次正方行列を想定するとします。

```math
A={\begin{pmatrix}a&b\\c&d\end{pmatrix}}
```

>これが正則行列であるのはad−bc≠0が成立する時、かつそのときに限りますが、この時逆行列は以下の式で与えられるのです。

```math
A^{-1}={\frac {1}{ad-bc}}{\begin{pmatrix}d&-b\\-c&a\end{pmatrix}}
```
### 行基本変形
**行の交換**
二次元正則行列$A_{mn}(m_{max}=n_{max})$のi行目とj行目の交換は，単位行列のi成分とj成分を交換した行列P(i,j)(行列式-1)を左からかけることに対応します。
```math
P(1,3)=\begin{pmatrix}
0 & 0 & 1\\
0 & 1 & 0\\
1 & 0 & 0
\end{pmatrix},
```
```math
\begin{pmatrix}
0 & 0 & 1\\
0 & 1 & 0\\
1 & 0 & 0
\end{pmatrix}
\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
7 & 8 & 9
\end{pmatrix}
=\begin{pmatrix}
7 & 8 & 9\\
4 & 5 & 6\\
1 & 2 & 3
\end{pmatrix}
```
**行のスカラー倍**
二次元正則行列$A_{mn}(m_{max}=n_{max})$のi行目をc倍する操作は単位行列のi成分をcとする行列P(i;c)(行列式c)を左からかけることに対応します。
```math
P(3;2)=\begin{pmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 2
\end{pmatrix},
```
```math
\begin{pmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 2
\end{pmatrix}
\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
7 & 8 & 9
\end{pmatrix}
=\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
14 & 16 & 18
\end{pmatrix}
```
**任意の行のスカラー倍を任意の行に加算**
j行目のc倍をi行目に加える操作は，単位行列のij成分をcとした行列P(i,j;c)(行列式１)を左から掛けることに対応します。

```math
P(3,1;-2)=\begin{pmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
-2 & 0 & 1
\end{pmatrix}
```

```math
\begin{pmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
-2 & 0 & 0
\end{pmatrix}
\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
7 & 8 & 9
\end{pmatrix}
=\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
5 & 4 & 3
\end{pmatrix}
```
### 同次変換行列

ここで同次変換行列の概念を導入します。
```math
代数式aX=bY→同次変換行列
\begin{pmatrix}
X & 0 & a\\
0 & Y & b\\
0 & 0 & -1 \\
\end{pmatrix}
```
```math
代数式aX=bY=cZ→同次変換行列
\begin{pmatrix}
X & 0 & 0 & a\\
0 & Y & 0 & b\\
0 & 0 & Z & c \\
0 & 0 &0 & -1 \\
\end{pmatrix}
```
上掲の様に横行列(行ベクトル)の集合と縦行列(列ベクトル)の積は縦行列(列ベクトル)になります。

![スクリーンショット 2024-12-16 5.47.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e9cd7f0e-640f-2f17-9416-2c3eb7f5c712.png)
そしてここでいう「変数(列)の数に対してデータ=式(行)の数が多過ぎる場合(不能)」からおもむろに「人工知能アルゴリズム領域」が始まるのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f6ba732d-192b-61cc-e004-19044fe2c3da.png)

# アフィン変換(Affine Transformation)

上掲の単位行列(Identity matrix)を恒等変換(Identity Transformation)の演算子と考えて拡張する形となります。
### 恒等変換(Identity Transformation)

![スクリーンショット 2024-12-15 0.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/db55cc4b-c899-1efe-8a60-bdc564325061.png)
# 二次元アフィン変換

```math
\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)
```math
並行移動(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}
```
![スクリーンショット 2024-12-15 1.17.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f1eaf300-fd93-7db4-3bc1-ebcb40abe7dc.png)

### 拡大縮小(Scaling)
```math
拡大縮小(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}
```
![スクリーンショット 2024-12-15 1.18.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3cffa515-47d3-6b76-0c82-dffe82aae563.png)

### 回転(Rotate)

```math
回転(θ)
\begin{pmatrix}
X_1\\
Y_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & \pm sin(θ) & 0 \\
\mp sin(θ) & cos(θ) & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
1\\
\end{pmatrix}
```
![スクリーンショット 2024-12-29 5.27.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d4e63256-029f-4412-f8d3-e032f0396e9f.png)
![スクリーンショット 2024-12-29 5.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d56878c1-2276-0cbc-6e4c-9b323855e1a5.png)

### 剪断(Shear)
```math
剪断(θ_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}
```

```math
剪断(θ_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}
```
![スクリーンショット 2024-12-16 5.22.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/fda0c811-335c-1b18-d858-971b4b2cde6c.png)

# 三次元アフィン変換
上掲の二次元アフィン変換の応用として規定されます。

```math
\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)
```math
並行移動(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)
```math
拡大縮小(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)
```math
x軸まわりの回転(θ)\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & cos(θ) & \pm sin(θ) & 0\\
0 & \mp sin(θ) & cos(θ) & 0 \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
```

```math
y軸まわりの回転(θ)
\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & 0  & \mp sin(θ) & 0\\
0 & 1 & 0 & 0\\
\pm sin(θ) & 0& cos(θ) & 0 \\
0 & 0 &0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
X_0\\
Y_0\\
Z_0\\
1\\
\end{pmatrix}
```

```math
Z軸まわりの回転(θ)\begin{pmatrix}
X_1\\
Y_1\\
Z_1\\
1\\
\end{pmatrix}
=\begin{pmatrix}
cos(θ) & \ pm sin(θ) & 0 & 0\\
\mp 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)](https://qiita.com/ochimusha01/items/d975e3e2b06a508f162c)

* ベクトル$v=iv_x+jv_y+kv_z$を単位ベクトル$a=ia_x+ja_y+ka_z$を軸に角度θ回転させ、ベクトル$v'=iv'_x+jv'_y+kv'_z$に遷移させるものとする。この時、

```math
v'=qv\bar{q}
```

```math
q=\cos( \frac{θ}{2})+a\sin(\frac{θ}{2})
```

```math
\bar{q}=\cos( \frac{θ}{2})-a\sin(\frac{θ}{2})
```
難易度が急激に上がるので現時点における用途は宇宙船やドローンの制御の様な「重力を無視して考えた方が都合がいい」場合に限られています。またその運用に先立って複素数概念を理解しておく必要があります。

# 複素数概念との対応

対角化された正則行列を使えば関数のx軸とy軸の交換が容易に行えます。

```math
y=x^2→\begin{pmatrix}
x & 0\\
0 & x^2
\end{pmatrix}
```
```math
\begin{pmatrix}
0 & 1\\
1 & 0
\end{pmatrix}
\begin{pmatrix}
x & 0\\
0 & x^2
\end{pmatrix}
=\begin{pmatrix}
x & 0\\
0 & x^2
\end{pmatrix}
```
```math
\begin{pmatrix}
x^2 & 0\\
0 & x
\end{pmatrix}^{\frac{1}{2}}
=\sqrt{
\begin{pmatrix}
x^2 & 0\\
0 & x
\end{pmatrix}}
=\begin{pmatrix}
x & 0\\
0 & \sqrt{x}
\end{pmatrix}→y=\sqrt{x}
```
![スクリーンショット 2024-12-21 20.43.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/7c5e8ad5-d282-b137-d453-d9fce26b7f76.png)

```math
y=e^x→\begin{pmatrix}
x & 0\\
0 & e^x
\end{pmatrix}
```
```math
\begin{pmatrix}
0 & 1\\
1 & 0
\end{pmatrix}
\begin{pmatrix}
x & 0\\
0 & e^x
\end{pmatrix}
=\begin{pmatrix}
e^x & 0\\
0 & x
\end{pmatrix}
```
```math
log_e(\begin{pmatrix}
e^x & 0\\
0 & x
\end{pmatrix})
=\begin{pmatrix}
x & 0\\
0 & log_e(x)
\end{pmatrix}
→y=log_e(x)
```
![スクリーンショット 2024-12-21 20.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/c33b5638-f40f-0287-6fea-8ab2556a97c9.png)
ただしどちらもx<0の時に計算不能となるのでイタリア・ルネサンス期(14世紀~16世紀)に三次方程式を解く為の方便として発案された虚数$\sqrt{-1}$あるいは$i^2=-1$の概念を導入します。

* 実は上掲の「二次元における外積の次元」として既にこっそり登場済みだったりする訳だが、この概念をさらに複素数R+Ii概念に拡張すると$i^{1-Cos(θ)}(0≦θ≦π)$とも表現可能な関数$i^x{0≦x≦2}$は(水平軸に実数、垂直軸に虚数を取る)複素平面上において$i^0$から$i^0$にかけて半円を描く。
![スクリーンショット 2024-12-21 21.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3087573e-49df-3954-12c5-264784322865.png)
* この様に半円を描くので、さらに$\pm \sqrt{i}$を求めても$\pm \frac{1}{\sqrt{2}}+\frac{1}{\sqrt{2}}i$が得られるだけで新たな虚数を導入する必要は生じない。

![スクリーンショット 2024-12-21 21.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f39806ef-4dc2-0e13-98df-b028bb327279.png)

```math
(\frac{1}{\sqrt{2}}+\frac{1}{\sqrt{2}}i)^2=(\frac{1}{\sqrt{2}})^2+2\frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}i+(\frac{1}{\sqrt{2}}i)^2=\frac{1}{2}+2\frac{1}{2}i-\frac{1}{2}=+i
```
```math
(\frac{1}{\sqrt{2}}-\frac{1}{\sqrt{2}}i)^2=(\frac{1}{\sqrt{2}})^2-2\frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}i+(\frac{1}{\sqrt{2}}i)^2=\frac{1}{2}-2\frac{1}{2}i-\frac{1}{2}=-i
```

* $Cos(\frac{π}{4})=Sin(\frac{π}{4})=\frac{1}{\sqrt{2}}$から察せられる様に、虚数の定義$i^2=-1$は18世紀に発見されたオイラーの法則$e^{θi}=Cos(θ)+Sin(θ)i$の特殊例たるオイラーの等式$e^{πi}=-1$に容易に変換される。

```math
-1=i^2=e^{2log(i)}=e^{2\frac{π}{2}i}=e^{πi}
```
```math
ただし途中で指数関数の底の変換式a^b=e^{log(a)b}を用いた。
```
![スクリーンショット 2024-12-21 21.16.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/dc803169-5236-8bfb-dfc7-06d5aada0034.png)

# 鏡映変換行列と反転
これでやっと鏡像変換と反転を扱う準備が整いました。
[Wikipedia「鏡映」](https://ja.wikipedia.org/wiki/%E9%8F%A1%E6%98%A0)
[完全に理解するアフィン変換](https://qiita.com/koshian2/items/c133e2e10c261b8646bf)

![スクリーンショット 2024-12-29 5.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/39099dcd-1a4d-4662-61e2-1686ef697528.png)

Z軸を中心とする水平回転操作$f_z(θ)$と違って途中で裏返るのが特徴。

![スクリーンショット 2024-12-29 5.42.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8ab4d624-cd5e-b8e8-4e19-a21699232770.png)

### 二段階変換における複素数と三次元アフィン変換の対応

複素数を使った二段階変換は三次元アフィン変換と重なります。。
* 恒等変換
```math
\begin{pmatrix}
e^{0i} & 0 & 0\\
0 & e^{0i} & 0\\
0 & 0 & 1 \\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1 \\
\end{pmatrix}
```
* 鏡映変換(y軸中心)
```math
\begin{pmatrix}
e^{πi} & 0 & 0\\
0 & e^{0i} & 0\\
0 & 0 & 1 \\
\end{pmatrix}
=\begin{pmatrix}
-1 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 1 \\
\end{pmatrix}
```
* 鏡映変換(x軸中心)
```math
\begin{pmatrix}
e^{0i} & 0 & 0\\
0 & e^{πi} & 0\\
0 & 0 & 1 \\
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1 \\
\end{pmatrix}
```
![スクリーンショット 2024-12-29 6.25.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e7b10ea7-0abf-7c47-9cde-97243960b6dd.png)
![スクリーンショット 2024-12-29 6.26.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0cc39284-4160-e4f3-d2a5-347307f4a3c2.png)
### 四元数独自の座標変換
「一軸ずつ回す」ニ段階操作では「二軸同時に動かして反転状態の時に裏返る」操作は不可能。それを達成するには「二軸同時に回す」四元数独自の座標操作が必要となります。
* 比例反転
```math
\begin{pmatrix}
e^{πi} & 0 & 0\\
0 & e^{πi} & 0\\
0 & 0 & 1 \\
\end{pmatrix}
```
* 反比例反転
```math
\begin{pmatrix}
e^{πi} & 0 & 0\\
0 & e^{πi} & 0\\
0 & 0 & 1 \\
\end{pmatrix}
```
「二段階操作」も「一段階操作」も向きが反対の鏡映反転操作(半分回転)を連続して遂行すると(水平半回転1回の結果と同じ)反転状態となり、しかもその順番は可換なのが興味深いところ。

![スクリーンショット 2024-12-29 6.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/47b65ebd-402d-727e-d487-a0d0aa0f7090.png)
![スクリーンショット 2024-12-29 6.43.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/25e1b760-3536-b889-731e-52a669eb54f6.png)

* こうして浮かび上がってきた「鏡映変換の2軸」は、三次元ベクトルにおいて水平回転の「ヨー(Yaw)」を拡張する形で現れる「ロール(Roll)」と「ピッチ(Pitch)」に対応。

![スクリーンショット 2025-03-24 19.12.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/ff87e0f2-fe65-44a5-bf08-50c5cf0266b2.png)

[３次元ベクトルの回転「ロール・ピッチ・ヨー」](https://watako-lab.com/2019/01/23/roll_pitch_yaw/)

そんな感じで以下続報…