pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

Maximaで学ぶ円錐曲線(二次曲線)楕円・放物線・双曲線

数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。

今回はMaximaを使って円錐曲線(二次曲線)を学びたいと思います。

とくにパラメタの変化に応じた曲線の変化の様子を視覚的にわかりやすくしてみました。

画像ファイルとして出力したグラフの作成にはMaxima(とgnuplot)を、

Maximaで作成した複数のepsファイルからGIFアニメを作成するにはImageMagickを使いました。



円錐曲線(二次曲線)

円錐曲線という名前は、円錐を平面で切断したときの断面に現れる曲線であることに由来します。

数学的には、 xy-平面上の曲線であって、変数  (x,y) について2次の方程式

 \quad\displaystyle{ax^2+2bxy+cy^2+2dx+2ey+f=0}

によって定まります。

2次の方程式によって定まる曲線ですので、円錐曲線はまた二次曲線とも呼ばれます。

以下、左辺の2次式を  P(a,b,c,d,e,f) と呼ぶことにします。

この一般式は座標を適当に線形変換することで以下の3種類に変形・分類できます:

楕円(ellipse)

 \quad\displaystyle{pX^2+qY^2=1}

円は楕円の特別な場合(  p=q )です。

放物線(parabola)

 \quad\displaystyle{2pX-qY^2=1}

双曲線(hyperbola)

 \quad\displaystyle{pX^2-qY^2=1}

以上の3つの形の式を円錐曲線の標準形と呼びます。

(ここでは退化した場合は考えないことにします)

次に、上で与えた一般形の2次式がどのようにして標準形に変形されるかをみていきます。

行列表示

行列を用いた2次式の記述

2次式

\quad\displaystyle{P(a,b,c,d,e,f)=ax^2+2bxy+cy^2+2dx+2ey+f}

は行列を用いて

\quad\displaystyle{P(a,b,c,d,e,f)=\begin{bmatrix}x& y \end{bmatrix}\begin{bmatrix} a & b  \\ b & c \end{bmatrix}\begin{bmatrix}x\\ y \end{bmatrix}+2\begin{bmatrix} d& e \end{bmatrix}\begin{bmatrix}x\\ y \end{bmatrix}+f}

と表せます。このことはMaximaによって

kill(all)$
v:matrix([x],[y])$
M(a,b,c):=matrix([a,b],[b,c])$
DE:matrix([d,e])$
expand(transpose(v).M(a,b,c).v+2*transpose(DE).v+f);

から確かめられます。ここで行列

\quad\displaystyle{M(a,b,c)=\begin{bmatrix} a & b  \\ b & c \end{bmatrix}}

は実対称行列なので適当な線形変換によって対角化することができます。

実際、Maxima

M(a,b,c):=matrix([a,b],[b,c])$
eigenvectors(M(a,b,c));

とすることにより、ベクトル

\quad\displaystyle{v_\pm=\begin{bmatrix} 1   \\ \gamma_\pm \end{bmatrix} \qquad\quad \gamma_\pm=\frac{c-a\pm\sqrt{(c-a)^2+4b^2}}{2b}}

がそれぞれ固有値

\quad\displaystyle{\lambda_\pm=\frac{c+a\pm\sqrt{(c-a)^2+4b^2}}{2}}

固有ベクトルであることがわかります。また行列

\quad\displaystyle{\Lambda=\begin{bmatrix} 1 & 1  \\ \gamma_+ & \gamma_- \end{bmatrix}}

を導入すると

L:matrix([1,(c-a+sqrt((c-a)^2+4*b^2))/(2*b)],[1,(c-a-sqrt((c-a)^2+4*b^2))/(2*b)])$
L.M(a,b,c).invert(L);
ratsimp(%);

により

\quad\displaystyle{\Lambda\,M(a,b,c)\,\Lambda^{-1}=\begin{bmatrix} \lambda_+ & 0  \\ 0 & \lambda_- \end{bmatrix}}

と対角化できることがわかります。

ここで固有ベクトル  v_\pm を規格化した

\quad\displaystyle{e_\pm=\frac{1}{\sqrt{1+\gamma_\pm^2}}\begin{bmatrix} 1  \\ \gamma_\pm \end{bmatrix}}

をとります。このとき、行列

\quad\displaystyle{R=\begin{bmatrix} e_+ & e_-   \end{bmatrix}}

を使っても  \Lambda の場合と同じように行列  M(a,b,c) を対角化することができます:

\quad\displaystyle{R\,M(a,b,c)\,R^{-1}=\begin{bmatrix} \lambda_+ & 0  \\ 0 & \lambda_- \end{bmatrix}}

