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)); }
/// <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; }