https://noblegarden-math.jp/math/

JavaScript での数式処理の実装

2018年8月4日@第2回 関西日曜数学 友の会

松川信彦

大阪府立佐野工科高等学校数学科情報科常勤講師
(2018年4月~)

日本数式処理学会(JSSAC)会員

数式処理を実装したい

拳(JavaScript)で

私のJSでの実装の現到達点(線形代数・整数論・可換環・群論)

  • JavaScriptの多倍長整数ライブラリbig-integerを用いて
  • 有理数や有限素体の上の多項式演算・行列演算の実装
  • 有限次代数拡大体や有限体演算の実装
  • 単因子論($\mathbb{Z}$, $\mathbb{Q}[x]$ 上)
  • Pell 方程式の実装(和田秀男先生の本の勉強結果)
  • Buchberger Algorithm (Gebauer-Moller)(野呂先生・横山先生の本の勉強結果)
  • 0次元イデアルにおける最小多項式(野呂先生・横山先生の本の勉強結果)
  • 対称群の簡約表示
  • Dimino のアルゴリズムによる置換群($M_{11}$ など)の元の列挙
  • Schreier Sims のアルゴリズムによる置換群($M_{11}$ など)の元の列挙
  • Berlekamp による有限素体上の多項式の既約分解.
  • Hensel lifting による$\mathbb{Z}[x]$ における既約分解
  • 実演については、後でまとめてやります。しばしお待ちくださいませ。

JavaScript の利用について

遅くて非力なスクリプト言語と言われる JavaScript

使うメリットがあるのか?

  • 軽量 (bigInt.js + 私の追加 = ca.js ファイル は 140KB)
  • 初歩的な内容に限っては実行速度の遅さに困ることが少ない
  • メモ帳に書いてブラウザで即実行
  • 一番使われている言語
  • 学習コストが低い
  • 困ったときに検索で解決することが多い
  • 特別なソフトのインストールが不要で, ブラウザ上で公開・共有できる

実演お題目

  • Pell 方程式 [00-07]
  • groebner 基底 [05-12]
    (丸山正樹著 「グレブナー基底とその応用」 p82 「性能の低い計算機代数のソフトでは相当待っても答えが出ない」)
  • Hensel 構成による因数分解 [02-15, 02-17]
  • Schreier-Sims アルゴリズム [14-05]

次なる目標

  • 多項式の被役化にかかる時間を速くしたい
  • trace アルゴリズムの実装
  • JavaScript の gebauer-moeller で cyclic_6 を現実的な時間で完了させたい
  • 対称群や一般線形群の表現, 岩堀-Hecke代数の表現

ご清聴ありがとうございました!