next up previous contents index
Next: プログラム作成手順 Up: はじめに Previous: プログラミング言語 MATX

MATXの構造

MATXの構造を図1.1に示す。 現在,MATXは3つユーザ・インターフェース・ツール(インタプリタmatx, コンパイラmatc,行列エディタmated)を持っている。 これらのツールは,クラスライブラリMaTX-Libを使って作成されている。 MaTX-Libは,複素数クラス,多項式クラス,有理多項式クラス,行列クラス, リストクラスのC言語のクラス・ライブラリの集合である。      
  
図 1.1: MATXの構造
\includegraphics[width=0.7\linewidth]{Fig/arch.eps}

特に,行列クラス・ライブラリは,高レベル・ライブラリと低レベル・ライブラリ から構成される。 低レベル・ライブラリは,約300個の関数から構成される。 データの高速アクセスを目的としているので,データのチェック等を行なわないため, 使用には注意が必要である。 データの演算とメモリ効率を高めるための最適化もこのライブラリで行なわれている。 高レベル・ライブラリは,低レベル・ライブラリの上に作られ, 約200個の関数から構成される。 高レベル・ライブラリの目的は,データの抽象化を行なう ユーザ・インタフェースを提供することである。 データの保存に必要なメモリ領域を管理し,データの属性に応じて適当な 低レベル・ライブラリの関数を呼び出す。

制御系のCADが開発されるにつれ,制御系設計アルゴリズムの計算を数値的に安定に 行なうことの重要性が認識され,多くの数値的に安定なアルゴリズムが提案された [11]。 最適レギュレータやオブザーバなどの線形制御理論を中心とする 制御系の解析・設計に必須であるLU分解,QR分解,QZ分解, 固有値問題,一般固有値問題,等の行列演算を数値的に安定に行なうアルゴリズムを まとめたものにLinpack[2]やEispack [4,15]がある。   これらのパッケージは,Fortranで記述されており,簡単に入手できるので, 多くの制御系CADの内部で利用されている[13,17]。 MATXは,Eispackに含まれるルーチンのうち固有値問題と一般固有値問題の ルーチンをC言語で書き直したものを使用している。


  
図 1.2: MATXの内部処理
\includegraphics[width=0.7\linewidth]{Fig/process.eps}

1.2は,MATXの内部処理を示している。 MATX言語で書かれたソースファイル(test.mm)を入力すると,入力文字列は, 字句解析部によってMATXの認識する表現単位に分割される。 分割された基本単位(token)は,構文解析部に渡され,MATXの構文ルールにした がって再構成される。 ルールが認識されると,対応するアクションが起動される。 それぞれのアクションにおいて,データ型の不一致,不適当な引数の使用, 初期化されていない変数の使用,等が検出される。


  
図 1.3: 自動型変換規則
\includegraphics[width=0.7\linewidth]{Fig/translation.eps}

型の異なるデータの演算においては,図1.3に示す ``自動型変換規則''にしたがって,型変換が行なわれる。 プログラムの多くの点ついての厳密なチェックが終ると, matcは,C言語コード生成部を呼びだし,matxは, 内部コード生成部を呼び出した後,生成されたコードを実行する。

Masanobu KOGA 平成10年8月19日