29.7 パラメータの変化に関する挙動の追跡

数学などでは,よく式やグラフにパラメータが入り「パラメータの値によってどう状況が変わるか」を追跡したいことがあります.Mathematica には Manipulate という関数があり,これを使うと自由自在にパラメータを動かせます.非常に便利な機能ですので,ぜひ使ってみてください.

問題例

今回は y2 = x3 + ax という方程式で決まる曲線の様子が,パラメータ a にどう依存しているかを調べましょう.この曲線は楕円曲線と呼ばれるものの一種です.方程式中で y に依存する項が y2 しかないため,この曲線は常に x 軸に対して対称な形となります.しかし a の値に応じて,見た目に大きな変化があります.まずは陰関数のグラフを描くための ContourPlot 関数(hwb29.6 グラフの描き方)を使って,グラフの様子を把握しましょう.
a = 0 の場合, x3 が 0 以上になるには x が 0 以上でないといけないので,y2 = x3 のグラフが現れるのは座標軸の右側です.そしてこの式を x について解いた式 x = y2/3 は微分係数が x = 0 で発散するので,原点では尖った形になります.
29_7_a
a = 1 の場合, y2 = x (x2 + 1) の右辺が正になるには x が 0 以上でないといけないので,やはりグラフが現れるのは座標軸の右側です.ただし a = 0 のときとは違い,原点でこの曲線は滑らかになります.このことは関数 F(x, y) = y2 – (x3 + ax) の Jacobi 行列が原点でフルランクなことから,陰関数定理を使って分かります.
29_7_b
そして a = -1 の場合, y2 = x3 – x の右辺が x (x + 1)(x – 1) と因数分解できるため,右辺が 0 以上になる x の値が「-1 以上 0 以下」と「1 以上」の 2 つに分裂します.そのため,グラフは 2 つの連結な成分に分かれます.この場合も a = 1 と同様,原点ではグラフは滑らかです.また Jacobi 行列の計算によって,x = 0, -1 でも滑らかなことが分かります.
29_7_c
では a を動かしたとき,これら 3 つのグラフはどのように繋がるのでしょうか?それを実際に,Manipulate 関数で見てみましょう.

Manipulate 関数の使い方

Mathematica に Manipulate[ ContourPlot[ y2 == x3 + a x, {x, -2, 4}, {y, -8, 8}, PlotPoints->150 ], {a, -3, 3, 0.1} ] と打ち込んでみてください.次のように,スライダー付きのグラフが表示されるはずです.
29_7_d
このように Manipulate 関数は「パラメータの入ったグラフや式」を最初に与えてから,{a, -3, 3, 0.1} のように「動かす変数」「動かす範囲の下限」「動かす範囲の上限」「刻み幅」を中括弧で並べたリストで指定します.なお,刻み幅は省略可能です.
そして,このグラフはスライダーを動かして変化させられます.
29_7_e
これによって,a の値が負の方向から 0 に近づく時,左の連結成分がどんどん潰れてくることが分かります.また左右の連結成分がくっつくのが a = 0 のときで,その瞬間に原点が特異点となっていることが分かります.ぜひ実際に動かしてみてください.
また,スライダーの横にある + ボタンを押すと,下に細かいメニューが展開されます.
29_7_f
このメニューを使うと,

  • 直接パラメータの数値を指定する
  • 予め与えた刻み幅で 1 段階ずつパラメータの値を変化させる
  • アニメーションを実行する

といった操作ができます.