線形代数は高校数学では扱われていません。
しかし、行列と一次変換は多変量解析に不可欠なツールです。
本書は、シミュレーションを用いて線形代数を体験的に理解することを目標とします。
1985年~1996年の教育課程では「代数・幾何」が文理共通で扱われ、二次試験では行列の固有値や対角化まで出題されていました。
昔はどの高校生もやってたんだからできないはずはない。1次元でできることは多次元に拡張できる。計算やグラフ作成はRstudioに頼ろう。今の高校生はChromeBookを持っている。
「目と手を通して身体で覚える」
体験が深まり蓄積されると、自分の中で整理され体系化が進みます。
自分の手と目で確かめられる簡単な例から始めて、探求する世界を広げていく。
この学習方法を本書では「ひょっこり方式」と呼んでいます。
GoogleColabやRstudioを用いてシミュレーションを体験してください。
コードはサイト「ひょっこり統計」の高校生の統計学コーナーに掲載してあります。
数の計算は2項演算から始まります。
1+1 のような基本計算から、無限和まで拡張します。
この方法は、学習方法としても有効です。
「1次元から多次元の世界へ」類比による拡張を考えます。
X=2x は、x に対し 2x を対応させます。
「数直線上の点 x
に対し、座標を2倍した点を対応させる」と考えるとき、この対応を写像と呼びます。
対応を点の移動として捉えたときには、変換といいます。
X=2x は、1次元の写像であり変換です。
<2次元写像>.
2次元写像は、(x,y) に対し (X,Y) を対応させます。
対応を表す式は、
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 から始めて、自分の手と目で確かめましょう。
(0,0),(0,1),(1,0),(1,1)
を頂点とする正方形の一次変換による像を図示します。
この正方形を1000個のドット(点)で表します。
runif( )関数により一様乱数を生成し、正方形として描画します。
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")
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倍にする変換です。
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次元の標準正規乱数を生成すると円状の分布になります。
この円状の分布がどのように移動するかみてみましょう。
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)
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)
これまでは x軸・y軸方向への拡大縮小でした。
次に、x軸・y軸以外の方向への拡大縮小を考えます。
一次変換は固有ベクトル方向の固有値倍の拡大・縮小
と言われています。
ある方向へ \(k\)
倍に拡大する一次変換があるとすれば、その方向ベクトルは変換によって向きは変わらず、大きさは
\(k\)
倍になるはずです。このようなベクトルを行列の固有ベクトル、\(k\)
を固有値と呼びます。
これらは行列の表す一次変換を特徴づけるものとなっています。
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は固有値倍に延長した点に移ります。
不動直線は固有ベクトルを方向ベクトルとします。
動かない直線を軸にして見ると、点の移動の様子がよく分かります。
一次変換は固有ベクトル方向の固有値倍の拡大・縮小なのです。
次に、具体的な例をタイプ別に調べてみましょう。
\(\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つの異なる固有値に対する固有ベクトルは直交します。
<回転行列>.
固有ベクトルを持たない一次変換もあります。
原点周りの回転は必ず向きを変えるので、固有ベクトルは存在しません。
(ただし、0度、180度を除きます)
原点周りの \(\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}\) と簡潔に書くこともできます。
回転行列の特徴は、
このような行列を直交行列といいます。
直交には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}\)に一致します。.
\(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'\) に一致しています。.
行列がどのような一次変換を表すか実証的に調べます。
<方法>.
ここでは、対称行列で表される一次変換を中心に調べます。
不動直線は、y=x と y=-x であり、
具体例で確かめましょう。
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
<固有ベクトルで張られる正方形の像>.
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 を色々変えてやってみましょう。
このように実際にハンドリングすることで、手を通して一次変換の本質を掴みましょう。
実際、
特性方程式 \(\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倍に縮小することで、右図になるイメージです。
これまでの例から、
「対称行列による一次変換は、直交する固有ベクトル方向への固有値倍の拡大縮小を表す」ことは分かりました。
しかし、対称行列を見ただけでは、その方向と倍率は分りません。
指定された直交ベクトルを固有ベクトルに持ち、その方向へ指定倍率に拡大縮小する一次変換を作ることはできるのでしょうか。
以下では、このことを目標にします。
ここまでで分かっているのは、x軸とy軸が方向ベクトルのとき、
\(B=\begin{pmatrix}
k & 0 \\
0 & l
\end{pmatrix}\) は x軸方向を\(k\)倍に、y軸方向を\(l\)倍にする変換であることです。
この横軸縦軸方向への拡大縮小行列を用いて、x軸・y軸以外の方向へ拡大縮小する一次変換行列を作ることを考えます。
そのためには、ベクトルの内積を用いた座標変換が必要になります。
ベクトル \(\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}\) が単位ベクトルのとき、
<転置行列の積による表現>.
\(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が直交行列のとき、\(p,~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}\) は新しい座標への座標変換を意味します。
整理しておくと、
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軸とする新しい座標系へ変換すると、
新座標系では右図の単位正方形になります。
固有ベクトル方向へ 固有値倍に拡大縮小します。
横軸方向に 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")
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)
以上の3つのプロセスを合成します。
直交する単位ベクトル \(p,q\) により座標方向が与えられ、各方向への拡大縮小倍率が指定されているとします。
\(p,q\) を列ベクトルとする行列 \(P=\begin{pmatrix} p & q \end{pmatrix}\) は直交行列です。
単位正方形に対して、この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}\) とするとき、
このことは次のように確かめられます。
\(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\)の対角化といいます。
前節の「内積と正射影」では、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}\) で求められます。
これは、
「単位ベクトルとの内積は、単位ベクトル方向への正射影を表す」
という事実に基づいています。
以下では、内積と正射影に頼らず、基底
という考え方に基づいて座標変換を構成します。
これにより、対角化は対称行列以外の一般の行列に拡張されます。
\(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}\) を基底としたときの座標です。
このように、同じベクトルでも基底が変われば座標は変わります。
そこで、基底が変わった場合、座標がどのように変化するか調べておく必要があります。
\(\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}\)
これは内積と正射影を用いて構成した座標変換の式と一致しています。
基底を固有ベクトルとすることで、\(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\) を対角化することで、固有ベクトル方向への拡大縮小率が分かります。
\(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つの異なる実固有値を持ち、固有ベクトルは直交します。
対称行列は、固有ベクトルで構成した直交行列を用いて対角化できます。
\(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'\)
が新座標への座標変換であることに注目し、
新座標 \(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次形式の標準形といいます。
標準形は固有値を係数とする平方和になっています。
\(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つのタイプがあります。
\(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}\) によって、
\(\begin{pmatrix} u \\ v \end{pmatrix} =P'\begin{pmatrix} x \\ y \end{pmatrix}\) という座標変換によって、
(固有値 \(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\) ならば双曲線.
このように概観できます。
トレースと行列式は不変量であり、対角化しても値は変わりません。
以下で、具体的にみていきましょう。
対称行列タイプ1 \(A= \begin{pmatrix} a & b \\ b & a \end{pmatrix}\) から考えます。
「3.5 対称行列」で見たように、このタイプの対称行列は、
固有値と固有ベクトルは簡明です。
不動直線は、y=x と y=-x
であり、これが座標変換による新しい座標軸です。
具体例で考えます。
\(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なので、
不動直線 \(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\)と対角化されます。
<グラフ>
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 <- 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,])
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)
固有値が異符号の場合は、双曲線になります。
\(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なので、
不動直線 \(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\)と対角化されます。
<グラフ>
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 <- 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,])
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 方向であることが分かっています。
まず、このタイプで色々な例を作ってみると良いでしょう。
対称行列タイプ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\) の 符号は決まります。
二次曲線は、
固有ベクトルの方向は、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)