next up previous contents index
Next: MATXの構造 Up: はじめに Previous: はじめに

プログラミング言語 MATX

制御系の設計において外乱やプラントパラメータの変化に対する閉ループ系の シミュレーションを行なうことは重要であるので, 制御系設計に計算機を使用することはシミュレーションから始まった。 代表的なものに非線形システムのシミュレーションを行なうために開発された Simnon[1]がある。残念ながらSimnonは行列演算を効率良く 記述することができなかった。 制御系の解析・設計におけるベクトルや行列演算 を簡単に行ないたいという要望から行列を基本データ構造とする言語 Matlab[13]やMatrixx[17]が生まれた。 MatlabやMatrixxは,LinpackやEispack等の信頼性のある行列計算アルゴリズム を元に構築された行列演算言語であり,紙に書いた行列演算をほとんどそのまま プログラムとして使用できるという記述性の良さから近年多く使用されるよう になった。

MATXは行列の演算や成分の操作法について Cleve Molerらによって開発されたMatlab言語  [12,13]と いくつかの特徴的性質を共有している。 しかしながら,Matlabはデータの型を「区別しない」言語であり, 唯一のデータ型は行列であり,他の型のデータの演算や操作をするには, 特別な演算子を使うか関数を呼び出さなければならない。 一方,MATXはデータの型を「区別した」言語である。 データ型には,整数,実数,複素数,文字列,多項式,有理多項式,行列,配列, リストがあり,行列,配列,多項式,有理多項式,リストは次数指定を必要としない。

MATXは数値解析だけでなく数式処理も行なえ,方程式の解を求めたり, 多項式や有理多項式の導関数や不定積分を計算できる。 MATXの文法の根幹となる制御の流れや関数やプログラム構造は,C言語 から受け継がれている。C言語は,PDP-11上でDennis M.Ritchieによって開発された プログラミングである  [7,20,8,22]。 MATXはすべてC言語で記述されており,特に,構文解析部は構文解析部生成言語 として有名なyaccを用いて作成されている [18,21]。  

Matlabは,インタプリタであるためFortranやCで作成されたプログラムに比べて, 複雑な計算の繰り返しなどに時間がかかる。 そのため,Matlabは特別なインターフェースをもっていて, 別にコンパイルしてリンクされたFortranやCのルーチン(mex-files)を Matlab環境から普通のm-fileのように呼び出すことができる。 m-fileによるアルゴリズムの実現の速度が十分でない時に,この機能は有効である。 しかしながら,mex-fileの作成は簡単な作業ではなく,MatlabとFortranの間で 関数のパラメータを交換するための特別なgateway functionを書かなけれ ばならない。

MATXは対話型処理を行なうインタプリタだけでなく, コンパイラも提供している。インタプリタをmatx, コンパイラをmatcと呼ぶ。パッケージ全体を表す時はMATXと書いて インタプリタ(matx)と区別する。 コンパイラ(matc)は,インタプリタ(matx)と同じプログラムを 処理することができ, 与えられたプログラムから移植性の良いC言語のコードを生成する。 プログラムを拡張するためには,アルゴリズムをmmファイルの中に 関数として実現する。      この過程は,matxを使って対話的に途中経過をチェックしながら行なえる。 関数が完成した後,matcを使ってコンパイルし,実行プログラムを作る ことができる。C言語のファイルをmatcの出力コードにリンクすることによって, C言語の関数をMATXの関数から簡単に呼び出すことができる。 このおかげで,既存の膨大なC言語のルーティンを利用することができ, 計算速度が上がり,メモリ効率を良く使用できる。   


Masanobu KOGA 平成10年8月19日