| 119 | }; |
| 120 | |
| 121 | std::vector<double> Integrator::ChebyshevSeries(int size) |
| 122 | { |
| 123 | std::vector<double> series(size); |
| 124 | |
| 125 | int lenw = series.size() - 1; |
| 126 | int j, k, l, m; |
| 127 | double cos2, sin1, sin2, hl; |
| 128 | |
| 129 | cos2 = 0; |
| 130 | sin1 = 1; |
| 131 | sin2 = 1; |
| 132 | hl = 0.5; |
| 133 | k = lenw; |
| 134 | l = 2; |
| 135 | while (l < k - l - 1) |
| 136 | { |
| 137 | series[0] = hl * 0.5; |
| 138 | for (j = 1; j <= l; j++) |
| 139 | { |
| 140 | series[j] = hl / (1 - 4 * j * j); |
| 141 | } |
| 142 | series[l] *= 0.5; |
| 143 | dfct(l, 0.5 * cos2, sin1, series); |
| 144 | cos2 = std::sqrt(2 + cos2); |
| 145 | sin1 /= cos2; |
| 146 | sin2 /= 2 + cos2; |
| 147 | series[k] = sin2; |
| 148 | series[k - 1] = series[0]; |
| 149 | series[k - 2] = series[l]; |
| 150 | k -= 3; |
| 151 | m = l; |
| 152 | while (m > 1) |
| 153 | { |
| 154 | m >>= 1; |
| 155 | for (j = m; j <= l - m; j += (m << 1)) |
| 156 | { |
| 157 | series[k] = series[j]; |
| 158 | k--; |
| 159 | } |
| 160 | } |
| 161 | hl *= 0.5; |
| 162 | l *= 2; |
| 163 | } |
| 164 | return series; |
| 165 | } |
| 166 | double Integrator::ClenshawCurtisQuadrature(IntegrationFunction& function, void* customData, double start, double end, std::vector<double>& series, double epsilon) |
| 167 | { |
| 168 | double integration; |