Create test and correct some mistakes
This commit is contained in:
parent
68e665748a
commit
c2c4804a89
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user