#pragma once #include "GL_integrator.hpp" #include "TS_integrator.hpp" // Gauss-Legendre quadrature for 1D integral over interval [a, b] template double gauss_integrate_1D(double a, double b, Func&& func, int q) { double sum = 0.0; double length = b - a; for (int i = 0; i < q; ++i) { double x = a + length * GLIntegrator::x(q, i); double w = length * GLIntegrator::w(q, i); sum += w * func(x); } return sum; } // Tanh-sinh quadrature for 1D integral over [a, b] template double tanh_sinh_integrate_1D(double a, double b, Func&& func, int q) { double result = 0.0; double length = b - a; for (int i = 0; i < q; ++i) { double x = a + length * TSIntegrator::x(q, i, a, b); double w = length * TSIntegrator::w(q, i, a, b); result += w * func(x); } return result; } template double integrate_1D(double a, double b, Func&& func, int q, bool use_tanh_sinh = false) { if (use_tanh_sinh) { return tanh_sinh_integrate_1D(a, b, std::forward(func), q); } else { return gauss_integrate_1D(a, b, std::forward(func), q); } }