gp:(c-a+sqrt((c-a)^2+4*b^2))/(2*b)$
gm:(c-a-sqrt((c-a)^2+4*b^2))/(2*b)$
R:matrix([1/sqrt(1+gp^2),gp/sqrt(1+gp^2)],[1/sqrt(1+gm^2),gm/sqrt(1+gm^2)])$
R.M(a,b,c).invert(R);
ratsimp(%);

ポイントは

R.transpose(R);
ratsimp(%);
transpose(R).R;
ratsimp(%);

によってわかるように、行列  R が直交行列(  RR^{\rm T}=R^{\rm T}R=I )であることです。

すなわち

\quad\displaystyle{M(a,b,c)=R^{\rm T}R\,M(a,b,c)R^{\rm T}R=R^{\rm T}\begin{bmatrix} \lambda_+ & 0  \\ 0 & \lambda_- \end{bmatrix}R}

が成り立ちます。

そこで新しい変数  (X,Y)

\quad\displaystyle{\begin{bmatrix} X \\ Y \end{bmatrix} =R \begin{bmatrix} x  \\ y \end{bmatrix}}

によって導入すると、2次式  P(a,b,c,d,e,f)

\quad\displaystyle{P(a,b,c,d,e,f)=\begin{bmatrix}X&Y \end{bmatrix}\begin{bmatrix} \lambda_+ & 0  \\ 0 & \lambda_- \end{bmatrix}\begin{bmatrix} X\\ Y \end{bmatrix}+2\begin{bmatrix} d& e \end{bmatrix}R^{\rm T}\begin{bmatrix}X\\ Y \end{bmatrix}+f}

と表すことができ、さらに

\quad\displaystyle{\begin{bmatrix} D& E \end{bmatrix}=\begin{bmatrix} d& e \end{bmatrix}R^{\rm T}}

とすると、2次式が新たな変数  (X,Y) を使って

\quad\displaystyle{P(a,b,c,d,e,f)=\lambda_+ X^2+ \lambda_- Y^2 +2D X + 2EY+f}

という  X Y についての2次式の和の形に書き直すことができます。

あとは  X Y についてそれぞれ平方完成し、再度適当に変数変換すると

\quad\displaystyle{P(a,b,c,d,e,f)=\lambda_+ \tilde{X}^2+ \lambda_- \tilde{Y}^2 +F}

の形まで変形できます。ここで

\quad\displaystyle{\tilde{X}=X+\frac{D}{\lambda_+} \quad\qquad \tilde{Y}=Y+\frac{E}{\lambda_-} \quad\qquad F=f-\frac{D^2}{\lambda_+}-\frac{E^2}{\lambda_-}}

です(ただし  \lambda_\pm\neq0 と仮定しました)。

最後に2次式全体を適当に定数倍することで円錐曲線の標準形が得られます。

行列式による曲線の分類

以上の考察から、円錐曲線の標準形による分類は行列

\quad\displaystyle{M(a,b,c)=\begin{bmatrix} a & b  \\ b & c \end{bmatrix}}

固有値  \lambda_\pm の積  \lambda_+\lambda_- の値による分類、すなわち行列  M(a,b,c)行列式

\quad\displaystyle{\lambda_+\lambda_-=\det R\,M(a,b,c)\,R^{-1}=\det M(a,b,c)=ac-b^2}

の値による分類であることがわかります:

lp:(c+a+sqrt((c-a)^2+4*b^2))/2$
lm:(c+a-sqrt((c-a)^2+4*b^2))/2$
ratsimp(lp*lm);

すなわち  \det M(a,b,c)=ac-b^2=\lambda_+\lambda_- が正・ゼロ・負のそれぞれの場合に応じて、

楕円・放物線・双曲線が対応します。

以下では具体的に円錐曲線を描いて、ここで述べたことの正当性をみていきます。



円錐曲線(二次曲線)の図示

例1

具体例として

 \quad\displaystyle{P(1,b,1,0,0,-1)=x^2+2bxy+y^2-1=0}

とした場合で  b の値を変えていって曲線がどのように変化してくか観察してみましょう。

このとき対応する行列式

 \quad\displaystyle{\det M(1,b,1)=1-b^2}

により、対応する曲線が変わる臨界値は  b=\pm1 であるはずです。

Maxima

P(b):=x^2+2*b*x*y+y^2-1$
load(implicit_plot)$
implicit_plot (P(-4) = 0, [x, -1.5, 1.5], [y, -1.5, 1.5])$

