From: Guido Kanschat Date: Wed, 23 Apr 2003 09:31:11 +0000 (+0000) Subject: test for eigenvector iterations X-Git-Tag: v8.0.0~16677 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30aa84a4aa662d63c84d26c9fe2da0cfa6952cbf;p=dealii.git test for eigenvector iterations git-svn-id: https://svn.dealii.org/trunk@7450 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/lac/Makefile b/tests/lac/Makefile index f50f5edbac..1ec83d497f 100644 --- a/tests/lac/Makefile +++ b/tests/lac/Makefile @@ -39,7 +39,7 @@ vector-vector.exe : vector-vector.g.$(OBJEXT) $(librar tests = $(sort \ sparse_matrices block_matrices block_vector block_vector_iterator \ full_matrix \ - matrix_out solver sparsity_pattern sparse_ilu \ + matrix_out solver eigen sparsity_pattern sparse_ilu \ vector-vector) ############################################################ diff --git a/tests/lac/eigen.cc b/tests/lac/eigen.cc index 9ed17e26c0..9a0cf931c6 100644 --- a/tests/lac/eigen.cc +++ b/tests/lac/eigen.cc @@ -25,7 +25,6 @@ #include #include - int main() { std::ofstream logfile("eigen.output"); @@ -39,6 +38,19 @@ int main() const unsigned int size = 10; const unsigned int dim = (size-1)*(size-1); + + /* + * Compute minimal and maximal + * eigenvalues of the 5-point + * stencil matrix + * (Hackbusch:Iterative Lösung..., + * Satz 4.1.1) + */ + const double h = 1./size; + const double s = std::sin(M_PI*h/2.); + const double c = std::cos(M_PI*h/2.); + const double lambda_max = 8.*c*c; + const double lambda_min = 8.*s*s; FDMatrix testproblem(size, size); SparsityPattern structure(dim, dim, 5); @@ -53,24 +65,24 @@ int main() EigenPower<> mises(control, mem); mises.solve(lambda, A, u); - deallog << "Eigenvalue " << lambda << std::endl; + deallog << "Eigenvalue " << lambda << " Error " << lambda-lambda_max << std::endl; double lambda2; u = 1.; EigenPower<> mises2(control, mem, -1.5*lambda); mises2.solve(lambda2, A, u); - deallog << "Eigenvalue " << lambda2 << std::endl; + deallog << "Eigenvalue " << lambda2 << " Error " << lambda2-lambda_min << std::endl; u = 1.; lambda = 0.; - EigenInverse<> wieland(control, mem); + EigenInverse<> wielandt(control, mem); wieland.solve(lambda, A, u); - deallog << "Eigenvalue " << lambda << std::endl; + deallog << "Eigenvalue " << lambda << " Error " << lambda-lambda_min << std::endl; u = 1.; lambda = 10.; - EigenInverse<> wieland2(control, mem); + EigenInverse<> wielandt2(control, mem); wieland2.solve(lambda, A, u); - deallog << "Eigenvalue " << lambda << std::endl; + deallog << "Eigenvalue " << lambda << " Error " << lambda-lambda_max << std::endl; }