From c2c4804a89063b5ad5375806c2172d758100c116 Mon Sep 17 00:00:00 2001 From: Cory Date: Sun, 17 Sep 2023 14:42:25 +0200 Subject: [PATCH] Create test and correct some mistakes --- src/matrix.cpp | 4 ++-- src/test_suite.cpp | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/matrix.cpp b/src/matrix.cpp index 1fa3536..f1099b7 100644 --- a/src/matrix.cpp +++ b/src/matrix.cpp @@ -17,8 +17,8 @@ arma::mat create_tridiagonal( A(i, i+1) = e(i); } + A(n-1, n-2) = a(n-2); A(n-1,n-1) = d(n-1); - A(n-1, n-2) = a(n-1); return A; } @@ -26,7 +26,7 @@ arma::mat create_tridiagonal( arma::mat create_tridiagonal(int n, double a, double d, double e) { arma::vec a_vec = arma::vec(n-1, arma::fill::ones) * a; - arma::vec d_vec = arma::vec(n-1, arma::fill::ones) * d; + arma::vec d_vec = arma::vec(n, arma::fill::ones) * d; arma::vec e_vec = arma::vec(n-1, arma::fill::ones) * e; return create_tridiagonal(a_vec, d_vec, e_vec); diff --git a/src/test_suite.cpp b/src/test_suite.cpp index dc5d2ff..e92af50 100644 --- a/src/test_suite.cpp +++ b/src/test_suite.cpp @@ -1,9 +1,35 @@ +#include +#include +#include "matrix.hpp" -void test_tridiag_setup() { +void test_create_symmetric_tridiagonal() { + double tol = 10e-8; + double diff; + int N = 6; + double h = 1./(double) (N+1); + double a = -1. / (h*h), d = 2. / (h*h); + arma::mat A = create_symmetric_tridiagonal(N, a, d); + + arma::vec eigval; + arma::mat eigvec; + + arma::eig_sym(eigval, eigvec, A); + + for (int i=0; i < N; i++) { + diff = eigval(i) - (d + 2.*a*std::cos(((i+1.)*M_PI)/(N+1.))); + assert(std::abs(diff) < tol); + } } void test_max_off_diag_symmetric() { } + +int main() { + + test_create_symmetric_tridiagonal(); + + return 0; +}