数式処理システム
数式処理システム(すうしきしょりシステム、英文名称:Formula Manipulation System)は、コンピュータを用いて数式を記号的に処理するソフトウェアである。
例えば式の展開として (x + 1)(x + 2) = x^2 + 3x + 2を求めたり、微分として y = x^n に対して \frac{dy}{dx}\ = nx^{n-1}を求める操作を取り扱う。取扱い可能な数式と演算はソフトウエア製品により異なる。
英文別称にはComputer algebra system(CAS)、Symbolic Computation Systemがある。
数式処理機能以外に数値計算機能、グラフ表示機能等も統合した数学ソフトとして存在する製品もある。
また,数式処理システムに向けた計算アルゴリズムを研究する分野の名称も数式処理(あるいは computer algebra の直訳として計算機代数)と呼ぶ。
具体的な数式処理システムの製品については数式処理システムの一覧を参照されたい。
数式処理システムは、一般に次のような数・数式を表現、保持や演算処理できる。
三角関数、指数関数、対数関数、冪根(より一般には代数関数)などの初等関数を含む数式
総和、級数
数式の微分(導関数)
ガンマ関数、ゼータ関数、ベッセル関数、誤差関数、超幾何関数などの特殊関数を含む数式
数値計算としては次のものがある。
(任意長桁の)整数や有理数、特殊定数、浮動小数点数、区間数、複素数、代数的数,有限体。
記号的操作には、次のようなものがある。
数式内の函数や数値を記号的に置換する。
単変数あるいは多変数の多項式の因数分解。
式を可能な限り単純な形式に変換したり、何らかの標準形式にする。前提条件や制約条件を考慮した自動的な簡約化も行う。
但し、この操作は常に可能とは限らず、ある程度一般的な(例えば初等函数と絶対値函数を含む)二つの数式の等価性の判定はアルゴリズム的には決定不能なことが示されている。
数式の形式を変更する。三角関数を指数函数で置換するなど。
単変数の低次あるいは高次の代数方程式を厳密にあるいは近似的に解く。消去法により多変数の線形あるいは非線形の連立代数方程式を解く。
行列に対する各種操作。行列積の計算、逆行列の計算、固有多項式の計算、各種標準形への変換など。
各種領域での線型および非線型の方程式を解く。
微分・積分、解析
数列や函数の極限を求める。
常に可能なわけではない。
函数の級数への展開、級数の総和や積計算など。※
微分と偏微分の操作。
一部の不定積分と定積分。多次元積分も含む。
一部の微分方程式や差分方程式を解く。
記号的な制約条件に基づいて最適値を与えるための必要条件を数式として導くこと。
限量記号消去法(Quantifier Elimination Method)。
任意の精度の数値の操作。
数式の簡約(注:一般的な数式に対してそれを一意に簡約する算法は存在せず,たとえば数式が零と等価であるかの判定も不可能性である)
数式中の変数への代入、数式中の指定したパターンに対する置き換え、数式の指定した部分あるいは指定したパターンに合致する部分の抽出
単変数あるいは多変数の多項式のGCD(最大公約数)の計算
記号積分(不定積分、定積分、多重積分)(注:必ずしも閉じた数式にはならない.場合によっては特殊関数を用いた表示になる.)
線形代数(ベクトル、行列,テンソルに対する各種演算)(注:普通は明示的な成分表示を用いた取り扱いをする.)
無限級数の和を求める(場合によっては特殊関数を用いた表示になる)
代数方程式の解の表示(注:一般には解を四則と冪根の組み合わせで表現することはできないが,方程式の解を用いてさらに代数計算を行う場合には適切な代数拡大体を構成してその上で処理すれば原理的には可能になる)
常微分方程式の閉じた数式による解(一般解あるいは特殊解)の表示が可能であればそれを求める(方程式が線形でも一般的には表示はできない.場合によっては特殊関数を用いた表示になる)
差分方程式の閉じた数式による解の表示が可能ならば求める(方程式が線形でも一般的には閉じた表示はできない.場合によっては特殊関数を用いた表示ができることがある)
フーリエ変換,ラプラス変換,逆ラプラス変換を求める(どれも一般的には結果を閉じた数式では表せない)
グレブナー基底(連立代数方程式の消去演算による変数の消去)
QE(Quantifier Elimination,限定子消去)(単独あるいは連立の(通常は実の)等式や不等式で表された命題論理式(条件式)の中から,限定子“∃"や“∀"を消去した等価な関係式を導出する手法)
上記以外にも、以下のような機能を持つ数式処理システムがある。
数値の高精度な近似値を計算する。例えば、21/3 を1万桁以上計算するなど。
計算物理学のための物理学パッケージのように、応用数学的な特定用途に特化したアドオンが提供されているもの。
グラフィック機能。関数を2次元または3次元の図にプロットしたり、アニメーション表示する(画像ファイルとして出力する)。
関数値を波形として扱って音を鳴らす。
データベースや表計算システム、プログラミング言語から利用するためのAPI。
文字列探索などの文字列操作機能。
数式をTeXに類似した組版システムを使って綺麗に表示する。あるいはTeX形式でテキストファイルとして(入)出力する。
数式などを、Fortranなど他のプログラミング言語で用いられている表記法との間で相互に変換や入出力する。
定理の自動証明や証明検証(Proof Checker)
システムに対するプログラミングやユーザーからの入力指示とそれに対する出力結果を保存して、再利用や再度の実行を可能とするユーザーインタフェース。
多くの場合に、システムはプログラミング言語としての機能を持ち、ユーザーがアルゴリズムをプログラムとして記述して処理させることができる。言語の様式は様々で、命令型プログラミングや関数型プログラミングもあれば、制約プログラミングや論理プログラミングもあるし、4GL的なものもある。
初期のシステムとして、ノーベル物理学賞受賞のマルティヌス・フェルトマンが理論素粒子物理学計算のために1963年にCDC計算機のアセンブラで開発したSchoonschip、
同じく理論素粒子物理学(量子電磁気学、QED)計算のためにAnthony.C.Hearnが1963年にLISP上で開発したREDUCE、天体力学計算に特化したケンブリッジ大学のCAMAL、そのほかFORTRANで記述されたFORMACとPL/Iで記述されたPL/I FORMAC、などいろいろな試みがあった(REDUCEは今では無料版が存在する。現在でもまだ,たとえば長大な多項式や有理式を主とする計算の場合には有用である)。
1960年代には記号処理の側面から人工知能の研究の一環として主にLISPベースでいくつかの数式処理システムが作られた。
その最も典型的な例は、MITのProject-MACの成果であるMACSYMA である。(後にDOE MACSYMAを元にして Common Lisp 上にW.Shelterによって移植して作られたMaximaは、GPLライセンスのフリーソフトウェアとして現在でも開発改良が続けられている)。
数式処理研究は初期の段階では、それまで普通に人間の手計算で行われていた(中学・高校・大学生レベルの)教科書に出てくるような初等的な数式の操作や処理方法を実現するために、(主にLISPシステムなどの記号処理系の上で)実装することであった。
それにより人間の手計算に比べて非常に高速でしかも長大な式の計算が可能となり、特に(アルゴリズムやプログラムに間違いがなければ)計算された結果にはミスがないことが利点であった。
しかし次第に、試行錯誤による方法の限界と計算量の観点から、普通の人間が用いている(初等的で自明な)計算法や公式集に出ている規則のあてはめによる処理法だけではなくて、より系統的な(高度な)数学的アルゴリズムの開発や実装に研究の中心が推移してゆき、今では過去に想定されていたような記号処理、人工知能の技法、ソフトウェア技法の単なる応用分野であるとはいえないものになった。
電子計算機が安価でかつ強力になり、また個人による所有や利用が自由にできるようになり、高度でインタラクティブなプログラム開発環境がありふれたものとなったことなどにより、次第に多くの数学研究者が参入を始めたことで、高度な数学を駆使したアルゴリズムが数式処理に取り入れられる傾向が加速された。
現在、実務であるいは教育で最もよく使われている商業版の数式処理システムはMathematica と Mapleであろう。
日本で開発された数式処理システムとしては、元理化学研究所の佐々木建昭らによるLisp ベースの GAL、元富士通研究所で開発された(現在は神戸大学などが中心となっている) Risa/Asir、シンプレックス社の開発した数学表記のままで処理が行えるカルキング、などがある。
1987年、ヒューレット・パッカードは世界初の数式処理機能を持った電卓 HP-28 シリーズをリリースした。代数的な数式を入力でき、方程式を解いたり、微積分が可能であった。
1995年、テキサス・インスツルメンツは数式処理システム Derive を搭載した電卓 TI-92 をリリースした。その後も TI-89 などの後継機種をリリースしている。