数学ソフトウェアの記述を考える(仮)

自己紹介に代えて

LSゼミ 1999/05/17 神戸 発表分レジュメ

*数学ソフトウェアとは

*C++クラスによる既存ライブラリへのインターフェース・ライブラリ

*多倍長浮動小数点演算と初等関数値計算ライブラリ

*多項式の対話的表示法

*数式処理システムの並列計算機への移植

*今後の方向

 

数学ソフトウェアとは

数学ソフトウェアの扱う主な問題

以下のような多様な数学的対象を扱う。(以下の分類は厳密なものではない。)

数値解析

浮動小数点演算(四則演算、基数変換、丸め、精度保証)、線型計算(線型方程式の求解、行列の固有値)、関数値計算(初等関数、特殊関数)、級数展開と評価(多項式、有理式、FFT、…)、補間とあてはめ、数値積分、高速微分法、反復による微分方程式の求解(一次元と多次元、初期条件と境界条件)、反復による非線型方程式の求解、有限要素法、線型計画法、…

数式処理(計算機代数)

整数演算(多倍長整数や有理数の四則演算、素因数分解、素数判定、…)、多項式演算(多項式や有理式の四則演算、微分、積分)多項式で表わされる方程式の求解(多項式の因数分解、終結式、Grobner基底、CAD、代数的数、根号表現、二分法による数値解の算出)、多項式で表される不等方程式の求解(Quontifier Elimination)、…

統計

統計量の算出(平均、分散、相関、…)、モデリング、検定、データの可視化

具体的な手法は数値解析と共通する部分も多い。

論理

推論、定理証明

あまり詳しくない…。

数学ソフトウェアの形態

大雑把に分けて以下のような形態のソフトウェアがある。

ソフトウェアから呼び出されて使われる頻度が高い前者ほど能率が重視され、対話的な利用が多くなる後者ほど応答も重視されるようになる。

1)計算エンジン/ライブラリ

2)「電卓」やインタプリタ

3)ソルバー

4)シミュレータ

数学ソフトウェアとは?

数学的対象を計算機資源に写像し、計算機上で取り扱えるようにするソフトウェア。

余談1:計算機の最も古い利用法を支えるソフトウェア。

余談2:計算機上の処理は程度の差こそあれ数学的背景がある。

余談3:数学ソフトウェアを使用した数学の研究を「数学の最前線に挑む機械化数学部隊」と評した人もいる。

私のやってきたこと

C++クラスによる既存ライブラリへのインターフェース・ライブラリ

多倍長浮動小数点演算と初等関数値計算ライブラリ

多項式の対話的表示法

数式処理システムの並列計算機への移植

VIAの調査

大規模線型方程式の並列求解実験

 

C++クラスによる既存ライブラリへのインターフェース・ライブラリ

  1. Mathematical Objectsライブラリ:数値解析ライブラリNUMPAC(in FORTRAN 名古屋大学計算機センタ) へのC++インターフェースを提供する。
  2. 1994年、1993年度修士論文)

  3. A-objライブラリ:数式処理ライブラリRISA 基本代数エンジン(in C 富士通国際情報社会科学研究所) へのC++インターフェースを提供する。

1994年、計算機代数に関する数解研研究集会で発表)

基本的要求を核となるライブラリに任せ、使い易いAPIの仕様という追加的要求を追及する。

計算エンジンへの要求

基本的要求

  1. 精度
  2. 計算機は有限なので無条件の無限精度は無理。

    精度の評価(数値解析):数値解析では有限精度で計算を打ちきる代わりに解が一定の範囲内にあることを保証しようとする。

    無限精度(数式処理):数式処理では打ちきらずに精度を確保する代わりに基本演算の所要時間が一定せず、計算によっては正常には終了しない場合もある。処理が完了する、つまり解けるものだけを解くという姿勢。

  3. 速度
  4. 応答性よりは能率重視。

    追加的要求

  5. スケーラビリティ
  6. 拡張性のあるインターフェース
  7. 数学的構造を反映したインターフェース

それ自身が使い易さの基準である5)4)の拡張が衝突しないためにも必要になる。

数学的構造の定義

基礎集合から生成規則(公理系)に則って有限回のベキと直積によって有限生成された集合(基礎概念)を考えるとき、基礎集合と基礎概念の組(型)として、型と公理系の組。

複数の構造を併せ持ったり、複数の構造の組み合わせになっている構造もある。

主なものを大きく分けて以下の3種類がある。

ポリモルフィックな型システムの上に数学的構造を反映する

計算機科学的には、数学的構造は「値の集合(台集合)」とそれらの値を関連付ける「関係、演算、関数のシグニチャの組(型)」、そして「関係、演算、関数の計算規則(意味)」の組。

数学的構造(特に数学的型)を型システム上に写像する。

  1. 代数的構造の例:整数、有理数、多項式、有理式間の関係、行列と関数の関係、精度の取り扱い。
  2. 位相的構造の例:連続性について関数をクラス分けする。

ポリモルフィズムの類型

ポリモルフィックな型システム:1つのオブジェクトが複数の型に属すことができる型システム。

.1:ポリモルフィズム技法の分類

 

名前

異称

ad hoc

型強制(coercion)

暗黙の型変換

多重定義(overloading)

 

general

包含(inclusion)

継承

総称型(parametric)

テンプレート型

Caradelli & Wegner 1985に基づく)

強制型変換の利用

  1. 整数ー有理数、多項式ー有理式
  2. サンプル点列データによる関数定義

長所:台集合に共通部分があるが、構造が準同型の関係ですらない型を結びつける唯一の方法

短所1:コピーが作成されるので、あまり巨大な構造を作るような変換を行なったりさせない方が無難かも…。

短所2:一般にあまり大規模な処理が仮定されていないので、あまり重い処理をさせない方が無難かも…。

多重定義の利用

長所1 実行効率を落さずに概念的には同じだが実装の著しく異なる関数や演算子のポリモルフィックな適用が可能になる。

長所2:(ラジアン型など)目新しい表現・アルゴリズムに対する違和感を減らす効果がある。

長所3:(逆行列を求解に用いるなどの)初歩的な間違いを減らす効果がある。

短所1:定義の作業が結構煩雑。

短所2C++では備え付けの演算子を既定の優先順位でしか利用できない。

継承の利用

解析関数の階層構造の表現

行列の構造分類の階層構造(テンプレートを利用した方が賢かったかも。)

長所:一部関数のコードが素直に再利用できる。

短所1:準同型の中でも部分構造は制約がきついので数学ソフトウェアでは利用できる局面が必ずしも多くない。

短所2:あまり軽い処理ではオーバーヘッドが大きくなる。(ループの中で使われる処理でなければさして問題ではない。)

パラメトリック多相の利用

a)関数型に共通のテンプレート

b)精度のパラメータ化

メモ:この研究の当時(1993年前後)はまだテンプレートが十分に利用できなくてマクロで代用。

長所:構造的には同じだが実装の著しく異なる型のポリモルフィックな定義が実行効率を落さずに可能になる。

短所1:マクロ展開のような実装のためC++ではデバッグがし辛い傾向がある。

短所2:マクロ展開のような実装のためC++ではコードが膨張することがある。

 

多倍長浮動小数点演算と初等関数値計算ライブラリ

目的

事前に程度が予測し辛い多項式の評価を行う。

特徴

実装上の問題

  1. 文献が意外と見つかりにくい。
  2. 研究のヤマ場は20年以上も前に終わっていて、あるサーベイが嘆くことには「今や秘術」。

    特に基数変換では苦労した。

  3. 小数部・指数部の精度が固定でないので計算にテーブルが利用できない。

→結局、全てマジメに計算した。

結果

  1. 基本演算の計算時間は目標にしていたPARIライブラリに対して同精度で比較して3倍程度になった。しかし利用したライブラリが備える整数演算の速度も3倍程度なので浮動小数点演算の実装としては恐らく同程度と思われる。(多倍長整数乗算の改良が課題。)
  2. (数式処理学会1995年度大会で発表)

  3. 初等関数の演算ではPARIを凌駕できた。

(未発表)

多項式の対話的表示法

背景

(係数だけで1Kバイトもあるようなこともあり、そのように酷い場合は何ページにもわたって係数が表示されることもある。)

アイディア

(1997年特許出願(もう公開されているはず…)。)

概念図

[省略]

数式処理システムの並列計算機への移植

1996年、PCW’95 Japan及びASCM’96で発表)

今後の方向

以上、動機は十分。実現するには色々勉強が必要。以下はその方向性について。

作りたいもの

色々夢はあるが、まずは言語を設計してみたい。

→コンパイラを元にしてインタプリタ的に使える環境を備える。

→言語処理系と計算エンジン部分は分離する。

アルゴリズムの記述

(「手続き型のような体裁で書ける関数型言語」)

→目をつけている技術:Lazy EvaluationList/Array comprehension

数学的構造の記述

→目をつけている技術:Type Inference

並列計算

→目をつけている技術:Future

→目をつけている技術:Agent関連

拡張性

→目をつけている技術:Dynamic Loading関連

今年は…

取り敢えずアルゴリズム記述について考える。