public void ConstructorTest1()
        {
            double[,] value = 
            {
               {  4, -2 },
               {  3,  1 },
            };

            var svd = new SingularValueDecomposition(value);
            Assert.AreEqual(2, svd.Rank);


            var target = new GramSchmidtOrthogonalization(value);

            var Q = target.OrthogonalFactor;
            var R = target.UpperTriangularFactor;

            double[,] inv = Q.Inverse();
            double[,] transpose = Q.Transpose();
            double[,] m = Matrix.Multiply(Q, transpose);

            Assert.IsTrue(Matrix.IsEqual(m, Matrix.Identity(2), 1e-10));
            Assert.IsTrue(Matrix.IsEqual(inv, transpose, 1e-10));
        }
Beispiel #2
0
        /// <summary>
        ///   Generates a random <see cref="Measures.Covariance(double[], double[], bool)"/> matrix.
        /// </summary>
        /// 
        /// <param name="size">The size of the square matrix.</param>
        /// <param name="minValue">The minimum value for a diagonal element.</param>
        /// <param name="maxValue">The maximum size for a diagonal element.</param>
        /// 
        /// <returns>A square, positive-definite matrix which 
        ///   can be interpreted as a covariance matrix.</returns>
        /// 
        public static double[,] RandomCovariance(int size, double minValue, double maxValue)
        {
            double[,] A = Accord.Math.Matrix.Random(size, minValue, maxValue, symmetric: true);

            var gso = new GramSchmidtOrthogonalization(A);
            double[,] Q = gso.OrthogonalFactor;

            double[] diagonal = Vector.Random(size, minValue, maxValue).Abs();
            double[,] psd = Matrix.Dot(Q.TransposeAndDotWithDiagonal(diagonal), Q);

            Accord.Diagnostics.Debug.Assert(psd.IsPositiveDefinite());

            return psd;
        }