Matrix.java如下:
/**
 * FileName: Matrix.java
 * Author:   Shiuh-Sheng Yu
 * Since:     1998/3/17
 * Modify Date: 2005/07/11, add more comments
 */
public class Matrix {
    private double[][] data;

    /* constructor */
    public Matrix(double[][] array) {
        data = array;
    }
    
    /* constructor */
    private Matrix(int x, int y) {
        data = new double[x][y];
    }

    /*
     *  複製物件
     */
    public Object clone() {
        double[][] x = new double[data.length][data[0].length];
        for (int i=0; i < x.length; i++) {
            for (int j=0; j < x[0].length; j++) {
                x[i][j] = data[i][j];
            }
        }
        return new Matrix(x);
    }

    /**
     * 矩陣加法
     * X is m by n, Y is m by n, Z = X + Y is m by n
     * Zij = Xij + Yij
     */
    public Matrix add(Matrix x) throws MalMatrixException {
        /* 判斷兩矩陣是否同樣大小 */
        if (data.length != x.data.length || data[0].length != x.data[0].length) {
            throw new MalMatrixException(); // 丟出例外
        }
        Matrix rel = (Matrix)this.clone(); // 先將this物件複製到rel
        for (int i=0; i < data.length; i++) {
            for (int j=0; j < data[0].length; j++) {
                rel.data[i][j] += x.data[i][j];
            }
        }
        return rel;
    }
    /**
     * 矩陣相乘
     * X is m by n, Y is n by p
     * result Z is m by p where for each 0<= i < m, 0 <= j < p
     * Zij = Sum Xik*Ykj
     *       k=0 to n-1
     */
    public Matrix multiply(Matrix x) throws MalMatrixException {
        if (data[0].length!=x.data.length) {
            throw new MalMatrixException();
        }
        Matrix rel = new Matrix(data.length,x.data[0].length);
        for (int i=0; i < data.length; i++) {
            for (int j=0; j < x.data[0].length; j++) {
                double tmp = 0;
                for (int k=0; k < data[0].length; k++) {
                    tmp += data[i][k] * x.data[k][j];
                }
                rel.data[i][j]= tmp;
            }
        }
        return rel;
    }

    /**
     * 將矩陣內容印到螢幕上
     */
    public void print() {
        for (int i=0; i < data.length; i++) {
            for (int j=0; j < data[0].length; j++) {
                System.out.print(data[i][j]+" ");
            }
            System.out.println("");
        }
    }

    /**
     * 高斯消去法求行列式值
     */
    public double determinant() throws NonSquareMatrixException {
        if (data.length != data[0].length) {
            throw new NonSquareMatrixException();
        }
        int n = data.length;
        int i, j, k, l;
        double sign = 1;
        double tmp, factor, result;
        double[][] right = new double[n][n];
        // 將資料copy到另一個陣列
        for (i=0; i < n; i++) {
            for (j=0; j < n; j++) {
                right[i][j] = data[i][j];
            }
        }
        for (i=0; i < n-1; i++) { // 由左而右
            for (k=i; k < n; k++) { // 找對角線以下非0之元素
                if (right[k][i]!=0) {
                    break;
                }
            }
            if (k==n) { // 找不到非0的元素
                return 0;
            }
            if (k != i) { // 對角線上是0, 需做列交換
                for (l=i; l < n; l++) {
                    tmp = right[i][l];
                    right[i][l] = right[k][l];
                    right[k][l] = tmp;
                }
                sign *= -1;  // 列交換需乘-1
            }
            for (k=i+1;k < n;k++) { // 由上而下
                if (right[k][i] != 0) { // 列運算. 若right[k][i]是0的話就不用再算了
                    factor = right[k][i]/right[i][i];
                    right[k][i]=0;
                    for (j=i+1; j < n; j++) {
                        right[k][j] -= right[i][j]*factor;
                    }
                }
            }
        }
        for (i=1, result=right[0][0]; i < n; i++) {
            result*=right[i][i];
        }
        return sign*result;
    }
}

MalMatrix.java如下

public class MalMatrixException extends Exception {
    MalMatrixException() {
        super("MalMatrixException:");
    }
}

NonSquareMatrixException.java如下

public class NonSquareMatrixException extends Exception {
    NonSquareMatrixException() {
        super("NonSquareMatrixException:");
    }
}