了解近似搜索的内部工作原理对于解决与拟合多项式、参数函数和超越相关的问题至关重要方程。即使在处理不严格单调的函数时,这种方法也可以让您有效地估计值和参数。
近似搜索模仿二分搜索的概念,但它并不不强加搜索函数严格单调的约束。它的工作原理如下:
这是近似值的简化 C 实现search:
class approx { public: void init(double a0, double a1, double da, int n, double *e) { a0 = min(a0, a1); a1 = max(a0, a1); // Ensure a0 < a1 da = abs(da); this->n = n; e = e; e0 = -1.0; i = 0; a = a0; aa = a0; done = false; stop = false; } void step() { if ((e0 < 0.0) || (e0 > *e)) { e0 = *e; aa = a; } // Better solution if (stop) { i++; if (i >= n) { done = true; a = aa; return; } // Final solution a0 = aa - fabs(da); a1 = aa + fabs(da); a = a0; da *= 0.1; a0 += da; a1 -= da; stop = false; } else { a += da; if (a > a1) { a = a1; stop = true; } // Next point } } };
假设您想要找到 x 的值,使得 y = f(x) 最接近 y0。以下是如何使用 approx 类:
approx aa; double ee, x, y, x0, y0 = your_target_value; for (aa.init(0.0, 10.0, 0.1, 6, &ee); !aa.done; aa.step()) { x = aa.a; y = f(x); ee = abs(y - y0); }
以上是近似搜索如何有效地查找非单调函数的值和参数?的详细内容。更多信息请关注PHP中文网其他相关文章!