1 はじめに.

線形代数は高校数学では扱われていません。
しかし、行列と一次変換は多変量解析に不可欠なツールです。
本書は、シミュレーションを用いて線形代数を体験的に理解することを目標とします。

1985年~1996年の教育課程では「代数・幾何」が文理共通で扱われ、二次試験では行列の固有値や対角化まで出題されていました。

昔はどの高校生もやってたんだからできないはずはない。1次元でできることは多次元に拡張できる。計算やグラフ作成はRstudioに頼ろう。今の高校生はChromeBookを持っている。

「目と手を通して身体で覚える」
体験が深まり蓄積されると、自分の中で整理され体系化が進みます。
自分の手と目で確かめられる簡単な例から始めて、探求する世界を広げていく。
この学習方法を本書では「ひょっこり方式」と呼んでいます。

GoogleColabやRstudioを用いてシミュレーションを体験してください。
コードはサイト「ひょっこり統計」の高校生の統計学コーナーに掲載してあります。

2 一次関数と一次変換.

数の計算は2項演算から始まります。
1+1 のような基本計算から、無限和まで拡張します。
この方法は、学習方法としても有効です。

  • 最も単純な1次元の数から、行列へ.
  • 最も単純な1次関数から、1次変換へ.

「1次元から多次元の世界へ」類比による拡張を考えます。

2.1 1次元写像から2次元写像へ.

X=2x は、x に対し 2x を対応させます。
「数直線上の点 x に対し、座標を2倍した点を対応させる」と考えるとき、この対応を写像と呼びます。
対応を点の移動として捉えたときには、変換といいます。
X=2x は、1次元の写像であり変換です。

  • 1次式で表されているので、1次元の1次変換です。
  • 1次元の変換を規定する係数(パラメーター)は2のみです。

<2次元写像>.
 2次元写像は、(x,y) に対し (X,Y) を対応させます。
対応を表す式は、

  • X=ax+by
  • Y=cx+dy

x,y の一次式で表されるので1次変換といいます。
係数は a,b,c,d の4個となり、急に難しくなります。
これを簡潔に表現する手段が行列です。
上の式は、

   \(\begin{pmatrix} X \\ Y \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}\)  と表され、

\(A=\begin{pmatrix} a & b \\ c & d \end{pmatrix}\)\(X=\begin{pmatrix} X \\ Y \end{pmatrix}\)\(x=\begin{pmatrix} x \\ y \end{pmatrix}\) とすると、

   \(X=Ax\) と簡潔に表すことができます。

これは、点 (x,y) を 点 (X,Y) に移す変換です。
様々な行列 A に対し、点 (x,y) はどのように移動するでしょうか。

簡単な行列 A から始めて、自分の手と目で確かめましょう。

2.2 正方形の移動.

(0,0),(0,1),(1,0),(1,1) を頂点とする正方形の一次変換による像を図示します。
この正方形を1000個のドット(点)で表します。
runif( )関数により一様乱数を生成し、正方形として描画します。

  • \(E=\begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\)による像は、同じ正方形になります.
x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 1)
data <- data.frame(x = x, y = y)
A <- matrix(c(1, 0, 0, 1), 2, 2)
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(h = 0, v=0,col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(h=0,v = 0, col = "lightblue")

  • \(2E=\begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix}\)による像は、2倍の大きさの正方形になります.
x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 1)
data <- data.frame(x = x, y = y)
A <- matrix(c(2, 0, 0, 2), 2, 2)
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-3,3),ylim=c(-3,3))
abline(h = 0, v=0,col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.1,xlim=c(-3,3),ylim=c(-3,3),asp=1)
abline(h = 0, v=0,col = "lightblue", lty = 1)

一般に、
 \(kE\)による像はk倍の拡大縮小を表します。.
 \(kE\) は x座標をk倍に、y座標をk倍にする変換です。

  • \(2E=\begin{pmatrix} 1 & 0 \\ 0 & 2 \end{pmatrix}\)による像は、y軸方向に2倍の大きさに拡大されます。.
x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 1)
data <- data.frame(x = x, y = y)
A <- matrix(c(1, 0, 0, 2), 2, 2)
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(h = 0, v=0,col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(h = 0, v=0,col = "lightblue", lty = 1)

一般に、
 \(\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\) は x軸方向を\(k\)倍に、y軸方向を\(l\)倍にする変換です。

2.3 円の移動.

2次元の標準正規乱数を生成すると円状の分布になります。
この円状の分布がどのように移動するかみてみましょう。

  • \(\dfrac{1}{2}~E=\begin{pmatrix} 1/2 & 0 \\ 0 & 1/2 \end{pmatrix}\) による像は、\(\dfrac{1}{2}\) 倍の大きさの円になります。
n <- 10000
library(MASS)
mu <- c(0, 0)
Sigma <- matrix(c(1, 0, 0, 1), 2, 2)
data <- mvrnorm(n, mu, Sigma)
d <- data.frame(X=data[,1],Y=data[,2])
par(mfrow=c(1,2))
A <- matrix(c(1/2, 0, 0, 1/2), 2, 2)
plot(d,asp=1,col="lightblue",cex=0.1,xlim=c(-4,4),ylim=c(-4,4))
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
plot(d_new,col="pink",cex=0.1,xlim=c(-4,4),ylim=c(-4,4),asp=1)

  • \(\begin{pmatrix} 1 & 0 \\ 0 & 1/2 \end{pmatrix}\) による像は、y軸方向に\(\dfrac{1}{2}\) 倍に縮小された楕円になります。
n <- 10000
library(MASS)
mu <- c(0, 0)
Sigma <- matrix(c(1, 0, 0, 1), 2, 2)
data <- mvrnorm(n, mu, Sigma)
d <- data.frame(X=data[,1],Y=data[,2])
par(mfrow=c(1,2))
A <- matrix(c(1, 0, 0, 1/2), 2, 2)
plot(d,asp=1,col="lightblue",cex=0.1,xlim=c(-4,4),ylim=c(-4,4))
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
plot(d_new,col="pink",cex=0.1,xlim=c(-4,4),ylim=c(-4,4),asp=1)

2.4 拡大・縮小変換.

これまでは x軸・y軸方向への拡大縮小でした。
次に、x軸・y軸以外の方向への拡大縮小を考えます。

  一次変換は固有ベクトル方向の固有値倍の拡大・縮小

と言われています。

ある方向へ \(k\) 倍に拡大する一次変換があるとすれば、その方向ベクトルは変換によって向きは変わらず、大きさは \(k\) 倍になるはずです。このようなベクトルを行列の固有ベクトル\(k\)固有値と呼びます。
これらは行列の表す一次変換を特徴づけるものとなっています。

3 固有値と固有ベクトル.

3.1 固有ベクトルの定義.

  • 固有ベクトルは、その一次変換によって方向が変わらないベクトルをいいます。
  • 固有値は、その方向に沿った拡大・縮小の倍率を表します.

2次正方行列で表される一次変換については、次のように定義されます。

<定義>
   行列 \(A=\begin{pmatrix} a & b \\ c & d \end{pmatrix}\) に対し、 \(A\begin{pmatrix} x \\ y \end{pmatrix}=\lambda \begin{pmatrix} x \\ y \end{pmatrix}\).
   を満たす \(\lambda\) を固有値、\(\begin{pmatrix} x \\ y \end{pmatrix}\) を固有ベクトルといいます。

\(\begin{pmatrix} x \\ y \end{pmatrix} =\begin{pmatrix} 0 \\ 0 \end{pmatrix}\) は自明なので、\(\begin{pmatrix} 0 \\ 0 \end{pmatrix}\) 以外の解を持つ必要があります。

   \(\begin{pmatrix} a-\lambda & b \\ c & d-\lambda\end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} =\begin{pmatrix} 0 \\ 0 \end{pmatrix}\).

