JavaScript での数式処理の実装
2018年6月10日
松川信彦
大阪府立佐野工科高等学校数学科情報科常勤講師
(2018年4月から〜)
https://noblegarden-math.jp/math/
自己紹介
- 大阪府立高校の数学と情報の教員
- JavaScript や PHP を趣味(数学の勉強)や教育で利用
- 情報科でタイピングシステムを構築して1年間運用しており,
生徒のタイピング力向上に貢献.
タイピングが不得手な学生が多いと聞きます.
$\rightarrow$ moodle プラグイン化できますかね?
- 実装系数学に憧れている
- JavaScript で多倍長整数ライブラリは既にあるものを利用して、数式処理を実装しようと思い立ったのが2年前くらい
私のJSでの実装の現到達点
- JavaScriptの多倍長整数ライブラリbig-integerを用いて
- 有理数や有限素体の上の多項式演算・行列演算の実装
- 有限次代数拡大体や有限体演算の実装
- 単因子論($\mathbb{Z}$, $\mathbb{Q}[x]$ 上), 対称群の簡約表示
- Pell 方程式の実装(和田秀男先生の本の勉強結果)
- Buchberger Algorithm (Gebauer-Moller)(野呂先生・横山先生の本の勉強結果)
- 0次元イデアルにおける最小多項式(野呂先生・横山先生の本の勉強結果)
- FGLM や trace algorithm はまだ (;´д`)ゞ
- Dimino のアルゴリズムによる置換群($M_{11}$ など)の元の列挙
- Berlekamp による有限素体上の多項式の既約分解.
- Hensel lifting による$\mathbb{Z}[x]$ における既約分解はまだ (;´д`)ゞ
- 実演については、後でまとめてやります。しばしお待ちくださいませ。
遅くて非力なスクリプト言語と言われる JavaScript
使うメリットがあるのか?
- 軽量 (bigInt.js + 私の追加 = ca.js ファイル は 120KB)
- 初歩的な内容に限っては実行速度の遅さに困ることが少ない
- メモ帳に書いてブラウザで即実行
- 一番使われている言語
- 学習コストが低い
- 困ったときに検索で解決することが多い
- 特別なソフトのインストールが不要で, ブラウザ上で公開・共有できる
数学を実装する上で有用と思われる
JavaScript ライブラリ
- 開発環境を持ち運んだり、仮想環境にアクセスする必要がない。
- 開発環境をブラウザで完結。
- 手軽に数学の実験。
- 数学の勉強ノートを作る。
- コードの実験を行い, 良いものができたら保存する。
- ある程度まとまったらノートやコードを公開する。
- 公開するコンテンツを決定できる
- MathJax, JSXGraph, Cindy.js, matter.js, big-integer.js などのJSライブラリを取り込んで利用できる
数式処理的なことで次なる目標
- 多項式の被役化にかかる時間を速くしたい
- JavaScript の gebauer-moller で cyclic_6 を現実的な時間で完了させたい
- 有限幾何や Mathieu 群の可視化 (パズルみたいでとても面白そう)