public void EigenvectorTest()
        {
            double[,] Arr1 = new double[4, 4] { { 4, 1, -2, 2 }, { 1, 2, 0, 1 }, { -2, 0, 3, -2 }, { 2, 1, -2, -1 } };
            double[,] Arr2 = new double[2, 3] { { 3,1,1 }, { -1, 3,1 }};
            double[,] Arr3 = new double[5, 5] { { 2, 0, 8, 6, 0 }, { 1, 6, 0, 1, 7 }, { 5, 0, 7, 4, 0 }, { 7, 0, 8, 5, 0 }, { 0, 10, 0, 0, 7 } };
            double[,] Arr4 = new double[4, 4] { { 3, 1, 0, 1 }, { 1, 3, 1, 1 }, { 0, 1, 3, 1 }, { 1, 1, 1, 3 } };
            MMatrix A = new MMatrix(Arr2);
            MMatrix B = new MMatrix();
            string s = "";
            Vector v = new Vector();
            MMatrix Eigenvectors = new MMatrix();

            try
            {
                //A = MMatrix.RandomMatrix(3,0,255);
                B = A*A.Transpose();
                s += "\nAA*=\n" + B.PrintToString();

                B.Jacobi_Cyclic_Method(ref v, ref Eigenvectors);
                s += "\nBefore sort:";
                s += "\nEigenvalues of(A*At)=" + v.PrintToString();
                s += "\nEigenvectors of A*At:\n" + Eigenvectors.PrintToString();

                MMatrix.SortEigen(ref v, ref Eigenvectors);
                s += "\nAfter sort:";
                s += "\nEigenvalues of(A*At)=" + v.PrintToString();
                s += "\nEigenvectors of A*At:\n" + Eigenvectors.PrintToString();

                //This is not neccesary anymore since the eigenvectors are already orthonomalized
                s += "\nOrthonormalize eigenvectors(Ax = 0)\n" + MMatrix.Orthonormalize(Eigenvectors).PrintToString();

                this.RichText_Display(s);
            }
            catch (MMatrixException exp)
            {
                MessageBox.Show("INFO: " + exp.Message, sProjectTile, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        //A = U*S*Vt
        //This method is not right
        public static void FactorSVD(MMatrix A)
        {
            MMatrix B = new MMatrix();
            Vector Eigenvalues = new Vector();
            MMatrix Eigenvectors = new MMatrix();
            int index;

            //U
            B = A * A.Transpose();
            B.Jacobi_Cyclic_Method(ref Eigenvalues,ref Eigenvectors);
            SortEigen(ref Eigenvalues,ref Eigenvectors);
            A.SVD_U = Eigenvectors.MArray;

            //S
            A.SVD_S = new double[A.row, A.col];
            index = (A.row < A.col) ? (A.row) : (A.col);
            for (int i = 0; i < index; ++i)
                A.SVD_S[i, i] = Math.Sqrt(Eigenvalues[i]);

            //V
            B = B.Transpose();
            B.Jacobi_Cyclic_Method(ref Eigenvalues,ref Eigenvectors);
            SortEigen(ref Eigenvalues,ref Eigenvectors);
            A.SVD_Vt = Eigenvectors.Transpose().MArray;
        }