/// <summary>
        /// Pseudo Inverse
        /// </summary>
        public Matrix PseudoInverse()
        {
            double[][] tran = MatrixLowLevel.Transpose(m_Items);

            double[][] result = MatrixLowLevel.Multiply(MatrixLowLevel.Inverse(MatrixLowLevel.Multiply(tran, m_Items)), tran);

            return(new Matrix(result));
        }