Javaで行列式を計算する

Javaで行列式を計算させるのに一番手っ取り早いのはフリーのライブラリを利用することでしょう。ですが、そのようなことができない場合 *1 、自分でソースコードを書く必要があります。そのことについて、ちょっと前に話に挙がっていたので作ってみました。

public class Matrix {
	
        // 行列式を求めるメソッド
	public static double det(double[][] args){
		
		final int size = args[0].length;
		for(int i=0; i<args.length; i++){
			if(args[i].length!=size)
				throw new IllegalArgumentException();
		}
		
		double det = 0;
		for(int i=0; i<size; i++){
			double rightdown = 1;
			double leftdown = 1;
			for(int j=0; j<size; j++){
				rightdown *= args[(i+j)%size][j%size];
				leftdown  *= args[(i+size-j)%size][j%size];
			}
			det += rightdown - leftdown;
		}
		return det;
	}
	
	
	public static void main(String[] args){
		double[][] matrix = new double[][]{
				{1,2,3},
				{4,5,6},
				{7,8,9}
		};
		
		System.out.println(
				det(matrix));
	}
}

これは行列式を計算させる時によく用いられるサラスの方法を実装したものです。引数として配列の配列を渡していますが、この配列のサイズは全て同じでないといけません。また、どちらが行でどちらが列とかそんなことは気にしなくても正しい結果が得られます *2

注意しなければいけないのが、サラスの方法では4次以上の正方行列の行列式は計算できないこと。4次以上の場合は、余因子展開をするなどして次数を落とす必要があります。

ちなみに、このコードはBSDライセンスです。とは言っても、普通に書いても同じようなコードになるんで、適当に利用してやってください。このコードで発生した不具合については、なんら責任を負いません。また、これに基づいたコードについては著作権表示を忘れないようにお願いします *3


(2008/11/24 追記)
Javaのライブラリ、Apache Commons Mathを利用した行列計算の方法についてもまとめてみました。
[blog] Apache Commonsを使って行列計算

(2008/11/24 追記)
余因子展開を用いた行列式の計算を行うJavaコードを掲載しました。
[blog] Javaで行列式計算(余因子展開)

*1 : たとえば、学生さんのプログラミング演習などの場合
*2 : これは行列式の定義なんかでも自明ですね
*3 : 誰も、そんなたいそうなことには使わないと思いますが

トラックバック(0)

このブログ記事を参照しているブログ一覧: Javaで行列式を計算する

このブログ記事に対するトラックバックURL: http://trialpc.net/mt/mt-tb.cgi/1384

コメントする

Advertizement

このブログ記事について

このページは、tetsuが2007年10月15日 00:37に書いたブログ記事です。

ひとつ前のブログ記事は「映画「アルマゲドン」」です。

次のブログ記事は「Cygwinで日本語入力・日本語出力できるようにする」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.0

最近のコメント

カウンタ

リンク