public double[][] getP() {
        double[][] P = new double[dimension][dimension];
        for (int d1 = 0; d1 < dimension; d1++) {
            for (int d2 = 0; d2 < dimension; d2++) {
                P[d1][d2] = new Double(pIn[d1][d2].getText()).doubleValue();
            }
        }
        // Check that the transition matrix is legal; return null if not
        double[] rowsum = new double[dimension];
        double[] colsum = new double[dimension];
        for (int d1 = 0; d1 < dimension; d1++) {
            for (int d2 = 0; d2 < dimension; d2++) {
                rowsum[d1] += P[d1][d2];
                colsum[d2] += P[d1][d2];
            }
        }
        for (int d = 0; d < dimension; d++) {
            if (Math.abs(rowsum[d] - 1) > 1E-10 || Math.abs(colsum[d] - 1) > 1E-10) {
                return null;
            }
        }
        return P;
    }