数式処理と多倍長演算
Computer Algebra / Symbolic Computation & Arbitrary-Precision Arithmetic
トピック別
-
記号計算(数式処理)
多項式演算、GCD、因数分解、グレブナー基底、記号積分、代数的数(全13章)
-
多倍長演算
多倍長整数・浮動小数点、高速乗算、初等関数、根の抽出、数学定数の計算(全16章)
概要
数式処理(コンピュータ代数、記号計算)は、数学的な式を数値ではなく記号のまま操作する計算分野である。 $x^2 + 2x + 1$ を $(x+1)^2$ に因数分解し、$\int e^x \sin x \, dx$ を閉じた形で求め、 連立多項式方程式の解の構造を解析する — これらはすべて数式処理システム(CAS: Computer Algebra System)が日常的に行う計算である。
Mathematica, Maple, SymPy, SageMath といった CAS は現代の数学・理工学研究に不可欠なツールとなっているが、 その内部で動いているアルゴリズムは意外なほど知られていない。 本シリーズでは、CAS の背後にあるアルゴリズムとデータ構造を体系的に解説する。
Part I(第1〜13章)で記号計算の理論とアルゴリズムを扱った後、 Part II〜V(第14〜29章)では CAS の基盤となる多倍長演算(任意精度整数・浮動小数点演算)、 根の抽出アルゴリズム、数学定数の高速計算を扱う。
学習目標
- 多項式の表現方法と基本演算の計算量を理解する
- GCD 計算における式膨張問題とその解決法(部分終結式・モジュラ法)を習得する
- 有限体上および整数上の因数分解アルゴリズムの原理を理解する
- グレブナー基底の理論と Buchberger アルゴリズムを学び、応用できるようになる
- 記号積分(Risch アルゴリズム)と記号的総和(Gosper-Zeilberger)の原理を理解する
- 式の簡約化の本質的困難さと実用的な手法を知る
- 厳密線形代数、代数的数の計算、形式的べき級数の操作を習得する
- 多倍長整数の内部表現と高速乗算アルゴリズム(Karatsuba、FFT/NTT)を理解する
- 多倍長浮動小数点演算と高精度初等関数の計算手法を学ぶ
- Newton 法に基づく根の抽出アルゴリズム($n$ 次根、平方根)を理解する
- 数学定数($\pi$, $e$, $\gamma$ 等)の高速計算アルゴリズムを習得する
目次
Part I — 記号計算
-
第1章
数式処理入門
数式処理とは何か、CASの歴史(MACSYMA〜SymPy)、式の木構造表現、正準形と正規形、計算量の考え方
-
第2章
多項式の表現と基本演算
密表現と疎表現、再帰表現と分配表現、項順序、擬除算、高速多項式乗算(Karatsuba・FFT)
-
第3章
多項式のGCD計算
式膨張問題、部分終結式アルゴリズム、モジュラGCD、疎モジュラGCD、多変数GCDへの拡張
-
第4章
因数分解(有限体上)
無平方分解、相異次数分解、Cantor-Zassenhaus、Berlekamp、Kaltofen-Shoup
-
第5章
因数分解(整数上)
Hensel持ち上げ、Zassenhaus、因子結合問題、LLL格子基底簡約、van Hoiejのアルゴリズム
-
第6章
グレブナー基底
多項式イデアル、S-多項式、Buchbergerのアルゴリズム、sugar strategy、F4・F5アルゴリズム
-
第7章
グレブナー基底の応用
連立方程式の求解、変数消去、イデアル演算、幾何定理の自動証明、ロボティクス
-
第8章
記号積分
Liouvilleの定理、Hermite簡約、Rischアルゴリズム(対数部・指数部)、heuristic手法
-
第9章
記号的総和と超幾何級数
Gosperのアルゴリズム、Zeilbergerのアルゴリズム、WZ理論、ホロノミック系
-
第10章
式の簡約化と正規形
項書き換え系、Knuth-Bendix完備化、三角関数の簡約化、ゼロ判定問題、Richardsonの定理
-
第11章
厳密線形代数
Bareissのアルゴリズム、Hermite標準形、Smith標準形、Dixonのp-adic法、LLL格子基底簡約
-
第12章
代数的数と体拡大
最小多項式、根の分離、代数的数の四則演算、代数拡大体、Tragerの因数分解
-
第13章
形式的べき級数と応用展望
打ち切りべき級数の演算、Brent-Kungの合成、微分方程式のべき級数解、現代のフロンティア
Part II — 多倍長整数演算
-
第14章
多倍長計算入門
なぜ高精度計算が必要か、前進誤差・後退誤差・条件数、応用例、ライブラリ概観(GMP, MPFR)、ベンチマーク方法論
-
第15章
多倍長整数の表現
基数表現、リムの概念、符号の扱い、メモリ管理
-
第16章
多倍長整数の基本演算
加減算、筆算乗算、除算、シフト演算、分割統治文字列変換、浮動小数点文字列変換(Ryū・Dragonbox)、最新CPU命令
-
第17章
高速乗算アルゴリズム
Karatsuba法、Toom-Cook法、FFT/NTT乗算、アルゴリズム切り替え、GPU並列計算、分散並列計算(MPI/OpenMP・y-cruncher)
-
第18章
専用squaring最適化
$a^2$ の対称性を利用して乗算回数半減、1.5〜1.6倍高速化
-
第19章
不均衡Toom-Cook乗算
被乗数と乗数のサイズが異なる場合の非対称分割、Toom-32/42/43、反復的ブロック乗算、アルゴリズム自動選択
-
第20章
多倍長整数の高度な演算
GCD、モジュラ演算(CRT)、べき乗剰余、素数判定、素因数分解(ECM・GNFS)、有理数演算、暗号プロトコル
Part III — 多倍長浮動小数点
-
第21章
多倍長浮動小数点数
仮数部・指数部の表現、正規化、丸めモード、Posit数値体系(テーパード精度・Quire)、十進浮動小数点
-
第22章
多倍長浮動小数点演算
加減乗除、平方根、正しい丸めの保証、誤差なし変換、double-double/quad-double演算、Goldschmidt除算
-
第23章
高精度初等関数
$\exp$, $\log$, $\sin$, $\cos$ の高速・高精度計算、AGM法、特殊関数($\Gamma$・ベッセル・楕円積分・超幾何関数)
Part IV — 根の抽出アルゴリズム
-
第24章
N次根の精度倍増Newton法
2次収束の証明、精度スケジュール定理、剰余追跡法、精度倍増で $O(M(n))$ を達成
-
第25章
N次根の初期近似
浮動小数点近似、ビット操作、テーブル参照法、逆数平方根テーブル、精度倍増との関係
-
第26章
Zimmermann再帰平方根
分割統治による $O(M(n))$ 平方根、除算を逆数の乗算に置き換え
-
第27章
逆数平方根テーブル
1-limb 平方根の高速化、256エントリで Newton 3反復
Part V — 数学定数の計算
-
第28章
円周率の計算
マチンの公式、Chudnovskyの公式、BBP公式
-
第29章
数値定数の計算
Binary Splitting法、収束速度比較、$e$・$\ln 2$・$\gamma$・Catalan定数・$\zeta(3)$の高速計算、代数的定数、多重ゼータ値
前提知識
- 代数学の基礎:群・環・体の定義、多項式環 $R[x]$、イデアル、商環の概念
- 線形代数:行列演算、行列式、固有値
- アルゴリズムの基礎:計算量の $O$ 記法、分割統治、ユークリッドの互除法
- プログラミング経験:Python(SymPy で実験するため)があると望ましい
関連ライブラリ・ソフトウェア
| 名称 | 種類 | 特徴 |
|---|---|---|
| Mathematica | 商用CAS | 最も広く使われるCAS。記号・数値・可視化を統合 |
| Maple | 商用CAS | 特に記号積分とグレブナー基底に強み |
| SymPy | OSS (Python) | Python ライブラリ。教育・研究に最適 |
| SageMath | OSS (Python) | 多数のCASを統合したプラットフォーム |
| Singular | OSS | 可換代数・代数幾何に特化。グレブナー基底の高速実装 |
| GMP | OSS (C) | 多倍長整数・有理数・浮動小数点数を扱う定番ライブラリ |
| MPFR | OSS (C) | 正しい丸めを保証する多倍長浮動小数点ライブラリ(GMPベース) |
| FLINT / NTL | OSS (C/C++) | 高速な多項式演算・因数分解ライブラリ |