逆行列が存在すれば自明な解のみとなるので、逆行列を持たないようにする必要があります。
即ち、

   \(\begin{vmatrix} a-\lambda & b \\ c & d-\lambda \end{vmatrix}=0\)

固有値は、\(\lambda ^{2}-\left( a+d\right) \lambda +\left( ad-bc\right) =0\) より得られます。
この方程式を特性方程式(固有方程式)といいます。

固有方程式が実数の固有値を持てば、固有ベクトルが存在します。
異なる2つの実固有値を \(\lambda_1,~\lambda_2\) とすると、

固有ベクトルは \(\begin{pmatrix} b \\ \lambda_1-a \end{pmatrix}\) \(\begin{pmatrix} b \\ \lambda_2-a \end{pmatrix}\) です。

<不動直線>
原点 O は一次変換によって動きません。
原点を通り固有ベクトルを方向ベクトルとする直線は、一次変換によって動きません。
このような直線を不動直線といいます。
実際、
   \(\vec{p}=(t)\vec{u}\) に対し、
   \(\vec{p'}=tA\vec{u}=(tk) \vec{u}\) であり、
点Pは固有値倍に延長した点に移ります。

不動直線は固有ベクトルを方向ベクトルとします。
動かない直線を軸にして見ると、点の移動の様子がよく分かります。
一次変換は固有ベクトル方向の固有値倍の拡大・縮小なのです。

次に、具体的な例をタイプ別に調べてみましょう。

3.2 固有値が実数.

\(\begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix}\):x軸方向を a 倍に、y軸方向を b 倍にする変換.

特性方程式は.
   \(\lambda^{2}-(a+b)\lambda +ab =0\)  \(\therefore \lambda=a,~b\).
\(a\neq b\) とすると、固有値は異なる2つの実数です。

 \(\lambda=a\) に対する固有ベクトルは.

   \(\begin{pmatrix} 0 & 0 \\ 0 & b-a\end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} =\begin{pmatrix} 0 \\ 0 \end{pmatrix}\) より、 \(\begin{pmatrix} 1 \\ 0 \end{pmatrix}\)

 \(\lambda=b\) に対する固有ベクトルは.

   \(\begin{pmatrix} a-b & 0 \\ 0 & 0\end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} =\begin{pmatrix} 0 \\ 0 \end{pmatrix}\) より、 \(\begin{pmatrix} 0 \\ 1 \end{pmatrix}\)

2つの異なる固有値に対する固有ベクトルは直交します。

3.3 固有値が虚数.

<回転行列>.

固有ベクトルを持たない一次変換もあります。
原点周りの回転は必ず向きを変えるので、固有ベクトルは存在しません。
(ただし、0度、180度を除きます)

原点周りの \(\theta\) 回転によって、

  • 単位円上の点 \((1,0)\) は、単位円上の点 \((\cos\theta,\sin\theta)\) へ、
  • 単位円上の点 \((0,1)\) は、単位円上の点 \((-\sin\theta,\cos\theta)\)

移ります。

\(P=\begin{pmatrix} a & b \\ c & d \end{pmatrix}\) を回転行列とすると、

  \(\begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix}\) = \(\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}\)   \(\begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} 0 \\ 1 \end{pmatrix}\) = \(\begin{pmatrix} -\sin\theta \\ \cos\theta \end{pmatrix}\)  

あわせると、

  \(\begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} 1 & 0\\ 0 & 1 \end{pmatrix}\) = \(\begin{pmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \cos\theta \end{pmatrix}\)  

  \(\therefore P= \begin{pmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \cos\theta \end{pmatrix}\) 

特性方程式は.
   \(\lambda^{2}-2\cos\theta~\lambda +1 =0\).
   \(\lambda=\cos\theta \pm \sin\theta~i\).

2つの異なる複素固有値を持ち、絶対値は1です。

   \(\lambda=e^{\pm i\theta}\) と簡潔に書くこともできます。

3.4 直交行列.

回転行列の特徴は、

  • 2つの列ベクトルが直交していること.
  • 2つの列ベクトルの大きさが1であることです。

このような行列を直交行列といいます。

直交には90度回転と -90度回転があります。

  • 第1列ベクトルを90度回転したものが第2列ベクトルのとき.
      \(P= \begin{pmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \cos\theta \end{pmatrix}\) [直交行列タイプ1]
     特性方程式 \(\lambda^{2}-2\cos\theta~\lambda +1 =0\) は虚数解を持ち、変換は回転.

  • 第1列ベクトルを -90度回転したものが第2列ベクトルのとき.
      \(P= \begin{pmatrix} \cos\theta & \sin\theta\\ \sin\theta & -\cos\theta \end{pmatrix}\) [直交行列タイプ2].
     特性方程式 \(\lambda^{2}-1 =0\)\(\lambda=\pm 1\)を解に持ち、変換は線対称移動.

どちらのタイプでも、転置行列 \(P'\)は逆行列 \(P^{-1}\)に一致します。.

3.5 対称行列.

\(A= \begin{pmatrix} a & b \\ b & a \end{pmatrix}\) は、\(b \neq 0\) のとき、2つの異なる固有値を持ちます。
実際、
特性方程式 \(\lambda ^{2}-\left( 2a\right) \lambda +\left( a^2-b^2\right) =0\) の解は \(\lambda=a \pm b\)

固有ベクトルは、

 \(\begin{pmatrix} a & b \\ b & a \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix}=\lambda \begin{pmatrix} x \\ y \end{pmatrix}\) から \(\begin{pmatrix} a-\lambda & b \\ b & a-\lambda \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix}=\begin{pmatrix} 0 \\ 0 \end{pmatrix}\)

  • \(\lambda_1=a+b\) のとき
    \(\begin{pmatrix} -b & b \\ b & -b \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix}=\begin{pmatrix} 0 \\ 0 \end{pmatrix}\) \(\therefore~ \begin{pmatrix} x_{1} \\ y_{1} \end{pmatrix}=s \begin{pmatrix} 1 \\ 1 \end{pmatrix}\)

  • \(\lambda_2=a-b\)のとき.
    \(\begin{pmatrix} b & b \\ b & b \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix}=\begin{pmatrix} 0 \\ 0 \end{pmatrix}\)   \(\therefore~ \begin{pmatrix} x_{2} \\ y_{2} \end{pmatrix}=t \begin{pmatrix} -1 \\ 1 \end{pmatrix}\)  

