SageMath で数値実験をやる方法を説明してください
と ChatGPT で入力すると以下のような結果が返されました。
SageMathでバーチ・スウィンナートン=ダイアー予想(BSD予想)の数値実験を行う方法について、初心者にもわかる形で段階的に説明します。SageMathは楕円曲線、L関数、ランク、トーション群、Selmer群などを高レベルで扱えるので、数値実験には非常に適しています。
✅ 前提:SageMath を使える環境
以下のいずれかの方法で使えます:
- https://sagecell.sagemath.org/
- ローカルに SageMath をインストール(https://www.sagemath.org/:https://www.sagemath.org/ 参照)
- Jupyter Notebook + SageMath カーネル
🧪 数値実験の基本ステップ
② 曲線の基本情報を確認する
E.rank() # 有理点群のランク E.torsion_order() # トーション部分の位数 E.gens() # 有理点の生成元 E.discriminant() # 判別式③ L関数の評価と s=1 付近の挙動
L = E.lseries() # L関数オブジェクトを取得 L(1) # L(E, 1) の値(数値近似) L.derivative(1) # L(E, s) の s=1 における導関数 L.analytic_rank() # L関数の零点の階数(解析的ランク)④ BSD予想に出てくる他の量も計算可能
E.regulator() # レギュレーター(ランク > 0 の場合) E.sha().order() # シャファレヴィッチ=テイト群(予想値) E.conductor() # モジュラー性に関係する conductor※ `E.sha()` を使うには `mwrank` がインストールされている必要がある場合があります。
🔁 まとめて一つのスクリプト例
以下のコードは、BSD予想の数値的確認をする基本的な例です:
# 楕円曲線の定義(例: y^2 = x^3 - x) E = EllipticCurve([0, -1]) # 基本情報 print("Discriminant:", E.discriminant()) print("Conductor:", E.conductor()) print("Torsion order:", E.torsion_order()) print("Rank:", E.rank()) print("Generators:", E.gens()) # L関数に関する情報 L = E.lseries() print("L(E, 1):", L(1)) print("L'(E, 1):", L.derivative(1)) print("Analytic rank:", L.analytic_rank()) # BSD予想関連の値 print("Regulator:", E.regulator()) print("Sha (predicted order):", E.sha().order())📌 BSD予想の数値的確認の意味
SageMath上で次のような一致が観察されれば、BSD予想が数値的に成り立っていると判断します:
項目 意味 `E.rank()` 有理点群のランク(代数的) `L.analytic_rank()` L関数の零点の次数(解析的) 一致していれば BSD予想の主張の一部が確認できる 🧠 補足:実験対象の選び方
簡単な例(ランク0や1)から始めるのが良いです:
E0 = EllipticCurve([0, -1]) # ランク1 E1 = EllipticCurve([1, 1]) # ランク0(L(E, 1) ≠ 0) E2 = EllipticCurve([2, 3]) # 高ランクの候補
![現代数学 2025年 04 月号 [雑誌] 現代数学 2025年 04 月号 [雑誌]](https://m.media-amazon.com/images/I/61otoUxNG-L._SL500_.jpg)
![現代数学 2025年 05 月号 [雑誌] 現代数学 2025年 05 月号 [雑誌]](https://m.media-amazon.com/images/I/61o+nRermzL._SL500_.jpg)


![数学セミナー増刊 ミレニアム賞問題 2010年 07月号 [雑誌] 数学セミナー増刊 ミレニアム賞問題 2010年 07月号 [雑誌]](https://m.media-amazon.com/images/I/41t1vQRHfTL._SL500_.jpg)