• 検索結果がありません。

数値計算言語を統合したオブジェクト指向言語による制御系設計

N/A
N/A
Protected

Academic year: 2021

シェア "数値計算言語を統合したオブジェクト指向言語による制御系設計 "

Copied!
2
0
0

読み込み中.... (全文を見る)

全文

(1)

• Java and RDB (Relational Database)

• Java and XML

RDB’s Table Java’s Object

O(Object) / R(Relational) mapping O(Object) / R(Relational)

mapping

Data BindingData Binding

Java’s Object XML’s Data

(@Table,@Column

@XmlElementet

数値計算言語を統合したオブジェクト指向言語による制御系設計

Control System Design using Object Oriented Language Integrated with Numerical Computation Language

古賀  雅伸(九工大) ○  松永  隆徳(九工大)

Masanobu KOGA, Kyushu Institute of Technology, Kawazu 680-4, Iizuka-shi, Fukuoka Takanori MATSUNAGA, Kyushu Institute of Technology

In this paper, we propose a new method to develop a numerical computation program in Java by using the annotation for Numerical Computation. We develop the annotation that define a numerical computation part in Java, and this processing system that execute annotation part. By the annotation for numerical computation, the user can easily develop the numeric calculation program in Java only by the knowledge of mathematics.

Key Words: Object Oriented, Numerical Computation Language, Control System Design

1. はじめに

近年,ソフトウェア開発の大規模化・複雑化が急速に進ん でいる.これは行列や複素数計算など科学技術計算を扱う数 値計算分野のプログラム開発においても同様である.

従来,数値計算を扱うプログラム開発方法は,大きく分け て2つに分類できる.ひとつは,Java言語など広く普及して いる言語を用いた開発.もうひとつは,Matlab や MaTX[1]

などの数値計算言語 NCL(Numerical Computation Language) を用いた開発である.前者は,オブジェクト指向言語による 再利用性の高いプログラム開発が可能であるが,数式部分の 可読性・保守性が低下してしまう.一方,後者は可読性・保 守性に優れた数式表現が可能であるが,再利用性や拡張性が 低いプログラムとなってしまう.

これまで,NCL用のプログラムをC言語やJava言語用に 変換する処理系や,Java上から数値計算エンジンを呼び出す 方法[2]が提案されてきたが,Java上での数式表現の可読性・

保守性の低さを解消するまでには至っていない.

そこで,本研究では,Java言語とNCLを組み合わせた方 法として,Java言語のアノテーション技術を用いた数値計算 言語の利用に関する研究を行っている.具体的には,Java のアノテーション技術を用いて,Javaプログラム中に数値計 算言語を埋め込むことを目的としている.本研究では,Java プログラム中に数値計算言語を表現するための数値計算用 アノテーションを開発し,そのアノテーションを処理するた めのアノテーションプロセッサを開発する.これにより,利 用者は数学的知識だけでJava 上で数値計算プログラムを開 発することが可能となる.

なお,本研究で扱う数値計算言語は,科学や工学に必要な 数値および数式計算をサポートする記述性に優れたプログ ラミング言語であるMaTXを用いる.

etc)

c

2. 関連研究

Fig.1: The example of annotation 2.1. インライン・アセンブラ    インライン・アセンブラ

とは,C言語などで記述されたプログラムの一部に,アセン ブラコードを埋め込むための技術である.これによって,最

小限のアセンブリ言語の知識で,マイクロプロセッサの性能 を極限まで引き出して実行速度を高めたり,メモリ使用量を 極限まで減らしたりなどの実行効率を上げることが可能と なる. 

2.2. アノテーション    アノテーションとは,あるデータ に対して関連する情報(メタデータ)を注釈として付与する ことを意味し,プログラムに開発者の意図を付加する技術で ある.Java標準では,対象となるメソッドがスーパークラス のメソッドをオーバーライドしていることを示す@Override などのアノテーションが用意されている. 

アノテーション技術の応用として,アノテーションは異な るデータモデルを結び付ける技術として利用されている.J avaオブジェクトからリレーショナルデータベース(RDB)の テーブルを利用することができるO/R(Object/Relational) マッピングツールやJavaからXMLを扱うことができるJava/X MLバインディングツールがそれにあたる(Fig.1). 

3. 数値計算アノテーションの概要

本研究で開発した数値計算アノテーションを「@MaTX」

と表現し,これをプログラム中に付加することで Java プロ グラムにおける数値計算部分であることを明示する.

[No. 07-255]   第 50 回自動制御連合講演会( 2007.11.24, 25 横浜市)

-892-

624

(2)

3.1. Tプログラム上での定義T    数値計算アノテーションを 利用するには,フィールド宣言時に以下のようにアノテーシ ョンの宣言と値の定義が必要である.  

数値計算アノテーションの値の定義では,行列の定義や数 式表現を記述する.例えば,2×2の行列を定義するときは「@

MaTX("[[1 2][3 4]]")」と記述する.また,数式を用いる場 合は「@MaTX("A*B+C*D")」と表現する. 

4. アノテーション処理システムの開発

