こんにちは。
行列の計算ライブラリはすでに多くありますが、再確認のため1から書いてみました。 processingというかjavaで書いたのは後で使うためです。
コード
//java void setup() { float[][] A = {{ 1, 2, 3, 4, 5}, {16, 17, 18, 19, 6}, {15, 24, 25, 20, 7}, {14, 23, 22, 21, 8}, {13, 12, 11, 10, 9}}; println( determine( A ) ); } void draw() { } float determine(float m[][]) { float result = 0; int n = m.length; //行列mの次元数 if(n==1) { result = m[0][0]; } else if(n==2) { result = m[0][0]*m[1][1]-m[0][1]*m[1][0]; } else if(n==3) { result = m[0][0]*m[1][1]*m[2][2]-m[0][0]*m[1][2]*m[2][1] +m[0][1]*m[1][2]*m[2][0]-m[0][1]*m[1][0]*m[2][2] +m[0][2]*m[1][0]*m[2][1]-m[0][2]*m[1][1]*m[2][0]; } if(n > 3) { float[][][] _m = new float[n][n-1][n-1]; float[] c = new float[n]; for(int k = 0; k < n; k++) { c[k] = m[k][0]; for(int j = 1; j < n; j++) { for(int i = 0; i < k; i++) { _m[k][i][j-1] = m[i][j]; } for(int i = k+1; i < n; i++) { _m[k][i-1][j-1] = m[i][j]; } } result += c[k] * pow(-1, k) * determine(_m[k]); } } return result; }
実行すると 11760.0 と表示されるかと思います。
具体的な証明とかはwikipedia見てください。
3次元以下ならサラスとかで解けるんですけど4次元以上だと行列式の余因子展開しなければならないんですよね。
プログラムと合わせてみると分かりやすいかもです。
次回はこれを使った何か紹介します。