Create test and correct some mistakes

This commit is contained in:
Cory Balaton 2023-09-17 14:42:25 +02:00
parent 68e665748a
commit c2c4804a89
No known key found for this signature in database
GPG Key ID: 3E5FCEBFD80F432B
2 changed files with 29 additions and 3 deletions

View File

@ -17,8 +17,8 @@ arma::mat create_tridiagonal(
A(i, i+1) = e(i); 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-1) = d(n-1);
A(n-1, n-2) = a(n-1);
return A; return A;
} }
@ -26,7 +26,7 @@ arma::mat create_tridiagonal(
arma::mat create_tridiagonal(int n, double a, double d, double e) 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 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; arma::vec e_vec = arma::vec(n-1, arma::fill::ones) * e;
return create_tridiagonal(a_vec, d_vec, e_vec); return create_tridiagonal(a_vec, d_vec, e_vec);

View File

@ -1,9 +1,35 @@
#include <cassert>
#include <cmath>
#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() { void test_max_off_diag_symmetric() {
} }
int main() {
test_create_symmetric_tridiagonal();
return 0;
}