Javaアプレット(29) 行列の演算

今回はBMatrixクラスに行列の演算を行うメソッドを追加しました。前回あったメソッドは、
setValue() – ある要素に値の設定する
getValue() – ある要素の値を返す
clear() – すべての要素をゼロクリアする
とテスト用の
toString() – 文字列へ変換する
のみでしたが、今回は、行列の単項演算として、
clone() – 行列のコピーを返す
inv() – 反転を返す
tran() – 転置を返す
を、2つの行列同士の2項演算として、
equals() – 等しければtureを返す
or() – 論理和を返す
and() – 論理積を返す
diff() – 論理差を返す
xor() – 排他的論理和を返す
の計8個のメソッドを追加しました。ソース等の情報を GraphGo02 として公開しました。
clone()は単に行列をコピーします。たとえば
BMatrix a = new BMatrix(3, 3);
BMatrix b = new BMatrix(3, 3);
と定義したとして、
a = b;
とすると、オブジェクトは参照として扱われるため、aとbが同じオブジェクトを指し示すことになります。この場合、bを変更すると、aも変更されてしまいます。
a = b.clone();
とすると、新たなBMatrixが生成されるので、bを変更しても、aは変更されません。
tran()は行列の転置です。行と列を入れ替えたBMatrixが新たに生成され返されます。
それ以外は、行列の要素に対するビットの論理演算です。各演算の数学的表記とその結果の表を以下に示します。
図:ビット論理演算
【図43 ビット論理演算】
ここまで作ったあと、今度は2進数のベクトルのクラスBVectorを定義しました。今回は内部で1行のBMatrixを使うことによって、転置tran()以外はBMatrixと同じメソッドを用意しました。処理が遅くなる可能性がありますが、簡単に実装できるので、このようにしました。今後性能上の問題が発生したときに見直そうと思います。
次回はベクトルと行列の間の演算などを作る予定です。
(つづく)

カテゴリーJava

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。