From 2a35f68ac4ba682fcacf9d003efda6fc4c16209c Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Mon, 27 Nov 2023 13:27:49 -0700 Subject: add least dominant eigenvalue --- test/eigen.t.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test/eigen.t.c') diff --git a/test/eigen.t.c b/test/eigen.t.c index f271bf2..0ad0bd0 100644 --- a/test/eigen.t.c +++ b/test/eigen.t.c @@ -43,6 +43,30 @@ UTEST(eigen, leslie_matrix_dominant_eigenvalue) { free_matrix(leslie); } +UTEST(eigen, least_dominant_eigenvalue) { + + Matrix_double *m = InitMatrixWithSize(double, 3, 3, 0.0); + m->data[0]->data[0] = 2.0; + m->data[0]->data[1] = 2.0; + m->data[0]->data[2] = 4.0; + m->data[1]->data[0] = 1.0; + m->data[1]->data[1] = 4.0; + m->data[1]->data[2] = 7.0; + m->data[2]->data[1] = 2.0; + m->data[2]->data[2] = 6.0; + + double expected_least_dominant_eigenvalue = 0.87689; // 5 - sqrt(17) + double tolerance = 0.0001; + uint64_t max_iterations = 64; + + Array_double *v_guess = InitArrayWithSize(double, 3, 2.0); + double approx_least_dominant_eigenvalue = + least_dominant_eigenvalue(m, v_guess, tolerance, max_iterations); + + EXPECT_NEAR(expected_least_dominant_eigenvalue, + approx_least_dominant_eigenvalue, tolerance); +} + UTEST(eigen, dominant_eigenvalue) { Matrix_double *m = InitMatrixWithSize(double, 2, 2, 0.0); m->data[0]->data[0] = 2.0; -- cgit v1.2.3-70-g09d2