はじめに
一般的に、反比例と呼ばれる関数は$y=\frac{k}{x}$というように表される。一方で、双曲線関数は、$\frac{x^2}{a^2}-\frac{y^2}{b}=\pm 1$のような複雑な二次関数の式で表される。したがって、反比例の関数と二次曲線の双曲線の関数が究極的には回転移動をすることによって一致していなければならない。そこで今回は、行列計算を用いて双曲線のグラフを原点を中心として回転させることで、反比例のグラフと一致することを証明する。また、プログラムによってもそのことを以下のよう視覚的に確かめる。
回転行列とは
点$(x_0,y_0)$を点$(x_1,y_1)$に原点を中心として$\theta$だけ回転移動をさせることを考える。
複素数平面の知見を借りて以下のような条件を考える。
x_1+jy_1=(cos\theta+jsin\theta)(x_0+jy_0)=(x_0 cos\theta-y_0 sin\theta )+j(y_0 cos\theta+x_0 sin\theta)
と表すことができる。
ゆえに、
\begin{pmatrix}
x_1 \\
y_1 \\
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta \\
\end{pmatrix}
\begin{pmatrix}
x_0 \\
y_0 \\
\end{pmatrix}
ここで、軌跡の方程式を叙述するためには、変化前の方程式に代入する必要性があるので、以下のような変換をする。
\begin{pmatrix}
x_0 \\
y_0 \\
\end{pmatrix}
=
\begin{pmatrix}
\cos(-\theta) & -\sin(-\theta) \\
\sin(-\theta) & \cos(-\theta) \\
\end{pmatrix}
\begin{pmatrix}
x_1 \\
y_1 \\
\end{pmatrix}
ここで、$y_0=\frac{k}{x_0}$を代入すると、
x_0y_0=(x_1\cos\theta+y_1\sin\theta)(-x_1\sin\theta+y_1\cos\theta)=k
(y_1^2-x_1^2)\cos\theta\sin\theta+x_1y_1(\cos\theta^2-\sin\theta^2)=k
2倍角の公式より、
(y_1^2-x_1^2)\sin2\theta+2x_1y_1\cos2\theta=2k
ここで、上式を成立させる特殊な条件として$\theta=0,\frac{\pi}{4}$を考える。
(1)$\theta=0$のとき
x_1y_1=k
これは、初期の反比例関数と重なってしまうので、題意を満たさない。
(2)$\theta=\frac{\pi}{4}$のとき
y_1^2-x_1^2=2k
このように、反比例関数を45度だけ回転させれば二次曲線の方程式が現れるという面白い結果が出た。(これは、筆者の長年の謎で、どうして双曲線の二次曲線が反比例と根本的には同じ曲線なのか疑問だった。)
プログラム
さて、以上の考察が正しいか視覚的に確かめたいので以下の様なプログラムを作成した。
#反比例のグラフを回転移動させて双曲線の二次曲線の標準形のグラフに持っていくアニメーション
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import japanize_matplotlib
# アニメを作る初期設定
fig = plt.figure()
ims = []
#比例定数
k=1
#区切り数
n=100
#0度から45度までの範囲でアニメーションを作成
theta_ary=np.linspace(0,np.pi/4,n)
#初期のグラフ
x_0=np.linspace(0,10,n)
y_0=k/x_0
X_0=np.array([x_0,y_0])
for i in range(n):
im=[]
theta = theta_ary[i]
#Aは回転行列(-θだけ回転)
A=np.array([[np.cos(-theta),-np.sin(-theta)],[np.sin(-theta),np.cos(-theta)]])
X_1=A@X_0
x_1=X_1[0]
y_1=X_1[1]
im=plt.plot(x_1,y_1)
ims.append(im)
# 複数枚のプロットを 20ms ごとに表示
ani = animation.ArtistAnimation(fig, ims, interval=20)
#保存
ani.save("双曲線と反比例.gif", writer="pillow")
これを実行すると以下のようなgif画像が出力される。
このように、確かに反比例のグラフを回転移動させると、双曲線の二次曲線の標準形になることが視覚的にも納得できた。
まとめ
今回は、前半戦で反比例のグラフが二次曲線の方程式と本質的に対応関係であることを回転行列を用いることで証明した。また、後半戦では、そのことについて、Pythonを用いたシミュレーションで検証した。結果、予想と同じように-45度だけ原点を中心に回転移動させると、双曲線の標準形と同じ位置にグラフが移動するということが分かった。