X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=blobdiff_plain;f=random_positive_definite_matrix.m;fp=random_positive_definite_matrix.m;h=fb3be2c372a0840e75baed6cf7561a9ffd9fb093;hp=0000000000000000000000000000000000000000;hb=0fa5265cad135de24f0cc87195103396fdff3b91;hpb=577c70130e788e7e03520277fecb44a9b68fa463 diff --git a/random_positive_definite_matrix.m b/random_positive_definite_matrix.m new file mode 100644 index 0000000..fb3be2c --- /dev/null +++ b/random_positive_definite_matrix.m @@ -0,0 +1,24 @@ +function A = random_positive_definite_matrix(integerN) + % + % Generate a random, symmetric positive-definite (SPD) matrix. + % + % Since all (SPD) matrices are diagonalizable and have positive + % eigenvalues, it seems likely that we can generate an SPD matrix by + % combining random orthogonal matrices with a diagonal matrix of + % random eigenvalues. + % + % I have no proof/evidence that this approach is sound. + % + % INPUT: + % + % - ``integerN`` -- The dimension of the resulting matrix. + % + % OUTPUT: + % + % - ``A`` -- A symmetric, positive definite matrix. + % + U = random_orthogonal_matrix(integerN); + d = unifrnd(eps, realmax, 1, integerN); + D = diag(d); + A = U*D*U'; +end