Package Jama

Examples of Jama.Matrix


substantial problem within the implementation that was not anticipated in the test design. 
The stopping point should give an indication of where the problem exists.
**/
public class TestMatrix {
    public static void main(String argv[]) {
        Matrix A, B, C, Z, O, I, R, S, X, SUB, M, T, SQ, DEF, SOL;
        // Uncomment this to test IO in a different locale.
        // Locale.setDefault(Locale.GERMAN);
        int errorCount = 0;
        int warningCount = 0;
        double tmp, s;
        double[] columnwise = {
            1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.,
            12.};
        double[] rowwise = { 1., 4., 7., 10., 2., 5., 8., 11., 3., 6., 9., 12.};
        double[][] avals = {
            { 1., 4., 7., 10.}, { 2., 5., 8., 11.},
            { 3., 6., 9., 12.}};
        double[][] rankdef = avals;
        double[][] tvals = {
            { 1., 2., 3.}, { 4., 5., 6.}, { 7., 8., 9.},
            { 10., 11., 12.}};
        double[][] subavals = { { 5., 8., 11.}, { 6., 9., 12.}};
        double[][] rvals = {
            { 1., 4., 7.}, { 2., 5., 8., 11.},
            { 3., 6., 9., 12.}};
        double[][] pvals = { { 1., 1., 1.}, { 1., 2., 3.}, { 1., 3., 6.}};
        double[][] ivals = {
            { 1., 0., 0., 0.}, { 0., 1., 0., 0.},
            { 0., 0., 1., 0.}};
        double[][] evals = {
            { 0., 1., 0., 0.}, { 1., 0., 2.e-7, 0.},
            { 0., -2.e-7, 0., 1.}, { 0., 0., 1., 0.}};
        double[][] square = {
            { 166., 188., 210.}, { 188., 214., 240.},
            { 210., 240., 270.}};
        double[][] sqSolution = { { 13.}, { 15.}};
        double[][] condmat = { { 1., 3.}, { 7., 9.}};
        int rows = 3, cols = 4;
        int invalidld = 5; /* should trigger bad shape for construction with val */
        int raggedr = 0; /* (raggedr,raggedc) should be out of bounds in ragged array */
        int raggedc = 4;
        int validld = 3; /* leading dimension of intended test Matrices */
        int nonconformld = 4; /* leading dimension which is valid, but nonconforming */
        int ib = 1, ie = 2, jb = 1, je = 3; /* index ranges for sub Matrix */
        int[] rowindexset = { 1, 2};
        int[] badrowindexset = { 1, 3};
        int[] columnindexset = { 1, 2, 3};
        int[] badcolumnindexset = { 1, 2, 4};
        double columnsummax = 33.;
        double rowsummax = 30.;
        double sumofdiagonals = 15;
        double sumofsquares = 650;

        /**
         Constructors and constructor-like methods:
         double[], int
         double[][] 
         int, int
         int, int, double
         int, int, double[][]
         constructWithCopy(double[][])
         random(int,int)
         identity(int)
         **/

        print("\nTesting constructors and constructor-like methods...\n");
        try

            /** check that exception is thrown in packed constructor with invalid length **/
            A = new Matrix(
                    columnwise, invalidld);
            errorCount = try_failure(errorCount,
                    "Catch invalid length in packed constructor... ",
                    "exception not thrown for invalid input");
        } catch (IllegalArgumentException e) {
            try_success("Catch invalid length in packed constructor... ",
                    e.getMessage());
        }
        try {

            /** check that exception is thrown in default constructor
             if input array is 'ragged' **/
            A = new Matrix(rvals);
            tmp = A.get(raggedr, raggedc);
        } catch (IllegalArgumentException e) {
            try_success("Catch ragged input to default constructor... ",
                    e.getMessage());
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount,
                    "Catch ragged input to constructor... ",
                    "exception not thrown in construction...ArrayIndexOutOfBoundsException thrown later");
        }
        try {

            /** check that exception is thrown in constructWithCopy
             if input array is 'ragged' **/
            A = Matrix.constructWithCopy(rvals);
            tmp = A.get(raggedr, raggedc);
        } catch (IllegalArgumentException e) {
            try_success("Catch ragged input to constructWithCopy... ",
                    e.getMessage());
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount,
                    "Catch ragged input to constructWithCopy... ",
                    "exception not thrown in construction...ArrayIndexOutOfBoundsException thrown later");
        }

        A = new Matrix(columnwise, validld);
        B = new Matrix(avals);
        tmp = B.get(0, 0);
        avals[0][0] = 0.0;
        C = B.minus(A);
        avals[0][0] = tmp;
        B = Matrix.constructWithCopy(avals);
        tmp = B.get(0, 0);
        avals[0][0] = 0.0;
        if ((tmp - B.get(0, 0)) != 0.0) {

            /** check that constructWithCopy behaves properly **/
            errorCount = try_failure(errorCount, "constructWithCopy... ",
                    "copy not effected... data visible outside");
        } else {
            try_success("constructWithCopy... ", "");
        }
        avals[0][0] = columnwise[0];
        I = new Matrix(ivals);
        try {
            check(I, Matrix.identity(3, 4));
            try_success("identity... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "identity... ",
                    "identity Matrix not successfully created");
        }  

        /**
         Access Methods:
         getColumnDimension()
         getRowDimension()
         getArray()
         getArrayCopy()
         getColumnPackedCopy()
         getRowPackedCopy()
         get(int,int)
         getMatrix(int,int,int,int)
         getMatrix(int,int,int[])
         getMatrix(int[],int,int)
         getMatrix(int[],int[])
         set(int,int,double)
         setMatrix(int,int,int,int,Matrix)
         setMatrix(int,int,int[],Matrix)
         setMatrix(int[],int,int,Matrix)
         setMatrix(int[],int[],Matrix)
         **/

        print("\nTesting access methods...\n");

        /**
         Various get methods:
         **/

        B = new Matrix(avals);
        if (B.getRowDimension() != rows) {
            errorCount = try_failure(errorCount, "getRowDimension... ", "");
        } else {
            try_success("getRowDimension... ", "");
        }
        if (B.getColumnDimension() != cols) {
            errorCount = try_failure(errorCount, "getColumnDimension... ", "");
        } else {
            try_success("getColumnDimension... ", "");
        }
        B = new Matrix(avals);
        double[][] barray = B.getArray();

        if (barray != avals) {
            errorCount = try_failure(errorCount, "getArray... ", "");
        } else {
            try_success("getArray... ", "");
        }
        barray = B.getArrayCopy();
        if (barray == avals) {
            errorCount = try_failure(errorCount, "getArrayCopy... ",
                    "data not (deep) copied");
        }
        try {
            check(barray, avals);
            try_success("getArrayCopy... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "getArrayCopy... ",
                    "data not successfully (deep) copied");
        }
        double[] bpacked = B.getColumnPackedCopy();

        try {
            check(bpacked, columnwise);
            try_success("getColumnPackedCopy... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "getColumnPackedCopy... ",
                    "data not successfully (deep) copied by columns");
        }
        bpacked = B.getRowPackedCopy();
        try {
            check(bpacked, rowwise);
            try_success("getRowPackedCopy... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "getRowPackedCopy... ",
                    "data not successfully (deep) copied by rows");
        }
        try {
            tmp = B.get(B.getRowDimension(), B.getColumnDimension() - 1);
            errorCount = try_failure(errorCount, "get(int,int)... ",
                    "OutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                tmp = B.get(B.getRowDimension() - 1, B.getColumnDimension());
                errorCount = try_failure(errorCount, "get(int,int)... ",
                        "OutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success("get(int,int)... OutofBoundsException... ", "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "get(int,int)... ",
                    "OutOfBoundsException expected but not thrown");
        }
        try {
            if (B.get(B.getRowDimension() - 1, B.getColumnDimension() - 1)
                    != avals[B.getRowDimension() - 1][B.getColumnDimension() - 1]) {
                errorCount = try_failure(errorCount, "get(int,int)... ",
                        "Matrix entry (i,j) not successfully retreived");
            } else {
                try_success("get(int,int)... ", "");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount, "get(int,int)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        SUB = new Matrix(subavals);
        try {
            M = B.getMatrix(ib, ie + B.getRowDimension() + 1, jb, je);
            errorCount = try_failure(errorCount,
                    "getMatrix(int,int,int,int)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                M = B.getMatrix(ib, ie, jb, je + B.getColumnDimension() + 1);
                errorCount = try_failure(errorCount,
                        "getMatrix(int,int,int,int)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "getMatrix(int,int,int,int)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount,
                    "getMatrix(int,int,int,int)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            M = B.getMatrix(ib, ie, jb, je);
            try {
                check(SUB, M);
                try_success("getMatrix(int,int,int,int)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "getMatrix(int,int,int,int)... ",
                        "submatrix not successfully retreived");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount,
                    "getMatrix(int,int,int,int)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
     
        try {
            M = B.getMatrix(ib, ie, badcolumnindexset);
            errorCount = try_failure(errorCount, "getMatrix(int,int,int[])... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                M = B.getMatrix(ib, ie + B.getRowDimension() + 1, columnindexset);
                errorCount = try_failure(errorCount,
                        "getMatrix(int,int,int[])... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "getMatrix(int,int,int[])... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "getMatrix(int,int,int[])... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            M = B.getMatrix(ib, ie, columnindexset);
            try {
                check(SUB, M);
                try_success("getMatrix(int,int,int[])... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "getMatrix(int,int,int[])... ",
                        "submatrix not successfully retreived");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount, "getMatrix(int,int,int[])... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        try {
            M = B.getMatrix(badrowindexset, jb, je);
            errorCount = try_failure(errorCount, "getMatrix(int[],int,int)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                M = B.getMatrix(rowindexset, jb, je + B.getColumnDimension() + 1);
                errorCount = try_failure(errorCount,
                        "getMatrix(int[],int,int)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "getMatrix(int[],int,int)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "getMatrix(int[],int,int)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            M = B.getMatrix(rowindexset, jb, je);
            try {
                check(SUB, M);
                try_success("getMatrix(int[],int,int)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "getMatrix(int[],int,int)... ",
                        "submatrix not successfully retreived");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount, "getMatrix(int[],int,int)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        try {
            M = B.getMatrix(badrowindexset, columnindexset);
            errorCount = try_failure(errorCount, "getMatrix(int[],int[])... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                M = B.getMatrix(rowindexset, badcolumnindexset);
                errorCount = try_failure(errorCount,
                        "getMatrix(int[],int[])... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "getMatrix(int[],int[])... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "getMatrix(int[],int[])... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            M = B.getMatrix(rowindexset, columnindexset);
            try {
                check(SUB, M);
                try_success("getMatrix(int[],int[])... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "getMatrix(int[],int[])... ",
                        "submatrix not successfully retreived");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            errorCount = try_failure(errorCount, "getMatrix(int[],int[])... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }

        /**
         Various set methods:
         **/

        try {
            B.set(B.getRowDimension(), B.getColumnDimension() - 1, 0.);
            errorCount = try_failure(errorCount, "set(int,int,double)... ",
                    "OutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                B.set(B.getRowDimension() - 1, B.getColumnDimension(), 0.);
                errorCount = try_failure(errorCount, "set(int,int,double)... ",
                        "OutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success("set(int,int,double)... OutofBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "set(int,int,double)... ",
                    "OutOfBoundsException expected but not thrown");
        }
        try {
            B.set(ib, jb, 0.);
            tmp = B.get(ib, jb);
            try {
                check(tmp, 0.);
                try_success("set(int,int,double)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount, "set(int,int,double)... ",
                        "Matrix element not successfully set");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
            errorCount = try_failure(errorCount, "set(int,int,double)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        M = new Matrix(2, 3, 0.);
        try {
            B.setMatrix(ib, ie + B.getRowDimension() + 1, jb, je, M);
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int,int,Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                B.setMatrix(ib, ie, jb, je + B.getColumnDimension() + 1, M);
                errorCount = try_failure(errorCount,
                        "setMatrix(int,int,int,int,Matrix)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "setMatrix(int,int,int,int,Matrix)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int,int,Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            B.setMatrix(ib, ie, jb, je, M);
            try {
                check(M.minus(B.getMatrix(ib, ie, jb, je)), M);
                try_success("setMatrix(int,int,int,int,Matrix)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "setMatrix(int,int,int,int,Matrix)... ",
                        "submatrix not successfully set");
            }
            B.setMatrix(ib, ie, jb, je, SUB);
        } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int,int,Matrix)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        try {
            B.setMatrix(ib, ie + B.getRowDimension() + 1, columnindexset, M);
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int[],Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                B.setMatrix(ib, ie, badcolumnindexset, M);
                errorCount = try_failure(errorCount,
                        "setMatrix(int,int,int[],Matrix)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "setMatrix(int,int,int[],Matrix)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int[],Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            B.setMatrix(ib, ie, columnindexset, M);
            try {
                check(M.minus(B.getMatrix(ib, ie, columnindexset)), M);
                try_success("setMatrix(int,int,int[],Matrix)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "setMatrix(int,int,int[],Matrix)... ",
                        "submatrix not successfully set");
            }
            B.setMatrix(ib, ie, jb, je, SUB);
        } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int,int,int[],Matrix)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        try {
            B.setMatrix(rowindexset, jb, je + B.getColumnDimension() + 1, M);
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int,int,Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                B.setMatrix(badrowindexset, jb, je, M);
                errorCount = try_failure(errorCount,
                        "setMatrix(int[],int,int,Matrix)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "setMatrix(int[],int,int,Matrix)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int,int,Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            B.setMatrix(rowindexset, jb, je, M);
            try {
                check(M.minus(B.getMatrix(rowindexset, jb, je)), M);
                try_success("setMatrix(int[],int,int,Matrix)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "setMatrix(int[],int,int,Matrix)... ",
                        "submatrix not successfully set");
            }
            B.setMatrix(ib, ie, jb, je, SUB);
        } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int,int,Matrix)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }
        try {
            B.setMatrix(rowindexset, badcolumnindexset, M);
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int[],Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            try {
                B.setMatrix(badrowindexset, columnindexset, M);
                errorCount = try_failure(errorCount,
                        "setMatrix(int[],int[],Matrix)... ",
                        "ArrayIndexOutOfBoundsException expected but not thrown");
            } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
                try_success(
                        "setMatrix(int[],int[],Matrix)... ArrayIndexOutOfBoundsException... ",
                        "");
            }
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int[],Matrix)... ",
                    "ArrayIndexOutOfBoundsException expected but not thrown");
        }
        try {
            B.setMatrix(rowindexset, columnindexset, M);
            try {
                check(M.minus(B.getMatrix(rowindexset, columnindexset)), M);
                try_success("setMatrix(int[],int[],Matrix)... ", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "setMatrix(int[],int[],Matrix)... ",
                        "submatrix not successfully set");
            }
        } catch (java.lang.ArrayIndexOutOfBoundsException e1) {
            errorCount = try_failure(errorCount,
                    "setMatrix(int[],int[],Matrix)... ",
                    "Unexpected ArrayIndexOutOfBoundsException");
        }

        /**
         Array-like methods:
         minus
         minusEquals
         plus
         plusEquals
         arrayLeftDivide
         arrayLeftDivideEquals
         arrayRightDivide
         arrayRightDivideEquals
         arrayTimes
         arrayTimesEquals
         uminus
         **/

        print("\nTesting array-like methods...\n");
        S = new Matrix(columnwise, nonconformld);
        R = Matrix.random(A.getRowDimension(), A.getColumnDimension());
        A = R;
        try {
            S = A.minus(S);
            errorCount = try_failure(errorCount, "minus conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("minus conformance check... ", "");
        }
        if (A.minus(R).norm1() != 0.) {
            errorCount = try_failure(errorCount, "minus... ",
                    "(difference of identical Matrices is nonzero,\nSubsequent use of minus should be suspect)");
        } else {
            try_success("minus... ", "");
        }
        A = R.copy();
        A.minusEquals(R);
        Z = new Matrix(A.getRowDimension(), A.getColumnDimension());
        try {
            A.minusEquals(S);
            errorCount = try_failure(errorCount,
                    "minusEquals conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("minusEquals conformance check... ", "");
        }
        if (A.minus(Z).norm1() != 0.) {
            errorCount = try_failure(errorCount, "minusEquals... ",
                    "(difference of identical Matrices is nonzero,\nSubsequent use of minus should be suspect)");
        } else {
            try_success("minusEquals... ", "");
        }

        A = R.copy();
        B = Matrix.random(A.getRowDimension(), A.getColumnDimension());
        C = A.minus(B);
        try {
            S = A.plus(S);
            errorCount = try_failure(errorCount, "plus conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("plus conformance check... ", "");
        }
        try {
            check(C.plus(B), A);
            try_success("plus... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "plus... ",
                    "(C = A - B, but C + B != A)");
        }
        C = A.minus(B);
        C.plusEquals(B);
        try {
            A.plusEquals(S);
            errorCount = try_failure(errorCount,
                    "plusEquals conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("plusEquals conformance check... ", "");
        }
        try {
            check(C, A);
            try_success("plusEquals... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "plusEquals... ",
                    "(C = A - B, but C = C + B != A)");
        }
        A = R.uminus();
        try {
            check(A.plus(R), Z);
            try_success("uminus... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "uminus... ",
                    "(-A + A != zeros)");
        }
        A = R.copy();
        O = new Matrix(A.getRowDimension(), A.getColumnDimension(), 1.0);
        C = A.arrayLeftDivide(R);
        try {
            S = A.arrayLeftDivide(S);
            errorCount = try_failure(errorCount,
                    "arrayLeftDivide conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayLeftDivide conformance check... ", "");
        }
        try {
            check(C, O);
            try_success("arrayLeftDivide... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayLeftDivide... ",
                    "(M.\\M != ones)");
        }
        try {
            A.arrayLeftDivideEquals(S);
            errorCount = try_failure(errorCount,
                    "arrayLeftDivideEquals conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayLeftDivideEquals conformance check... ", "");
        }
        A.arrayLeftDivideEquals(R);
        try {
            check(A, O);
            try_success("arrayLeftDivideEquals... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayLeftDivideEquals... ",
                    "(M.\\M != ones)");
        }
        A = R.copy();
        try {
            A.arrayRightDivide(S);
            errorCount = try_failure(errorCount,
                    "arrayRightDivide conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayRightDivide conformance check... ", "");
        }
        C = A.arrayRightDivide(R);
        try {
            check(C, O);
            try_success("arrayRightDivide... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayRightDivide... ",
                    "(M./M != ones)");
        }
        try {
            A.arrayRightDivideEquals(S);
            errorCount = try_failure(errorCount,
                    "arrayRightDivideEquals conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayRightDivideEquals conformance check... ", "");
        }
        A.arrayRightDivideEquals(R);
        try {
            check(A, O);
            try_success("arrayRightDivideEquals... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayRightDivideEquals... ",
                    "(M./M != ones)");
        }
        A = R.copy();
        B = Matrix.random(A.getRowDimension(), A.getColumnDimension());
        try {
            S = A.arrayTimes(S);
            errorCount = try_failure(errorCount,
                    "arrayTimes conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayTimes conformance check... ", "");
        }
        C = A.arrayTimes(B);
        try {
            check(C.arrayRightDivideEquals(B), A);
            try_success("arrayTimes... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayTimes... ",
                    "(A = R, C = A.*B, but C./B != A)");
        }
        try {
            A.arrayTimesEquals(S);
            errorCount = try_failure(errorCount,
                    "arrayTimesEquals conformance check... ",
                    "nonconformance not raised");
        } catch (IllegalArgumentException e) {
            try_success("arrayTimesEquals conformance check... ", "");
        }
        A.arrayTimesEquals(B);
        try {
            check(A.arrayRightDivideEquals(B), R);
            try_success("arrayTimesEquals... ", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "arrayTimesEquals... ",
                    "(A = R, A = A.*B, but A./B != R)");
        }

        /**
         I/O methods:
         read
         print
         serializable:
         writeObject
         readObject
         **/
        print("\nTesting I/O methods...\n");
        try {
            DecimalFormat fmt = new DecimalFormat("0.0000E00");

            fmt.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));

            PrintWriter FILE = new PrintWriter(
                    new FileOutputStream("JamaTestMatrix.out"));

            A.print(FILE, fmt, 10);
            FILE.close();
            R = Matrix.read(
                    new BufferedReader(new FileReader("JamaTestMatrix.out")));
            if (A.minus(R).norm1() < .001) {
                try_success("print()/read()...", "");
            } else {
                errorCount = try_failure(errorCount, "print()/read()...",
                        "Matrix read from file does not match Matrix printed to file");
            }
        } catch (java.io.IOException ioe) {
            warningCount = try_warning(warningCount, "print()/read()...",
                    "unexpected I/O error, unable to run print/read test;  check write permission in current directory and retry");
        } catch (Exception e) {
            try {
                e.printStackTrace(System.out);
                warningCount = try_warning(warningCount, "print()/read()...",
                        "Formatting error... will try JDK1.1 reformulation...");
                DecimalFormat fmt = new DecimalFormat("0.0000");
                PrintWriter FILE = new PrintWriter(
                        new FileOutputStream("JamaTestMatrix.out"));

                A.print(FILE, fmt, 10);
                FILE.close();
                R = Matrix.read(
                        new BufferedReader(new FileReader("JamaTestMatrix.out")));
                if (A.minus(R).norm1() < .001) {
                    try_success("print()/read()...", "");
                } else {
                    errorCount = try_failure(errorCount,
                            "print()/read() (2nd attempt) ...",
                            "Matrix read from file does not match Matrix printed to file");
                }
            } catch (java.io.IOException ioe) {
                warningCount = try_warning(warningCount, "print()/read()...",
                        "unexpected I/O error, unable to run print/read test;  check write permission in current directory and retry");
            }
        }

        R = Matrix.random(A.getRowDimension(), A.getColumnDimension());
        String tmpname = "TMPMATRIX.serial";

        try {
            ObjectOutputStream out = new ObjectOutputStream(
                    new FileOutputStream(tmpname));

            out.writeObject(R);
            ObjectInputStream sin = new ObjectInputStream(
                    new FileInputStream(tmpname));

            A = (Matrix) sin.readObject();
            try {
                check(A, R);
                try_success("writeObject(Matrix)/readObject(Matrix)...", "");
            } catch (java.lang.RuntimeException e) {
                errorCount = try_failure(errorCount,
                        "writeObject(Matrix)/readObject(Matrix)...",
                        "Matrix not serialized correctly");
            }
        } catch (java.io.IOException ioe) {
            warningCount = try_warning(warningCount,
                    "writeObject()/readObject()...",
                    "unexpected I/O error, unable to run serialization test;  check write permission in current directory and retry");
        } catch (Exception e) {
            errorCount = try_failure(errorCount,
                    "writeObject(Matrix)/readObject(Matrix)...",
                    "unexpected error in serialization test");
        }

        /**
         LA methods:
         transpose
         times
         cond
         rank
         det
         trace
         norm1
         norm2
         normF
         normInf
         solve
         solveTranspose
         inverse
         chol
         eig
         lu
         qr
         svd
         **/

        print("\nTesting linear algebra methods...\n");
        A = new Matrix(columnwise, 3);
        T = new Matrix(tvals);
        T = A.transpose();
        try {
            check(A.transpose(), T);
            try_success("transpose...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "transpose()...",
                    "transpose unsuccessful");
        }
        A.transpose();
        try {
            check(A.norm1(), columnsummax);
            try_success("norm1...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "norm1()...",
                    "incorrect norm calculation");
        }
        try {
            check(A.normInf(), rowsummax);
            try_success("normInf()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "normInf()...",
                    "incorrect norm calculation");
        }
        try {
            check(A.normF(), Math.sqrt(sumofsquares));
            try_success("normF...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "normF()...",
                    "incorrect norm calculation");
        }
        try {
            check(A.trace(), sumofdiagonals);
            try_success("trace()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "trace()...",
                    "incorrect trace calculation");
        }
        try {
            check(
                    A.getMatrix(0, A.getRowDimension() - 1, 0, A.getRowDimension() - 1).det(),
                    0.);
            try_success("det()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "det()...",
                    "incorrect determinant calculation");
        }
        SQ = new Matrix(square);
        try {
            check(A.times(A.transpose()), SQ);
            try_success("times(Matrix)...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "times(Matrix)...",
                    "incorrect Matrix-Matrix product calculation");
        }
        try {
            check(A.times(0.), Z);
            try_success("times(double)...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "times(double)...",
                    "incorrect Matrix-scalar product calculation");
        }

        A = new Matrix(columnwise, 4);
        QRDecomposition QR = A.qr();

        R = QR.getR();
        try {
            check(A, QR.getQ().times(R));
            try_success("QRDecomposition...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "QRDecomposition...",
                    "incorrect QR decomposition calculation");
        }
        SingularValueDecomposition SVD = A.svd();

        try {
            check(A, SVD.getU().times(SVD.getS().times(SVD.getV().transpose())));
            try_success("SingularValueDecomposition...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "SingularValueDecomposition...",
                    "incorrect singular value decomposition calculation");
        }
        DEF = new Matrix(rankdef);
        try {
            check(DEF.rank(),
                    Math.min(DEF.getRowDimension(), DEF.getColumnDimension())
                    - 1);
            try_success("rank()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "rank()...",
                    "incorrect rank calculation");
        }
        B = new Matrix(condmat);
        SVD = B.svd();
        double[] singularvalues = SVD.getSingularValues();

        try {
            check(B.cond(),
                    singularvalues[0]
                    / singularvalues[Math.min(B.getRowDimension(), B.getColumnDimension()) - 1]);
            try_success("cond()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "cond()...",
                    "incorrect condition number calculation");
        }
        int n = A.getColumnDimension();

        A = A.getMatrix(0, n - 1, 0, n - 1);
        A.set(0, 0, 0.);
        LUDecomposition LU = A.lu();

        try {
            check(A.getMatrix(LU.getPivot(), 0, n - 1),
                    LU.getL().times(LU.getU()));
            try_success("LUDecomposition...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "LUDecomposition...",
                    "incorrect LU decomposition calculation");
        }
        X = A.inverse();
        try {
            check(A.times(X), Matrix.identity(3, 3));
            try_success("inverse()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "inverse()...",
                    "incorrect inverse calculation");
        }
        O = new Matrix(SUB.getRowDimension(), 1, 1.0);
        SOL = new Matrix(sqSolution);
        SQ = SUB.getMatrix(0, SUB.getRowDimension() - 1, 0,
                SUB.getRowDimension() - 1);
        try {
            check(SQ.solve(SOL), O);
            try_success("solve()...", "");
        } catch (java.lang.IllegalArgumentException e1) {
            errorCount = try_failure(errorCount, "solve()...", e1.getMessage());
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "solve()...", e.getMessage());
        }
        A = new Matrix(pvals);
        CholeskyDecomposition Chol = A.chol();
        Matrix L = Chol.getL();

        try {
            check(A, L.times(L.transpose()));
            try_success("CholeskyDecomposition...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount, "CholeskyDecomposition...",
                    "incorrect Cholesky decomposition calculation");
        }
        X = Chol.solve(Matrix.identity(3, 3));
        try {
            check(A.times(X), Matrix.identity(3, 3));
            try_success("CholeskyDecomposition solve()...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount,
                    "CholeskyDecomposition solve()...",
                    "incorrect Choleskydecomposition solve calculation");
        }
        EigenvalueDecomposition Eig = A.eig();
        Matrix D = Eig.getD();
        Matrix V = Eig.getV();

        try {
            check(A.times(V), V.times(D));
            try_success("EigenvalueDecomposition (symmetric)...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount,
                    "EigenvalueDecomposition (symmetric)...",
                    "incorrect symmetric Eigenvalue decomposition calculation");
        }
        A = new Matrix(evals);
        Eig = A.eig();
        D = Eig.getD();
        V = Eig.getV();
        try {
            check(A.times(V), V.times(D));
            try_success("EigenvalueDecomposition (nonsymmetric)...", "");
        } catch (java.lang.RuntimeException e) {
            errorCount = try_failure(errorCount,
                    "EigenvalueDecomposition (nonsymmetric)...",
                    "incorrect nonsymmetric Eigenvalue decomposition calculation");
View Full Code Here


    }

    /** Check norm of difference of arrays. **/

    private static void check(double[][] x, double[][] y) {
        Matrix A = new Matrix(x);
        Matrix B = new Matrix(y);

        check(A, B);
    }
View Full Code Here

    /** Print a row vector. **/

    private static void print(double[] x, int w, int d) {
        // Use format Fw.d for all elements.
        System.out.print("\n");
        new Matrix(x, 1).print(w, d);
        print("\n");
    }
View Full Code Here

            // Singly Even Order

        } else {
            int p = n / 2;
            int k = (n - 2) / 4;
            Matrix A = magic(p);

            for (int j = 0; j < p; j++) {
                for (int i = 0; i < p; i++) {
                    double aij = A.get(i, j);

                    M[i][j] = aij;
                    M[i][j + p] = aij + 2 * p * p;
                    M[i + p][j] = aij + 3 * p * p;
                    M[i + p][j + p] = aij + p * p;
                }
            }
            for (int i = 0; i < p; i++) {
                for (int j = 0; j < k; j++) {
                    double t = M[i][j];

                    M[i][j] = M[i + p][j];
                    M[i + p][j] = t;
                }
                for (int j = n - k + 1; j < n; j++) {
                    double t = M[i][j];

                    M[i][j] = M[i + p][j];
                    M[i + p][j] = t;
                }
            }
            double t = M[k][0];

            M[k][0] = M[k + p][0];
            M[k + p][0] = t;
            t = M[k][k];
            M[k][k] = M[k + p][k];
            M[k + p][k] = t;
        }
        return new Matrix(M);
    }
View Full Code Here

        double eps = Math.pow(2.0, -52.0);

        for (int n = 3; n <= 32; n++) {
            print(fixedWidthIntegertoString(n, 7));

            Matrix M = magic(n);

            int t = (int) M.trace();

            print(fixedWidthIntegertoString(t, 10));

            EigenvalueDecomposition E = new EigenvalueDecomposition(
                    M.plus(M.transpose()).times(0.5));
            double[] d = E.getRealEigenvalues();

            print(fixedWidthDoubletoString(d[n - 1], 14, 3));

            int r = M.rank();

            print(fixedWidthIntegertoString(r, 7));

            double c = M.cond();

            print(
                    c < 1 / eps
                            ? fixedWidthDoubletoString(c, 12, 3)
                            : "         Inf");

            LUDecomposition LU = new LUDecomposition(M);
            Matrix L = LU.getL();
            Matrix U = LU.getU();
            int[] p = LU.getPivot();
            Matrix R = L.times(U).minus(M.getMatrix(p, 0, n - 1));
            double res = R.norm1() / (n * eps);

            print(fixedWidthDoubletoString(res, 12, 3));

            QRDecomposition QR = new QRDecomposition(M);
            Matrix Q = QR.getQ();

            R = QR.getR();
            R = Q.times(R).minus(M);
            res = R.norm1() / (n * eps);
            print(fixedWidthDoubletoString(res, 12, 3));

            print("\n");
        }
View Full Code Here

        }
    }

    @Override
  public double getProb(List args, Object value) {
        Matrix v = getParentVector(args);

        if (value instanceof Matrix) {
            MultivarGaussian distrib = new MultivarGaussian(mu.plus(W.times(v)),
                    Sigma);
View Full Code Here

        return 0;
    }

    @Override
  public Object sampleVal(List args) {
        Matrix v = getParentVector(args);
        MultivarGaussian distrib = new MultivarGaussian(mu.plus(W.times(v)),
                Sigma);

        return distrib.sampleVal();
    }
View Full Code Here

        return distrib.sampleVal();
    }

    private Matrix getParentVector(List args) {
        Matrix v = new Matrix(c, 1);
        int curRow = 0;

        for (Iterator iter = args.iterator(); iter.hasNext();) {
            Object arg = iter.next();

            if (!((arg instanceof Matrix)
                    && (((Matrix) arg).getColumnDimension() == 1))) {
                throw new IllegalArgumentException(
                        "Arguments for LinearGaussian CPD must be "
                                + "column vectors.");
            }

            Matrix parent = (Matrix) arg;

            if (curRow + parent.getRowDimension() > c) {
                throw new IllegalArgumentException(
                        "Error in LinearGaussian CPD: sum of dimensions of "
                                + "parents exceeds number of columns in W.");
            }
            v.setMatrix(curRow, curRow + parent.getRowDimension() - 1, 0, 0,
                    parent);
            curRow += parent.getRowDimension();
        }

        if (curRow < c) {
            throw new IllegalArgumentException(
                    "Error in LinearGaussian CPD: sum of dimensions of "
View Full Code Here

     * was constructed with a fixed mean and covariance matrix (internal
     * calls are ok if the private method <code>initParams</code> is called
     * first).
     */
    public Matrix sampleVal() {
        Matrix temp = new Matrix(d, 1);

        for (int i = 0; i < d; i++) {
            temp.set(i, 0, UnivarGaussian.STANDARD.sampleVal());
        }
        return mu.plus(sqrtSigma.times(temp));
    }
View Full Code Here

     */
    public void iteration() {
        final int rowCount = trainingData.size();
        final int inputColCount = trainingData.get(0).getInput().length;

        final Matrix xMatrix = new Matrix(rowCount, inputColCount + 1);
        final Matrix yMatrix = new Matrix(rowCount, 1);

        for (int row = 0; row < trainingData.size(); row++) {
            final BasicData dataRow = this.trainingData.get(row);
            final int colSize = dataRow.getInput().length;

            xMatrix.set(row, 0, 1);
            for (int col = 0; col < colSize; col++) {
                xMatrix.set(row, col + 1, dataRow.getInput()[col]);
            }
            yMatrix.set(row, 0, dataRow.getIdeal()[0]);
        }

        // Calculate the least squares solution
        final QRDecomposition qr = new QRDecomposition(xMatrix);
        final Matrix beta = qr.solve(yMatrix);

        double sum = 0.0;
        for (int i = 0; i < inputColCount; i++)
            sum += yMatrix.get(i, 0);
        final double mean = sum / inputColCount;

        for (int i = 0; i < inputColCount; i++) {
            final double dev = yMatrix.get(i, 0) - mean;
            sst += dev * dev;
        }

        final Matrix residuals = xMatrix.times(beta).minus(yMatrix);
        sse = residuals.norm2() * residuals.norm2();

        for (int i = 0; i < this.algorithm.getLongTermMemory().length; i++) {
            this.algorithm.getLongTermMemory()[i] = beta.get(i, 0);
        }

View Full Code Here

TOP

Related Classes of Jama.Matrix

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.