Browse Source

fix(quadrature): optimize Gauss-Legendre and tanh-sinh integration calculations,support integral over [a, b]

feat-integrator
mckay 4 weeks ago
parent
commit
07fe15f863
  1. 14
      surface_integral/include/quadrature.hpp

14
surface_integral/include/quadrature.hpp

@ -3,25 +3,27 @@
#include "GL_integrator.hpp"
#include "TS_integrator.hpp"
// 高斯-勒让德一维积分:积分区间 [a, b]
// Gauss-Legendre quadrature for 1D integral over interval [a, b]
template<typename Func>
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 = GLIntegrator<double>::x(q, i, a, b);
double w = GLIntegrator<double>::w(q, i, a, b);
double x = a + length * GLIntegrator<double>::x(q, i);
double w = length * GLIntegrator<double>::w(q, i);
sum += w * func(x);
}
return sum;
}
// tanh-sinh 一维积分:积分区间 [a, b]
// Tanh-sinh quadrature for 1D integral over [a, b]
template<typename Func>
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 = TSIntegrator<double>::x(q, i, a, b);
double w = TSIntegrator<double>::w(q, i, a, b);
double x = a + length * TSIntegrator<double>::x(q, i, a, b);
double w = length * TSIntegrator<double>::w(q, i, a, b);
result += w * func(x);
}
return result;

Loading…
Cancel
Save