regress: speed up range expansion in robust regression

Instead of repeatedly expanding the range of b with the same increment,
double the range on each iteration to speed up the expansion. Also, add
a sanity check for the interval.
This commit is contained in:
Miroslav Lichvar 2017-06-27 10:03:05 +02:00
parent e118b9b1e8
commit c2944d8727

View file

@ -566,24 +566,18 @@ RGR_FindBestRobustRegression
Estimate standard deviation of b and expand range about b based
on that. */
sb = sqrt(s2 * W/V);
if (sb > tol) {
incr = 3.0 * sb;
} else {
incr = 3.0 * tol;
}
incr = MAX(sb, tol);
blo = b;
bhi = b;
do {
/* Make sure incr is significant to blo and bhi */
while (bhi + incr == bhi || blo - incr == blo) {
incr *= 2;
}
incr *= 2.0;
/* Give up if the interval is too large */
if (incr > 100.0)
return 0;
blo = b - incr;
bhi = b + incr;
blo -= incr;
bhi += incr;
/* We don't want 'a' yet */
eval_robust_residual(x + start, y + start, n_points, blo, &a, &rlo);
eval_robust_residual(x + start, y + start, n_points, bhi, &a, &rhi);