研究代表者はLispを用いて偏導関数自動導出システム(ADDS)を既に作成している。このADDSに対して、本研究では入力する言語とその処理システムについて検討を加え、それに基づいて試作システムを作成した。 ADDSの言語は専用言語であり、数式処理システムREDUCEの言語に近いインタープリタ言語であった。それに対して、数式中にベクトル変数、配列変数および微分演算子を記述できるように既存言語Cを拡張し、コンパイラ言語とすることを提案した。 条件分岐や繰り返しを用いて定義される関数を、これらを含まない直線的プログラム部分から再帰的に構成されているものとして分解する方法、その内部表現、微分操作について検討した。微分操作には順モードと逆モードがあり、それらを組合わせることによって、計算量・記憶量を削減できることを示した。変数の依存関係の分析から、逆モードの微分が関数計算と並行して行え、記憶量の大幅な削減が可能となる場合があることなどを示した。 上記の拡張C言語に対する構文解析、内部表現について検討した。試作システムとし、コンパイラではなくプレコンパイラとし、拡張C言語をC言語に変換するものとした。YaccおよびLexを用いて構文解析部を作成した。微分操作については、直線的プログラムおよび条件文について、順モード、逆モードの微分ができるようになった。 繰り返し文の微分操作ができるようにすること、変数の依存関係の分析から、順・逆モードの組み合せ、実行順序などを計算量、記憶量が少なくなるように自動的に決定する方法を開発することなどが、今後の課題である。
|