本研究では,数値計算アノテーションを処理するためのア ノテーション処理システムを開発する.本システムは,数値 計算アノテーションの情報を Java で実行可能な状態にする 目的から,アノテーション情報のJavaコード化を行う.Fig.2 はその処理フローである.

まず,アノテーションの値として渡される行列等の定義や 数式表現からMaTXプログラムを作成する.次に,MaTXプ ログラムを等価なJavaプログラムに変換する処理系(matjコ ンパイラ)[3]を用いて,Java コード化を行う.そして,Java 用に変換したプログラムから数値計算アノテーションに関 係する箇所を抽出する.最後に,アノテーションを付加した Javaプログラムと,アノテーション情報をJavaコード化し たものを結合し,新しいプログラムとして生成する.

5. 例題

本研究で開発したアノテーションによる数値計算プログ ラムの開発方法を従来の開発方法と比較する.例として,(1) 式に示すリカッティ方程式の解法のひとつである有本-ポッ ターの解法[4]を実装するプログラムを作成する.

ig.3 がアノテーションを用いたプログラム実装, Fig.4 が

従来方式 アノテーション方式 F

従来のプログラム実装(Java 数値計算ライブラリ[5]を用い た方法)で表現したものである.今回,Fig.3とFig.4につい て,プログラムの可読性・保守性の観点で評価を試みる.

評価方法

可読性 低い 高い

保守性 低い 高い

結論として,アノテーションによって数学的表現で表現可 能となったことから数値計算プログラムの可読性・保守性が 向上した.

6. おわりに

本研究では,Javaのアノテーション技術を用いた数値計算 プログラムの開発方法を提案した.これにより,数学的表現 と同等の記述で,Javaで数値計算プログラムの開発が可能と なった.本稿では,基本的な行列計算を例として紹介したが,

今後は複雑な計算を必要とする制御系設計の場面において,

その有効性を検証する.

文    献

[1] 古賀雅伸,制御・数値計算のための MaTX,東京 電機大学出版局,February 2000.

業大学 [3]

化に基づく Java による数値計算言語

[4]

業大学 卒業論文,2001.

[2] 松木毅,オブジェクトモデル化に基づく Java によ る数値計算エンジンの開発,九州工 修士論 文,2004.

石田聡,古賀雅伸.プログラミング言語のオブジ ェクトモデル

の利用,平成 14 年 電気学会 電子・情報・システ ム部門大会,2002.

小郷寛,美多勉.システム制御理論入門.実教出 版株式会社.1979.

[5] 松木毅,Java 数値計算パッケージの開発と制御系 設計への応用,九州工

@MaTX(“[[0 0][0 1]]”) Matrix A = null;

@MaTX(“[[1 1][0 1]]”) Matrix

// Define Matrix “A”

Matrix A = new RealMatrix(new double[]{{0,0}{0,1}});

// Define Matrix “R”

Matrix R = new RealMatrix(new double[]{{1,1}{1,1}});

// The Arimoto-Potter Algorithm Matrix H = A.appendRight(B.unaryMinus()

.multiply(R.inverse()).multiply(B.transpose())) .appendDown(Q.unaryMinus()

.appendRight(A.unaryMinus().transpose()));

// Define Matrix “Q”

Matrix Q = new RealMatrix(new double[]{{1,1}{1,1}});

// Define Matrix “B”

Matrix B = new RealMatrix(new double[]{{1,1}{0,1}});

Fig.4: Code with Class Library

B = null;

@MaTX(“[[1 1][1 1]]”

Matrix Q = null;

)

@MaTX(“[[1 1][1 1]]”) Matrix R = null;

// The Arimoto-Potter Algorithm

@MaTX(“[[A, -B*R~*B’][-Q, -A’]]”) Matrix H = null;

Define Matrix

Define Algorithm

Fig.3: Code with Annotation

@MaTX(“ アノテーションの値 ”)

フィールドの型  フィールド名 ;

⎥ ⎦

⎢ ⎤

= −

T T

A Q

B BR H A

1

Create Java code with annotation

Generate Java Code Annotation’s Value, Variable’s Type & Name etc…

Access Annotation & Get Annotation’s Data

Convert into Java

Pick out Numerical Computation part

Bind together

Create MaTX Code

Generate New Java Code

Programming Phase

Compiling Phase Annotation Processor

matj compile

Fig.2: The processing flow of Annotation

(1)

-893-

参照

関連したドキュメント

しかし,物質報酬群と言語報酬群に分けてみると,言語報酬群については,言語報酬を与

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

充電器内のAC系統部と高電圧部を共通設計,車両とのイ

、肩 かた 深 ふかさ を掛け合わせて、ある定数で 割り、積石数を算出する近似計算法が 使われるようになりました。この定数は船

Guasti, Maria Teresa, and Luigi Rizzi (1996) "Null aux and the acquisition of residual V2," In Proceedings of the 20th annual Boston University Conference on Language

 “ボランティア”と言えば、ラテン語を語源とし、自

②上記以外の言語からの翻訳 ⇒ 各言語 200 語当たり 3,500 円上限 (1 字当たり 17.5

お客さまが発電設備を当社系統に連系(Ⅱ発電設備(特別高圧) ,Ⅲ発電設備(高圧) , Ⅳ発電設備(低圧)