2008年11月1日土曜日

行列のできるプログラミング言語(1)

いつか何かの役に立つかも知れないのでメモ.

Java編



Jakarta commons math



import java.math.BigDecimal;
import org.apache.commons.math.linear.*;

public class Main {
public static void main(String[] args) {
// 行列Aを作成
double[][] m = {{3,-4,2}, {2,5,3}, {-2,3,-2}};
BigMatrix A = MatrixUtils.createBigMatrix(m);
System.out.println("行列A");
printBigMatrix(A);
// Aの逆行列A^-1を求める
BigMatrix inA = A.inverse();
System.out.println("行列A^-1");
printBigMatrix(inA);
// AとA^-1の積
BigMatrix tmp = A.multiply(inA);
System.out.println("A*A^-1");
printBigMatrix(tmp);
// 連立方程式
// Ax = b
BigDecimal [] b =new BigDecimal [3];
double [] t = {0,6,1};
for(int i=0;i<3;i++){
b[i]= new BigDecimal(t[i]);
}
BigDecimal[] x = A.solve(b);
System.out.println("連立方程式");
for(int i=0;i<3;i++){
System.out.println(x[i]);
}
return;
}
public static void printBigMatrix(BigMatrix tmp){
for (int i = 0; i < tmp.getRowDimension(); i++) {
for(int j=0;j<tmp.getColumnDimension();j++){
System.out.print(tmp.getEntry(i, j) + "\t");
}
System.out.print("\n");
}
}
}


JAMA編



import Jama.*;

public class Main {
public static void main(String[] args) {
double[][] m = {{3,-4,2}, {2,5,3}, {-2,3,-2}};
Matrix A = new Matrix(m);
double [] t = {0,6,1};
Matrix b = new Matrix(3,1);
for(int i=0;i<3;i++)
b.set(i, 0, t[i]);
Matrix x = A.solve(b);
for(int i = 0;i<x.getRowDimension();i++)
System.out.println(x.get(i, 0));
}

}

0 件のコメント: