20 const std::vector<double>& fy,
double fxmin,
double fxmax)
21 : xmin(fxmin), xmax(fxmax), x(fx), y(fy) {
26 const long q = x.size();
27 for (
long n = 0; n < q - 1; n++) {
30 for (
long n = 0; n < q; n++) {
35 for (
long n = 0; n < q - 1; n++) {
36 a[n] = (y[n + 1] - y[n]) / (x[n + 1] - x[n]);
39 double y0 = y[0] - a[0] * (x[0] - xmin);
41 x[0] = x[0] - y[0] / a[0];
50 if (xmax > x[q - 1]) {
51 double yq = y[q - 1] + a[q - 2] * (xmax - x[q - 1]);
53 x[q - 1] = x[q - 1] - y[q - 1] / a[0];
66 for (
long n = 1; n < q; n++) {
67 iy[n] = iy[n - 1] + 0.5 * (x[n] - x[n - 1]) * (y[n - 1] + y[n]);
71 }
else if (xmin > x[n - 1]) {
73 (xmin - x[n - 1]) * (y[n - 1] + 0.5 * a[n - 1] * (xmin - x[n - 1]));
79 }
else if (xmax > x[n - 1]) {
81 (xmax - x[n - 1]) * (y[n - 1] + 0.5 * a[n - 1] * (xmax - x[n - 1]));
85 integ_active = integ_finish - integ_start;