直線の線型変換

直線の線型変換

直線の方程式と線型変換

直線の方程式

 下図のように、平面上に 2 点 $P,\ Q$ があって、それぞれの位置ベクトルを $\boldsymbol{p},\ \boldsymbol{q}$ とします。

 ベクトルで表された直線方程式

 このとき、$P$ を始点、$Q$ を終点とするベクトルは $\boldsymbol{q}-\boldsymbol{p}$ なので、$P$ と $Q$ を結ぶ直線上の位置ベクトルは、任意のスカラー $t$ によって、
 
\[\boldsymbol{r}=\boldsymbol{p}+t(\boldsymbol{q}-\boldsymbol{p})\]
と表せます ($\boldsymbol{q}-\boldsymbol{p}$ の延長線上に $\boldsymbol{r}$ があります)。この式を少し整理すると
 
\[\boldsymbol{r}=(1-t)\boldsymbol{p}+t\boldsymbol{q}\tag{1}\]
となります。これが ベクトルで表された直線の方程式 です。
 

直線の線型変換

 位置ベクトル $\boldsymbol{p}$ と $\boldsymbol{q}$ が線型変換 $f$ によって、それぞれ $f(\boldsymbol{p})$ と $f(\boldsymbol{q})$ に写され、かつ $\boldsymbol{p}\neq \boldsymbol{q}$ であるとき、方程式 (1) で表される直線 $\boldsymbol{r}$ を $f$ で変換すると、
 
\[f(\boldsymbol{r})=(1-t)f(\boldsymbol{p})+tf(\boldsymbol{q})\tag{2}\]
となり、$f(\boldsymbol{p})$ と $f(\boldsymbol{q})$ を結ぶ直線に写されることがわかります。

 直線の線型変換(一次変換)

 例として方程式
 
\[5x-3y=2\tag{3}\]
で表される直線を行列 $A=\begin{bmatrix}1&-1\\3&2\end{bmatrix}$ で変換してみましょう。2通りの方法で解いてみます。

[1] 2点を変換する方法

 まず直線上の 2 点を見つけます。
 $(x,y)=(1,1)$ が (3) を満たすことは明らかです。
 適当な $x$ を (3) に放り込んで、もう1つの点を見つけることもできますが、$y$ が分数になると面倒なので、ちょっとしたテクニックを使って整数解を得ておきましょう。(3) を
 
\[3y=5x-2\]
のように書き直して、右辺を強引に $5$ で括って
 
\[3y=5(x-1)+3\]
とします。$3$ を左辺に移項すれば、
 
\[3(y-1)=5(x-1)\tag{4}\]
となります。$k$ を任意の実数として、
 
\[y-1=5k,\quad x-1=3k\tag{5}\]
で表される点はすべて (4) を満たします。$k=1$ とすれば $(x,y)=(4,6)$ が得られます。$(1,1)$ と $(4,6)$ を行列 $A$ によって変換すると
 
\[\begin{align*}
&\begin{bmatrix}1&-1\\3&2 \end{bmatrix}\begin{bmatrix}1\\1 \end{bmatrix}
=\begin{bmatrix}0\\5 \end{bmatrix}\\[6pt]
&\begin{bmatrix}1&-1\\3&2 \end{bmatrix}\begin{bmatrix}4\\6 \end{bmatrix}
=\begin{bmatrix}-2\\24\end{bmatrix}
\end{align*}\]
が得られます。$(0,5)$ と $(-2,24)$ を結ぶ直線の傾き $m$ を求めると、
 
\[m=\frac{24-5}{0-(-2)}=\frac{19}{2}\tag{6}\]
 したがって、求める直線の方程式は
 
\[y=\frac{19}{2}+5\]
となります。分母を払って整理すると
 
\[2y-19x=10\tag{7}\]
が得られます。
 

[2] 逆行列を用いる方法

 直線 $5x-3y=2$ の上にある点を $(x,y)$ とし、行列 $A=\begin{bmatrix}1&-1\\3&2\end{bmatrix}$ によって点 $(X,Y)$ に写されたとします。
 
\[A\begin{bmatrix}x\\y \end{bmatrix}
=\begin{bmatrix}X\\Y \end{bmatrix}\tag{8}\]
 $A$ の逆行列を計算すると
 
\[A^{-1}=\frac{1}{5}\begin{bmatrix}
2&1\\-3&1\end{bmatrix}\tag{9}\]
となるので、これを (8) の両辺に左側から掛けて、
 
\[\begin{bmatrix}x\\y\end{bmatrix}
=\frac{1}{5}\begin{bmatrix}2&1\\-3&1\end{bmatrix}\begin{bmatrix}X\\Y \end{bmatrix}
=\frac{1}{5}\begin{bmatrix}2X+Y\\-3X+Y\end{bmatrix}\tag{10}\]
 $(x,y)$ を元の方程式 $5x-3y=2$ に代入して整理すると、
 
\[2Y-19X=10\tag{11}\]
が得られます。
 

Pythonによる直線の線型変換

 Python で直線を変換してみましょう。
 以下のコードを実行するためには、関数ライブラリ の coordinate() が必要です。

# リストSLA024

import numpy as np
import matplotlib.pyplot as plt

# FigureとAxes
fig, ax = plt.subplots(1, 1, figsize=(6, 6))

# 座標を設定
coordinate(ax, [-6, 6], [-6, 6])

# 直線5x-3y=2上の点
x = np.linspace(-6, 6, 65)
y = (5*x - 2)/3

# xとyを縦軸方向に連結
p = np.vstack((x, y))

# 変換行列aを定義
a = np.array([[1, -1],
              [3, 2]])

# 直線5x-3y=2を行列aで変換
ap = np.dot(a, p)

# 直線を表示
ax.plot(x, y, color = "blue", label = "5x-3y=2")
ax.plot(ap[0], ap[1], color = "red", label = "19x+2y=10")
ax.legend()

 Pythonによる直線の線型変換 (line transform)