void test_orthonormality(Quad& q){ struct f_ho_radial_params p; p.l1 = 0; p.l2 = 0; for (int n1=0; n1<10; n1++){ for (int n2=n1; n2<10; n2++){ p.n1 = n1; p.n2 = n2; std::cout << " (n1,l1,n2,l2) = (" << p.n1 << "," << p.l1 << "," << p.n2 << "," << p.l2 << ") = " << q.integrate(f_ho_radial,&p) << std::endl; } } }
/** here we make use of the nice lambda functions introduced in c++11 */ void test_various_integrands(Quad& q){ std::cout << std::fixed; std::cout << " (0,inf) exp(-x) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x,void* p){ return exp(-x); },NULL) << " exact = 1 " << std::endl; std::cout << " (0,inf) x*exp(-x) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x,void* p){ return x*exp(-x);},NULL) << " exact = 1 " << std::endl; std::cout << " (0,inf) 1/6*x^3*exp(-x) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x,void* p){ return 1./6.*x*x*x*exp(-x); },NULL) << " exact = 1 " << std::endl; std::cout << " (0,inf) 2./sqrt(pi)*exp(-x^2) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x,void* p){ return 2./sqrt(M_PI)*exp(-x*x); },NULL) << " exact = 1 " << std::endl; std::cout << "\n\n"; std::cout << " 4./pi*(0,inf)(0,inf) exp(-x*x-y*y) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x, double y,void* p){ return 4./M_PI*exp(-x*x-y*y); },NULL) << " exact = 1" << std::endl; std::cout << " 4.*(0,inf)(0,inf) x*y*exp(-x*x-y*y) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x, double y,void* p){ return 4.*x*y*exp(-x*x-y*y); },NULL) << " exact = 1" << std::endl; std::cout << " 4.*(0,inf)(0,inf) sin(x)*sin(y)*exp(-x-y) = " << std::setw(12) << std::setprecision(10) << q.integrate( [](double x, double y,void* p){ return 4.*sin(x)*sin(y)*exp(-x-y); },NULL) << " exact = 1" << std::endl; }