曲線4(楕円曲線を積み上げよう)
このページはマス旅の一部です。
前回は曲面を切って曲線を作りましたね。
今回はその逆をやりましょう。それは、楕円曲線をあつめて楕円曲線面を作るです。
1.楕円曲線を連続してつないだ楕円曲面をかこう
課題:楕円曲線積み上げアプリ
「楕円曲線の1実数根k」
を変化すると、
「実数kをzにした楕円曲線面」が表示される。
2.数学外の知識
<楕円曲線の歴史>
#楕円の周の長さを求めるの積分というのが楕円積分の発端ですが、
初等関数で表せない3次・4次の平方根を含む有理式の積分のことを「楕円積分」といいます。
まあ、「ムズイ」積分の1種ですね。
数式全盛期の数学時代の天才、「オイラー」が楕円積分の加法定理を見つけたことは有名です。
オイラーさんはすごいですね。
#「この「ムズイ」積分をマスターしないと楕円曲線がわからない」
というわけではありません。
楕円曲線とは、「y^2=xの3次式」の曲線のことを指しています。
ご安心ください。
#では、楕円積分と楕円曲線が無関係か、というと、
そういうわけではありません。
楕円積分の逆関数として「楕円関数」が作られて、それを複素数へ拡張してみたら、
楕円関数の導関数との関係式から楕円曲線へとつながった
のでしたね。
つまり、「楕円積分→楕円関数→楕円曲線」という
3代のつながりがあるということだけ知っていれば大丈夫です。詳しくはこちら
<楕円曲線は今や最先端の物とつながるホットな存在>
・数学の世界では、1994年フェルマー最終定理の証明に使われました。詳しくはこちら
・スマホで大切なセキュリティーのために楕円曲線を使った暗号が使われています。詳しくはこちら
3.数学・プログラミングの支援
これまでは円や放物線、二次曲面などの馴染み深い図形を切ったり動かしたりしてきました。
今回は、現代数学や暗号理論(楕円曲線暗号など)の主役である「楕円曲線」をたくさん集めて、
3次元空間にひとつの「楕円曲線面(Elliptic Surface)」を紡ぎ出します。
パラメータkを変化させながら
断面(ファブリック)を積み重ねていくことで、
平面では見えなかった曲面の全体像と、その中に潜む「特異点」の姿が見えてきますよ。
# ワイエルシュトラス標準形の中でも特に計算や挙動の観察がしやすい次の形です。
y^2 = x(x - 1)(x - k)
右辺が 3 つの根 x = 0, 1, kを持つ 3 次式になっています。
kの値を固定すると、xy平面上に上下対称な美しい楕円曲線が描かれます。
# kをzに置き換えて 3 次元へ(楕円曲線面)
パラメータkを高さ方向(z軸)の変数として連続的に動かします。
y^2 = x(x - 1)(x - z)
この 3 変数方程式
f(x, y, z) = y^2 - x(x - 1)(x - z) = 0
が表す 3 次元曲面こそが楕円曲線面です。
水平切り(z = kでスライス)すると、
その高さでの「楕円曲線」が現れます。
高さkを連続的に変えることは、
楕円曲線たちの「パラパラマンガ」の3D空間へ積み上げですね。
#見どころは特異ファイバー(Singular Fiber)です。
1つのループと無限に伸びる曲線
の2つの成分からなる、滑らかな楕円曲線です。
これが、いつもの姿ですね。
しかし、滑らかな楕円曲線が激変するkの特異値があります。
k = 0 のとき(退化:自交点・ノード)
方程式は y^2 = x^2(x - 1) となり、ループが原点 (0,0)になり、
そこで曲線自身が交差する「ノード(結節点)」が現れます。
k = 1 のとき(退化:孤立点または結節点)
方程式は y^2 = x(x - 1)^2 となり、x = 1の位置でループが閉じてつながります。
3次元の曲面として俯瞰することで、
これらの特異な曲線(特異ファイバー)が
曲面全体の「くびれ」や「折り目」として
どのようにつながっているかが一目瞭然になるね。
4.コード化
<geogebra>
要素の追加>geogebra>作成>関数グラフ
k=Slider(-3,3,0.05) #アニメーションにすると、立体的な積み上げが感じられます。
f:y^2=x(x-1)(x-k) #色を青にします。
txt=FormulaText(f) #色を青、kスライダーの下に配置する
#等高線fsをk=0.5刻みで点線太さ3でかきます。自動で緑になります。
fs=Sequence(y^(2)=x (x-1) (x-p),p,-3,3,0.25)
設定>表示>空間図形
#2変数の式を空間図形にかくと、zがないので、柱体の側面のグラフにされてしまします。
#そこで、Curveコマンドによって、3D空間の中の曲線がかけますね。
#また、zにあたる変数を動かすことで、曲線の系列がかけますよ。
Sequence(Curve(t,sqrt(t (t-1) (t-j)),j,t,-3,3),j,-3,3,0.25) #太さ3にするといいでしょう。
Sequence(Curve(t,-sqrt(t (t-1) (t-j)),j,t,-3,3),j,-3,3,0.25) #太さ3にするといいでしょう。
Curve(t,-sqrt(t (t-1) (t-k)),k,t,-3,3)
Curve(t,sqrt(t (t-1) (t-k)),k,t,-3,3)
タイトルは「楕円曲線をつみあげる」