// Compute the overall probability of the given result, by integrating
// the entire resulting pdf. Note that since we're actually evaluating
// a double integral, we'll need to multiply by h² instead of h.
- // (TODO: Use Simpson's rule here.)
+ // (For some reason, Simpson's rule gives markedly worse accuracy here.
+ // Probably related to h² somehow?)
{
double h = (curve.back().first - curve.front().first) / (curve.size() - 1);
double sum = 0.0;
for (unsigned i = 0; i < curve.size(); ++i) {
- sum += h * h * curve[i].second;
+ sum += curve[i].second;
}
+
+ sum *= h * h;
// FFT convolution multiplication factor (FFTW computes unnormalized
// transforms)
// the entire resulting pdf. Note that since we're actually evaluating
// a triple integral, we'll need to multiply by 4h³ (no idea where the
// 4 factor comes from, probably from the 0..6000 range somehow) instead
- // of h. (TODO: Use Simpson's rule here.)
+ // of h.
+ // (TODO: Evaluate Simpson's rule here, although it's probably even worse
+ // than for the single case.)
{
double h = (newcurve.back().first - newcurve.front().first) / (newcurve.size() - 1);
double sum = 0.0;
for (unsigned i = 0; i < newcurve.size(); ++i) {
- sum += 4.0 * h * h * h * newcurve[i].second;
+ sum += newcurve[i].second;
}
+
+ sum *= 4.0 * h * h * h;
// FFT convolution multiplication factor (FFTW computes unnormalized
// transforms)