From 993e047644fb42419447f51e341390415eda6362 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 4 Mar 2019 23:33:34 +0900 Subject: [PATCH 1/2] Add identity matrix for random_hpd --- src/generate.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/generate.rs b/src/generate.rs index 9c9c014d..2f5afe15 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -51,6 +51,9 @@ where } /// Random Hermite Positive-definite matrix +/// +/// - Eigenvalue of matrix must be larger than 1 (thus non-singular) +/// pub fn random_hpd(n: usize) -> ArrayBase where A: RandNormal + Conjugate + LinalgScalar, @@ -58,7 +61,7 @@ where { let a: Array2 = random((n, n)); let ah: Array2 = conjugate(&a); - replicate(&ah.dot(&a)) + ArrayBase::eye(n) + &ah.dot(&a) } /// construct matrix from diag From 52bb21a331cc6b90019f9d63c000f4976efa3cdd Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 4 Mar 2019 23:41:54 +0900 Subject: [PATCH 2/2] Use rand_hpd for rcond test --- tests/solve.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/solve.rs b/tests/solve.rs index cb86968b..13b91d99 100644 --- a/tests/solve.rs +++ b/tests/solve.rs @@ -23,7 +23,7 @@ fn solve_random_t() { fn rcond() { macro_rules! rcond { ($elem:ty, $rows:expr, $atol:expr) => { - let a: Array2<$elem> = random(($rows, $rows)); + let a: Array2<$elem> = random_hpd($rows); let rcond = 1. / (a.opnorm_one().unwrap() * a.inv().unwrap().opnorm_one().unwrap()); assert_aclose!(a.rcond().unwrap(), rcond, $atol); assert_aclose!(a.rcond_into().unwrap(), rcond, $atol);