などと入力して

 \quad\displaystyle{b= -4, \quad -2, \quad -1, \quad -\frac12, \quad 0, \quad \frac12, \quad 1, \quad2, \quad 4}

の場合で円錐曲線を描いたものが以下の図です:

b= - 4
f:id:pianofisica:20190710144429p:plain
b= - 2
f:id:pianofisica:20190710144426p:plain
b= - 1
f:id:pianofisica:20190710144420p:plain
b=-1/2
f:id:pianofisica:20190710144424p:plain
b=0
f:id:pianofisica:20190710144432p:plain
b=1/2
f:id:pianofisica:20190710144440p:plain
b = 1
f:id:pianofisica:20190710144436p:plain
b = 2
f:id:pianofisica:20190710144444p:plain
b = 4
f:id:pianofisica:20190710144446p:plain
また、Maximaから

kill(all)$
P(b):=x^2+2*b*x*y+y^2-1$
load(implicit_plot)$
for i:0 step 1 thru 200 do(
     b:concat("保存ディレクトリ/ファイル名", i, ".eps"),
     t : float(-5.0 +0.05*i),
	implicit_plot (P(t) = 0, [x, -2.0, 2.0], [y, -2.0, 2.0],
        [plot_format, gnuplot], [gnuplot_term, ps], [gnuplot_out_file, b]));

と入力し、 b=-5 から  0.05 刻みに  b=5 まで値を変化させた eps ファイルを作成し、

ImageMagick をインストールしたうえでファイルの保存ディレクトリに移動し、ターミナルで

$ convert -dispose previous -layers optimize -loop 0 -delay 5 *.eps anim.gif

と入力することで、GIFアニメを作成したものが次のものです:

f:id:pianofisica:20190710154910g:plain

双曲線から2つの平行線(これは放物線の極限形とみなす?)、楕円、正円からふたたび楕円、

2つの平行線をへて双曲線へと連続的に曲線の形が変わっていく様子がわかると思います。

例2

別な具体例として

 \quad\displaystyle{P(a,0,1,2,0,-1)=ax^2+y^2+2x-1=0}

とした場合で  a の値を変えていって曲線がどのように変化してくか観察してみましょう。

このとき対応する行列式

 \quad\displaystyle{\det M(a,0,1)=a}

により、対応する曲線が変わる臨界値は  a=0 であるはずです。

Maxima

kill(all)$
P(a):=a*x^2+y^2+2*x-1$
load(implicit_plot)$
for i:0 step 1 thru 200 do(
     b:concat("保存ディレクトリ/ファイル名", i, ".eps"),
     t : float(-5.0 +0.05*i),
	implicit_plot (P(t) = 0, [x, -2.0, 2.0], [y, -2.0, 2.0],
        [plot_format, gnuplot], [gnuplot_term, ps], [gnuplot_out_file, b]));

と入力し、上と同様にして  a=-5 から  a=5 までの変化をGIFアニメにしたものが次です:

f:id:pianofisica:20190711041024g:plain

 \quad\displaystyle{a= -4.0, \quad -3.0, \quad -1.1, \quad -1.0, \quad -0.9, \quad 0.0, \quad 1.0, \quad 4.0}

でのスナップショットが次の図です:

f:id:pianofisica:20190711042234p:plainf:id:pianofisica:20190711042811p:plainf:id:pianofisica:20190711042236p:plainf:id:pianofisica:20190711042246p:plain
f:id:pianofisica:20190711042250p:plainf:id:pianofisica:20190711042254p:plainf:id:pianofisica:20190711042256p:plainf:id:pianofisica:20190711042300p:plain

双曲線、二直線(退化した円錐曲線)、双曲線、放物線、楕円と形を変えているのがわかります。

とくに  a=0 (放物線に対応)が双曲線から楕円に変わる臨界値であることは上で述べた通りですが、

そのほかに  a=-1 も特徴的で、対応する曲線は2つの交差する直線になっています。

これは2次式が

 \quad\displaystyle{P(-1,0,1,2,0,-1)=-(x-1)^2+y^2}

とまとめられるために生じたものです。

具体的には、 P(-1,0,1,2,0,-1)=0 に対応する曲線は

 \quad\displaystyle{y=\pm(x-1)}

となります。



本記事で特に断りなく利用したMaximaでの行列の取り扱いについては過去記事

pianofisica.hatenablog.com

グラフの描画やGIFアニメ化については

pianofisica.hatenablog.com

pianofisica.hatenablog.com

が参考になるかと思います。


キーワード:円錐曲線(二次曲線)、行列、Maxima、グラフ描画