固有ベクトルの大きさを1にする正規化をしておくと、

    \(P=\begin{pmatrix} x_{1} &x_{2} \\ y_{1} &y_{2} \end{pmatrix}\)  は直交行列です。

例えば、\(s=t=\dfrac{1}{\sqrt{2}}\) とすると、
   \(P=\begin{pmatrix} 1/\sqrt{2} & -1/\sqrt{2} \\ 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\)  \(P^{-1}=\begin{pmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ -1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\).

逆行列 \(P^{-1}\)\(P\)の転置行列 \(P'\) に一致しています。.

4 行列と一次変換.

行列がどのような一次変換を表すか実証的に調べます。

<方法>.

  • eigen( )関数で固有値と固有ベクトルを求める.
    (固有ベクトルは標準化され長さは1になっています).
  • 不動直線と単位矩形の移動を描画する.
    (基本矩形は固有ベクトルで張られる平行四辺形です).

ここでは、対称行列で表される一次変換を中心に調べます。

4.1 対称行列タイプ1.

  • \(\begin{pmatrix} a & b \\ b & a \end{pmatrix}\):対称行列タイプ1.
    2つの固有値は \(a\pm b\)、固有ベクトルは直交します.

不動直線は、y=x と y=-x であり、

  • y=x 方向に a+b 倍.
  • y=-x 方向に a-b 倍の拡大縮小を行います。

具体例で確かめましょう。

b <- 0.2
A <- matrix(c(1, b, b, 1), 2, 2)
A
##      [,1] [,2]
## [1,]  1.0  0.2
## [2,]  0.2  1.0
eigen <- eigen(A)
v <- eigen$vectors
v
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068
e <- eigen$values
e
## [1] 1.2 0.8
  • 第1固有ベクトルは、(1,1) 方向の単位ベクトルで、1.2倍の拡大
  • 第2固有ベクトルは、(-1,1) 方向の単位ベクトルで、0.8倍の縮小です。

4.1.1 単位正方形の像.

<固有ベクトルで張られる正方形の像>.

s <- runif(1000, min = 0, max = 1)
x_1 <- sapply(s, function(scalar) scalar * v[,1])
t <- runif(1000, min = 0, max = 1)
x_2 <- sapply(t, function(scalar) scalar * v[,2])
x <- x_1+x_2
data <- data.frame(x = x[1,], y = x[2,])
par(mfrow=c(1,2))
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
plot(data,asp=1,col="lightblue",cex=0.2,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.2,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=v[1,1],  y1=v[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=v[1,2],  y1=v[2,2], code=2, col="red")

Rで算出される固有ベクトルは長さ1に標準化され、青ベクトルと赤ベクトルで表示されています。
固有ベクトルで張られる正方形は、不動直線方向に拡大縮小された長方形に移ります。右図から、青方向に拡大、赤方向に縮小されていることが読み取れます。

<(1,0),(0,1)で張られる正方形の像>.

x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 1)
data <- data.frame(x = x, y = y)
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=v[1,1],  y1=v[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=v[1,2],  y1=v[2,2], code=2, col="red")

<(1,0),(0,2)で張られる正方形の像>.

x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 2)
data <- data.frame(x = x, y = y)

d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=v[1,1],  y1=v[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=v[1,2],  y1=v[2,2], code=2, col="red")

青の方向に1.2倍に拡大し、赤の方向に0.8倍に縮小することで、右図になるイメージです。
行列の b を色々変えてやってみましょう。
このように実際にハンドリングすることで、手を通して一次変換の本質を掴みましょう。

4.2 対称行列タイプ2.

  • \(\begin{pmatrix} a & b \\ b & d \end{pmatrix}\):対称行列タイプ2.
    2つの異なる実固有値を持ち、固有ベクトルは直交します。

実際、
特性方程式 \(\lambda ^{2}-\left( a+d\right) \lambda +\left( ad-b^2\right) =0\) について、

判別式 \(D=(a-d)^2+4b^2>0\).

異なる2つの実固有値を \(\lambda_1,~\lambda_2\) とすると、

固有ベクトルは \(\begin{pmatrix} b \\ \lambda_1-a \end{pmatrix}\) \(\begin{pmatrix} b \\ \lambda_2-a \end{pmatrix}\)

その内積は、

   \(\begin{split} b^2+(\lambda_1-a)(\lambda_2-a)&=b^2+a^2-(\lambda_1+\lambda_2)a+\lambda_1\lambda_2\\    &=b^2+a^2-(a+d)a+ad-b^2=0    \end{split}\).

対称行列による一次変換では、2つの固有ベクトルは直交します。

具体例で確かめましょう。

b <- 0.5
A <- matrix(c(1, b, b, 2), 2, 2)
A
##      [,1] [,2]
## [1,]  1.0  0.5
## [2,]  0.5  2.0
eigen <- eigen(A)
v <- eigen$vectors
v
##           [,1]       [,2]
## [1,] 0.3826834 -0.9238795
## [2,] 0.9238795  0.3826834
e <- eigen$values
e
## [1] 2.2071068 0.7928932
s <- runif(1000, min = 0, max = 1)
x_1 <- sapply(s, function(scalar) scalar * v[,1])
t <- runif(1000, min = 0, max = 1)
x_2 <- sapply(t, function(scalar) scalar * v[,2])
x <- x_1+x_2
data <- data.frame(x = x[1,], y = x[2,])
par(mfrow=c(1,2))
d_new <- A %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
plot(data,asp=1,col="lightblue",cex=0.2,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
plot(d_new,col="pink",cex=0.2,xlim=c(-2,2),ylim=c(-2,2),asp=1)
abline(a = 0, b=v[2,1]/v[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=v[2,2]/v[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=v[1,1],  y1=v[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=v[1,2],  y1=v[2,2], code=2, col="red")

青の方向に 2.21倍に拡大し、赤の方向に0.79倍に縮小することで、右図になるイメージです。

5 内積と正射影.

これまでの例から、
 「対称行列による一次変換は、直交する固有ベクトル方向への固有値倍の拡大縮小を表す」ことは分かりました。

しかし、対称行列を見ただけでは、その方向と倍率は分りません。

指定された直交ベクトルを固有ベクトルに持ち、その方向へ指定倍率に拡大縮小する一次変換を作ることはできるのでしょうか。

以下では、このことを目標にします。

ここまでで分かっているのは、x軸とy軸が方向ベクトルのとき、
 \(B=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\) は x軸方向を\(k\)倍に、y軸方向を\(l\)倍にする変換であることです。

この横軸縦軸方向への拡大縮小行列を用いて、x軸・y軸以外の方向へ拡大縮小する一次変換行列を作ることを考えます。

そのためには、ベクトルの内積を用いた座標変換が必要になります。

5.1 内積の定義.

ベクトル \(\overrightarrow{a}=\begin{pmatrix} a_1 \\ a_2 \end{pmatrix}\)  \(\overrightarrow{b}=\begin{pmatrix} b_1 \\ b_2 \end{pmatrix}\) の内積は、

  • \(\overrightarrow{a}\cdot \overrightarrow{b}=|\overrightarrow{a}||\overrightarrow{b}|\cos\theta\) (なす角\(\theta\)による定義).

  • \(\overrightarrow{a}\cdot \overrightarrow{b}=a_1b_1+a_2b_2\) (成分による定義).

この2つの定義は余弦定理によって相互に繋がっています。

特に、\(\overrightarrow{p}\)単位ベクトルのとき、

  • \(\overrightarrow{p}\cdot \overrightarrow{x}\)は、\(\overrightarrow{p}\)方向への \(\overrightarrow{x}\)の正射影の座標を表します。

<転置行列の積による表現>.

\(P=\begin{pmatrix} p_1 & q_1 \\ p_2 & q_2 \end{pmatrix}\) \(p=\begin{pmatrix} p_1\\ p_2 \end{pmatrix}\) \(q=\begin{pmatrix} q_1\\ q_2 \end{pmatrix}\) とすると.

\(P=\begin{pmatrix} p & q \end{pmatrix}\) と行列を簡潔に表現できます。

Pの転置行列は \(P'=\begin{pmatrix} p'\\ q' \end{pmatrix}\) となります。

特に、Pが直交行列ならば \(p,~q\) は直交する単位ベクトルです。

ベクトル \(x=\begin{pmatrix} x_1\\ x_2 \end{pmatrix}\) に対し、

  • p方向への正射影の座標は \(\overrightarrow{p} \cdot \overrightarrow{x}=p'x\)
  • q方向への正射影の座標は \(\overrightarrow{q} \cdot \overrightarrow{x}=q'x\)

このように、ベクトル内積は行列の積として計算されます。

5.2 座標の変換.

Pが直交行列のとき、\(p,~q\) は直交する単位ベクトルです。

  • 原点を通るベクトル p 方向の直線を p軸.
  • 原点を通るベクトル q 方向の直線を q軸.

このように新しい座標軸を考えると、p軸、q軸への正射影は新しい座標系のもとでの座標を意味します。

p軸、q軸を直交座標軸とする x の新座標は.

   \(P'x=\begin{pmatrix} p'\\ q' \end{pmatrix} x = \begin{pmatrix} p'x\\ q'x \end{pmatrix}\) で表されます。.

従って、\(P'x= \begin{pmatrix} p'x\\ q'x \end{pmatrix}\) は新しい座標への座標変換を意味します。

整理しておくと、

  • \(P'=P^{-1}\) は、新しい座標系への座標変換.
  • \(P\) は、元の座標系に戻す座標変換です。
vector1 <- c(1, 1)
v1 <- vector1/sqrt(sum(vector1^2))
vector2 <- c(-1, 1)
v2 <- vector2/sqrt(sum(vector2^2))
P <- matrix(cbind(v1, v2), 2, 2)
P
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068
x <- runif(1000, min = 0, max = 1)
y <- runif(1000, min = 0, max = 1)
data <- data.frame(x = x, y = y)

d_new <- t(P) %*% t(data)
d_new <- data.frame(X=d_new[1,],Y=d_new[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v1[2]/v1[1],col = "lightblue", lty = 1)
abline(a = 0, b=v2[2]/v2[1],col = "lightblue", lty = 1)
plot(d_new,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1,
     xlab="p",ylab="q")
abline(h=0,v = 0, col = "lightblue")

左図の単位正方形を、直線 y=x, y=-x を p軸,q軸とする新しい座標系へ変換すると、
新座標系では右図の単位正方形になります。

  • 固有ベクトルを基底とする座標に変換することで、2つの固有ベクトル方向を横軸縦軸に設定しました。

5.3 拡大・縮小.

固有ベクトル方向へ 固有値倍に拡大縮小します。

  • \(\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\)によって、横軸縦軸方向に拡大縮小します。

横軸方向に k=1.2倍、縦軸方向に l=0.8倍します。

par(mfrow=c(1,2))
plot(d_new,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1,
     xlab="p",ylab="q")
abline(h=0,v = 0, col = "lightblue")

B <- matrix(c(1.2, 0, 0, 0.8), 2, 2)
d_new2 <- B %*% t(d_new)
d_new2 <- data.frame(X=d_new2[1,],Y=d_new2[2,])
plot(d_new2,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1,
     xlab="p",ylab="q")
abline(h=0,v = 0, col = "lightblue")

5.4 元の座標系へ.

Pによって元の座標系に戻します。

par(mfrow=c(1,2))
plot(d_new2,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1,
     xlab="p",ylab="q")
abline(h=0,v = 0, col = "lightblue")
d_new3 <- P %*% t(d_new2)
d_new3 <- data.frame(X=d_new3[1,],Y=d_new3[2,])
plot(d_new3,asp=1,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v1[2]/v1[1],col = "lightblue", lty = 1)
abline(a = 0, b=v2[2]/v2[1],col = "lightblue", lty = 1)

5.5 合成行列.

以上の3つのプロセスを合成します。

直交する単位ベクトル \(p,q\) により座標方向が与えられ、各方向への拡大縮小倍率が指定されているとします。

\(p,q\) を列ベクトルとする行列 \(P=\begin{pmatrix} p & q \end{pmatrix}\) は直交行列です。

  • 指定された座標系に座標変換する行列は転置行列 \(P'\)で与えられ、
  • 新しい各座標を、\(k\)倍、\(l\)倍に変換する行列は \(B=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\)で与えられ、
  • 元の座標系に戻す行列は \(P'\) の逆行列 \(P\) で与えられます。

単位正方形に対して、この3つの操作を連続して行うと、

最初と最後だけ見れば、単位ベクトル \(p,q\)方向に、\(k\)倍、\(l\)倍に拡大縮小していることになります。

<合成行列>.

一方、これら3つのの行列を合成した \(PBP'\) を計算すると、.

A <- P %*% B %*% t(P)
A
##      [,1] [,2]
## [1,]  1.0  0.2
## [2,]  0.2  1.0

4.1の対称行列タイプ1の行列になります。

このAによって単位正方形を変換すると、

d_new4 <- A %*% t(data)
d_new4 <- data.frame(X=d_new4[1,],Y=d_new4[2,])
par(mfrow=c(1,2))
plot(data,asp=1,col="lightblue",cex=0.1,xlim=c(-2,2),ylim=c(-2,2))
abline(a = 0, b=v1[2]/v1[1],col = "lightblue", lty = 1)
abline(a = 0, b=v2[2]/v2[1],col = "lightblue", lty = 1)
plot(d_new4,col="pink",cex=0.1,xlim=c(-2,2),ylim=c(-2,2),asp=1,
     xlab="p",ylab="q")
#abline(h=0,v = 0, col = "lightblue")
abline(a = 0, b=v1[2]/v1[1],col = "lightblue", lty = 1)
abline(a = 0, b=v2[2]/v2[1],col = "lightblue", lty = 1)

合成行列による変換とタイプ1の対称行列による変換は結果が一致します。

従って、変換の結果が一致するので、

   \(PBP'=A\) と考えられます。

[まとめ]
 \(p,~q\) は直交する単位ベクトル、行列 \(P=\begin{pmatrix} p & q \end{pmatrix}\) とするとき、

  • ベクトル\(p\)方向へ\(k\)倍、ベクトル\(q\)方向へ\(l\)倍の変換は、
       \(A=P\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}P'\) で与えられる。
  • \(A\)は対称行列であり、\(p,~q\)は固有ベクトル、\(k,~l\)は固有値。

このことは次のように確かめられます。
  \(Ap=P \begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix} \begin{pmatrix} p'\\ q' \end{pmatrix}p= \begin{pmatrix} p & q \end{pmatrix} \begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix} \begin{pmatrix} 1\\ 0 \end{pmatrix}=kp\)

  \(Aq=P \begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix} \begin{pmatrix} p'\\ q' \end{pmatrix}q= \begin{pmatrix} p & q \end{pmatrix} \begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix} \begin{pmatrix} 0\\ 1 \end{pmatrix}=lq\)

\(P'AP=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\) と表現したとき、行列\(A\)の対角化といいます。

6 行列の対角化.

前節の「内積と正射影」では、p軸、q軸への正射影を用いて座標変換を構成しました。

対称行列 \(A\) について、\(p,~q\)\(A\)の正規化された固有ベクトル、\(k,~l\)は固有値とします。
\(P=\begin{pmatrix} p & q \end{pmatrix}\) とするとき、p軸、q軸を直交座標軸とする \(x\) の新座標は.

   \(P'x= \begin{pmatrix} p'x\\ q'x \end{pmatrix}\) で求められます。
これは、

 「単位ベクトルとの内積は、単位ベクトル方向への正射影を表す」

という事実に基づいています。

以下では、内積と正射影に頼らず、基底 という考え方に基づいて座標変換を構成します。
これにより、対角化は対称行列以外の一般の行列に拡張されます。

6.1 基底と座標.

 \(e_1=\begin{pmatrix} 1\\ 0 \end{pmatrix}\) \(e_2=\begin{pmatrix} 0\\ 1 \end{pmatrix}\) とすると、

   \(\begin{pmatrix} x\\ y \end{pmatrix}= x\begin{pmatrix} 1\\ 0 \end{pmatrix}+y\begin{pmatrix} 0\\ 1 \end{pmatrix}\)

 \(\overrightarrow{x}=\begin{pmatrix} x\\ y \end{pmatrix}\) とおいてベクトル記号で表すと、

   \(\overrightarrow{x}=x~\overrightarrow{e_1}+y~\overrightarrow{e_2}\)

このように、任意のベクトルは一次独立な2つのベクトルの線形結合で表されます。
係数 \((x,y)\)\(\overrightarrow{e_1},~\overrightarrow{e_2}\) を基底とした座標といいます。

基底を固有ベクトル \(\overrightarrow{p},~\overrightarrow{q}\) としたとき、

   \(\overrightarrow{x}=u~\overrightarrow{p}+v~\overrightarrow{q}\)

係数 \((u,v)\)\(\overrightarrow{p},~\overrightarrow{q}\) を基底としたときの座標です。

このように、同じベクトルでも基底が変われば座標は変わります。
そこで、基底が変わった場合、座標がどのように変化するか調べておく必要があります。

6.2 基底の変換.

\(\overrightarrow{e_1},~\overrightarrow{e_2}\) を基底とした座標 \((x,y)\)\(\overrightarrow{p},~\overrightarrow{q}\) を基底とした座標 \((p,q)\)との関係は、

   \(x~\overrightarrow{e_1}+y~\overrightarrow{e_2}=u~\overrightarrow{p}+v~\overrightarrow{q}\)

行列で表せば、
   \(\begin{pmatrix} e_1 & e_2 \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix} = \begin{pmatrix} p & q \end{pmatrix} \begin{pmatrix} u\\ v \end{pmatrix}\)

よって、\(\begin{pmatrix} x\\ y \end{pmatrix} = \begin{pmatrix} p & q \end{pmatrix} \begin{pmatrix} u\\ v \end{pmatrix}\)

\(P=\begin{pmatrix} p & q \end{pmatrix}\) なので、

   \(\begin{pmatrix} u\\ v \end{pmatrix}=P^{-1}\begin{pmatrix} x\\ y \end{pmatrix}\) 

Aが対称行列ならば、Pは直交行列なので、

   \(\begin{pmatrix} u\\ v \end{pmatrix}=P'\begin{pmatrix} x\\ y \end{pmatrix}\)     

これは内積と正射影を用いて構成した座標変換の式と一致しています。

6.3 固有ベクトル基底.

基底を固有ベクトルとすることで、\(A\) による一次変換の仕組みが見えてきます。

\(\overrightarrow{x}=u~\overrightarrow{p}+v~\overrightarrow{q}\) に対し、

   \(A\overrightarrow{x}=ku~\overrightarrow{p}+lv~\overrightarrow{q}\)

一次変換は、係数を固有値倍する変換となります。
固有ベクトルを基底とした場合、一次変換によって座標はそれぞれの固有値倍になります。
これが「固有ベクトル方向の固有値倍の拡大縮小」の意味です。

行列で表現すると、

   \(A\overrightarrow{x}=\begin{pmatrix} p & q \end{pmatrix} \begin{pmatrix} ku\\ lv \end{pmatrix} =P\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\begin{pmatrix} u \\ v \end{pmatrix}\)

\(B=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\)\(\begin{pmatrix} u\\ v \end{pmatrix}=P^{-1}\begin{pmatrix} x\\ y \end{pmatrix}=P^{-1}\overrightarrow{x}\) と表すと、

   \(A\overrightarrow{x}=PBP^{-1}\overrightarrow{x}\).

任意の \(\overrightarrow{x}\) に対して成立するので、\(A=PBP^{-1}\)

表現を変えて、

   \(P^{-1}AP=B\) とすると \(P^{-1}AP=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\).

これを行列の対角化といいます。

\(A\) を対角化することで、固有ベクトル方向への拡大縮小率が分かります。

7 二次形式との関係.

7.1 二次形式の定義.

\(x_1,x_2\) の2次形式とは、\(x_1,x_2\) の2次の項からなる多項式のことです。

\(x=\begin{pmatrix} x_1\\ x_2 \end{pmatrix}\) に対し、
   \(x'x=\begin{pmatrix} x_1 & x_2\end{pmatrix} \begin{pmatrix} x_1\\ x_2\end{pmatrix} =x_1^2+x_2^2\) は最も簡単な2次形式です。

\(x'x\) はベクトルの平方 \(x^2\) に相当します。

   \(\begin{split}x'Ax&=\begin{pmatrix} x_1 & x_2\end{pmatrix} \begin{pmatrix} a & b \\ c & d\end{pmatrix} \begin{pmatrix} x_1\\ x_2\end{pmatrix}\\ &=ax_1^2+(b+c)x_1x_2+dx_2^2 \end{split}\).

これは一般の2次形式です。

しかし、2次形式の係数は3つですから、パラメータが多すぎます。
そこで、\(b=c\) とすれば、

   \(\begin{split}x'Ax&=\begin{pmatrix} x_1 & x_2\end{pmatrix} \begin{pmatrix} a & b \\ b & d\end{pmatrix} \begin{pmatrix} x_1\\ x_2\end{pmatrix}\\ &=ax_1^2+2bx_1x_2+dx_2^2 \end{split}\).

このように、2次形式は対称行列で表現できます。

対称行列は2つの異なる実固有値を持ち、固有ベクトルは直交します。
対称行列は、固有ベクトルで構成した直交行列を用いて対角化できます。

7.2 二次形式の標準化.

   \(ax^2+2bxy+cy^2=\begin{pmatrix} x & y\end{pmatrix} \begin{pmatrix} a & b \\ b & c\end{pmatrix} \begin{pmatrix} x\\ y\end{pmatrix}\)

\(x=\begin{pmatrix} x\\ y \end{pmatrix}\) \(A=\begin{pmatrix} a & b \\ b & c\end{pmatrix}\) と簡潔に表現すると、

   \(ax^2+2bxy+cy^2=x'Ax\)

対称行列 \(A\) の固有値 \(k,~l\) に対する固有ベクトル \(p,~q\) は正規化されているとします。
このとき、直交行列 \(P=\begin{pmatrix} p & q \end{pmatrix}\) によって、

   \(A=\begin{pmatrix} p & q\end{pmatrix} \begin{pmatrix} k & 0 \\ 0 & l\end{pmatrix} \begin{pmatrix} p'\\ q'\end{pmatrix}\) が成立します。

よって、\(B=\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\) とおけば \(A=PBP'\) と簡潔に表され、

  • \(P'\)は p軸、q軸を直交座標軸とする新座標への座標変換
  • \(B\)は横軸縦軸方向への拡大縮小
  • \(P\)は元の座標系に戻す変換

を表します。
 

さて、\(P'\) が新座標への座標変換であることに注目し、
    新座標 \(u=\begin{pmatrix} u \\ v \end{pmatrix} =P'x\) とおきます。
 
以下で、\(A=PBP'\) を用いて、xの2次形式をuの2次形式に変形します。

<xの2次形式をuの2次形式に>.

\(A=PBP'\)\(x'Ax\)に代入すると、

   \(x'Ax=x'PBP'x\).

ここで注目すべきは、

   \(u=P'x\)、 \(u'=x'P\)

となっていることです。

   \(x'Ax=x'PBP'x=u'Bu\).

\(u'Bu= \begin{pmatrix} u & v \end{pmatrix}\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\begin{pmatrix} u \\ v \end{pmatrix} =ku^2+lv^2\) であるので、

   \(ax^2+2bxy+cy^2 =ku^2+lv^2\).

xの2次形式は、uの2次形式に書き直されています

右辺を2次形式の標準形といいます。
標準形は固有値を係数とする平方和になっています。

7.3 二次曲線への応用.

  \(ax^2+2bxy+cy^2+dx+ey+f=0\)

で表される図形を2次曲線といいます。

式の前半

   \(ax^2+2bxy+cy^2=x'Ax\) は2次形式であり、

直交行列による座標変換により標準形 \(ku^2+lv^2\) に変形されます。

2次曲線は \(ku^2+lv^2+mu+nv+r=0\) となり、
平行移動によってグラフの形状を判定できます。

2次曲線の形状には「楕円・双曲線・放物線」の3つのタイプがあります。

8 二次曲線のグラフ.

   \(ax^2+2bxy+cy^2=1\) について、

どのタイプの2次曲線になるかを考えます。

    \(ax^2+2bxy+cy^2=\begin{pmatrix} x & y \end{pmatrix}\begin{pmatrix} a & b \\ b & c \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} =x'Ax\).

行列 \(A\) は対称行列です。

「7.2 二次形式の標準化」でみたように、

対称行列 \(A\) の固有値 \(k,~l\) に対する固有ベクトル \(p,~q\) は正規化されているとすると、

直交行列 \(P=\begin{pmatrix} p & q \end{pmatrix}\) によって、

  • \(P^{-1}A P =\begin{pmatrix} k & 0 \\ 0 & l \end{pmatrix}\) と対角化され、

\(\begin{pmatrix} u \\ v \end{pmatrix} =P'\begin{pmatrix} x \\ y \end{pmatrix}\) という座標変換によって、

  • \(ax^2+2bxy+cy^2 =ku^2+lv^2\)  と標準形に変形されます。

 (固有値 \(k,l\) が標準形の係数となっていることに注意しましょう)

二次曲線は、

  • \(k,l\) が共に正ならば楕円.
  • \(k,l\) が異符号ならば双曲線.

と予想されます。

<まとめ>

 2次曲線の形状は、

  特性方程式 \(\lambda ^{2}-\left( a+c\right) \lambda +\left( ac-b^2\right) =0\).

 の解の符号の問題に帰着され、

  • \(a+c>0\)\(ac-b^2>0\) ならば楕円.

  • \(ac-b^2<0\) ならば双曲線.

このように概観できます。

  • 行列のトレース \(tr(A)=a+c\) は固有値の和であり、
  • \(\Delta=ac-b^2\)\(A\) の行列式になっています。

トレースと行列式は不変量であり、対角化しても値は変わりません。

以下で、具体的にみていきましょう。

8.1 対称行列タイプ1.

対称行列タイプ1 \(A= \begin{pmatrix} a & b \\ b & a \end{pmatrix}\) から考えます。

「3.5 対称行列」で見たように、このタイプの対称行列は、

  • 固有値  \(\lambda_1=a+b\)  \(\lambda_2=a-b\).
  • 固有ベクトル \(\begin{pmatrix} 1 \\ 1 \end{pmatrix}\)  \(\begin{pmatrix} -1 \\ 1 \end{pmatrix}\)

固有値と固有ベクトルは簡明です。
不動直線は、y=x と y=-x であり、これが座標変換による新しい座標軸です。

具体例で考えます。

8.1.1 楕円  

   \(5x^{2}+4xy+5y^{2} =1\).

左辺の2次形式は対称行列を用いて表すことができます。

  \(5x^{2}+4xy+5y^{2} = \begin{pmatrix} x & y \end{pmatrix}\begin{pmatrix} 5 & 2 \\ 2 & 5 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} =x'Ax\).

\(A=\begin{pmatrix} 5 & 2 \\ 2 & 5 \end{pmatrix}\) は対称行列タイプ1なので、

  • 固有値  \(\lambda_1=5+2=7\)  \(\lambda_2=5-2=3\).
  • 固有ベクトル \(\begin{pmatrix} 1 \\ 1 \end{pmatrix}\)  \(\begin{pmatrix} -1 \\ 1 \end{pmatrix}\)

不動直線 \(y=x,~y=-x\) を u軸、v軸としてみると、

   \(5x^{2}+4xy+5y^{2} =3u^2+7v^2=1\).

2次曲線は、 \(y=x,~y=-x\) を軸とする楕円になります。

[参考]
正規化した固有ベクトルを列とする直交行列は、

   \(P=\begin{pmatrix} 1/\sqrt{2} & -1/\sqrt{2} \\ 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\).

\(P\) を用いて、\(P'AP=\begin{pmatrix} 3 & 0 \\ 0 & 7 \end{pmatrix}=B\)と対角化されます。

<グラフ>

  • filter( ) 関数を用いて、楕円の内部領域の点集合 d1 を出力します。
library(dplyr)
x <- runif(10000, min = -1, max = 1)
y <- runif(10000, min = -1, max = 1)
df <- data.frame(x = x, y = y)
d1 <- df %>%
  filter(5*x^2 +4*x*y + 5*y^2 < 1)
d1 <- data.frame(x = d1$x, y = d1$y)
  • 二次形式を表す行列 \(A\) の固有値と固有ベクトルを求めます。
  • 固有ベクトルで構成される行列 P により、
    d1 の座標を固有ベクトルを直交座標とする d2 に座標変換します。
A <- matrix(c(5, 2, 2, 5), 2, 2)
A
##      [,1] [,2]
## [1,]    5    2
## [2,]    2    5
eigen <- eigen(A)
eigen
## eigen() decomposition
## $values
## [1] 7 3
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068
P <- eigen$vectors
P
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068
d2 <- t(P) %*% t(d1)
d2 <- data.frame(x = d2[1,], y = d2[2,])
  • d1 を、直交する固有ベクトル(青と赤)とともに左に表示し、
  • 新座標を横軸縦軸とした d2 を右に表示します。
par(mfrow=c(1,2))
plot(d1,asp=1,col="pink",cex=0.1,xlim=c(-1.2,1.2),ylim=c(-1.2,1.2))
abline(a = 0, b=P[2,1]/P[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=P[2,2]/P[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=P[1,1],  y1=P[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=P[1,2],  y1=P[2,2], code=2, col="red")
plot(d2,asp=1,col="pink",cex=0.1,xlim=c(-1.2,1.2),ylim=c(-1.2,1.2))
abline(h = 0, v=0,col = "lightblue", lty = 1)

楕円が縦長になっているのは、固有値が降順(大きい順)に出力されているためです。固有ベクトルの順序を変えれば、横長の楕円になります。

P <- P[, c(2, 1)]
d2 <- t(P) %*% t(d1)
d2 <- data.frame(x = d2[1,], y = d2[2,])
par(mfrow=c(1,2))
plot(d1,asp=1,col="pink",cex=0.1,xlim=c(-1.2,1.2),ylim=c(-1.2,1.2))
abline(a = 0, b=P[2,1]/P[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=P[2,2]/P[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=P[1,1],  y1=P[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=P[1,2],  y1=P[2,2], code=2, col="red")
plot(d2,asp=1,col="pink",cex=0.1,xlim=c(-1.2,1.2),ylim=c(-1.2,1.2))
abline(h = 0, v=0,col = "lightblue", lty = 1)

8.1.2 双曲線.

固有値が異符号の場合は、双曲線になります。

   \(x^{2}+4xy+y^{2} =1\).

左辺の2次形式は対称行列を用いて表すことができます。

  \(x^{2}+4xy+y^{2} = \begin{pmatrix} x & y \end{pmatrix}\begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} =x'Ax\).

\(A=\begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix}\) は対称行列タイプ1なので、

  • 固有値  \(\lambda_1=1+2=3\)  \(\lambda_2=1-2=-1\).
  • 固有ベクトル \(\begin{pmatrix} 1 \\ 1 \end{pmatrix}\)  \(\begin{pmatrix} -1 \\ 1 \end{pmatrix}\)

不動直線 \(y=x,~y=-x\) を u軸、v軸としてみると、

   \(x^{2}+4xy+y^{2} =3u^2-v^2=1\).

2次曲線は、 \(y=x\) を主軸、\(y=-x\) を共役軸とする双曲線になります。

[参考]
正規化した固有ベクトルを列とする直交行列は、

   \(P=\begin{pmatrix} 1/\sqrt{2} & -1/\sqrt{2} \\ 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\).

\(P\) を用いて、\(P'AP=\begin{pmatrix} 3 & 0 \\ 0 & -1 \end{pmatrix}=B\)と対角化されます。

<グラフ>

  • filter( ) 関数を用いて、双曲線の内側領域の点集合 d1 を出力します。
library(dplyr)
x <- runif(10000, min = -2.5, max = 2.5)
y <- runif(10000, min = -2.5, max = 2.5)
df <- data.frame(x = x, y = y)
d1 <- df %>%
  filter(x^2 +4*x*y + y^2 < 1)
d1 <- data.frame(x = d1$x, y = d1$y)
  • 二次形式を表す行列 \(A\) の固有値と固有ベクトルを求めます。
  • 固有ベクトルで構成される行列 P により、
    d1 の座標を固有ベクトルを直交座標とする d2 に座標変換します。
A <- matrix(c(1, 2, 2, 1), 2, 2)
A
##      [,1] [,2]
## [1,]    1    2
## [2,]    2    1
eigen <- eigen(A)
P <- eigen$vectors
P
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068
d2 <- t(P) %*% t(d1)
d2 <- data.frame(x = d2[1,], y = d2[2,])
  • d1 を、直交する固有ベクトル(青と赤)とともに左に表示し、
  • 新座標を横軸縦軸とした d2 を右に表示します。
par(mfrow=c(1,2))
plot(d1,asp=1,col="pink",cex=0.1,xlim=c(-1.5,1.5),ylim=c(-1.5,1.5))
abline(a = 0, b=P[2,1]/P[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=P[2,2]/P[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=P[1,1],  y1=P[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=P[1,2],  y1=P[2,2], code=2, col="red")
plot(d2,asp=1,col="pink",cex=0.1,xlim=c(-1.5,1.5),ylim=c(-1.5,1.5))
abline(h = 0, v=0,col = "lightblue", lty = 1)

対称行列タイプ1は固有値の計算が容易です。
固有ベクトルも y=x y=-x 方向であることが分かっています。

まず、このタイプで色々な例を作ってみると良いでしょう。

8.2 対称行列タイプ2

対称行列タイプ2 \(A= \begin{pmatrix} a & b \\ b & c \end{pmatrix}\) を考えます。

2つの異なる実固有値を持ち、固有ベクトルは直交します。

   特性方程式 \(\lambda ^{2}-\left( a+c\right) \lambda +\left( ac-b^2\right) =0\)

の異なる2つの実固有値を \(\lambda_1,~\lambda_2\) とすると、

   \(\lambda_1+\lambda_2=a+c\)   \(\lambda_1\lambda_2=ac-b^2\).

行列のトレース \(a+c\) 、行列式 \(ac-b^2\) の符号によって \(\lambda_1,~\lambda_2\) の 符号は決まります。

二次曲線は、

  • \(\lambda_1,~\lambda_2\) が共に正ならば楕円.
  • \(\lambda_1,~\lambda_2\) が異符号ならば双曲線.

固有ベクトルの方向は、y=x,y=-x ではありませんが、仕組みは対称行列タイプ1のときと同様です。

   \(x^{2}+xy+2y^{2} =1\).

左辺の2次形式は対称行列を用いて表すことができます。

  \(x^{2}+xy+2y^{2} = \begin{pmatrix} x & y \end{pmatrix}\begin{pmatrix} 1 & 1/2 \\ 1/2 & 2 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} =x'Ax\).

\(A=\begin{pmatrix} 1 & 1/2 \\ 1/2 & 2 \end{pmatrix}\) は対称行列タイプ2であり、固有値も固有ベクトルも計算は単純ではありませんが、Rのコードは同じです。

ここでは、Rを用いた描画にとどめます。

library(dplyr)
x <- runif(10000, min = -1.5, max = 1.5)
y <- runif(10000, min = -1.5, max = 1.5)
df <- data.frame(x = x, y = y)
d1 <- df %>%
  filter(x^2 +x*y + 2*y^2 < 1)
d1 <- data.frame(x = d1$x, y = d1$y)
A <- matrix(c(1, 0.5, 0.5, 2), 2, 2)
A
##      [,1] [,2]
## [1,]  1.0  0.5
## [2,]  0.5  2.0
eigen <- eigen(A)
P <- eigen$vectors
P
##           [,1]       [,2]
## [1,] 0.3826834 -0.9238795
## [2,] 0.9238795  0.3826834
d2 <- t(P) %*% t(d1)
d2 <- data.frame(x = d2[1,], y = d2[2,])
par(mfrow=c(1,2))
plot(d1,asp=1,col="pink",cex=0.1,xlim=c(-1.5,1.5),ylim=c(-1.5,1.5))
abline(a = 0, b=P[2,1]/P[1,1],col = "lightblue", lty = 1)
abline(a = 0, b=P[2,2]/P[1,2],col = "lightblue", lty = 1)
arrows(x0=0, y0=0, x1=P[1,1],  y1=P[2,1], code=2, col="blue")
arrows(x0=0, y0=0, x1=P[1,2],  y1=P[2,2], code=2, col="red")
plot(d2,asp=1,col="pink",cex=0.1,xlim=c(-1.5,1.5),ylim=c(-1.5,1.5))
abline(h = 0, v=0,col = "lightblue", lty = 1)