了解近似搜尋的內部工作原理對於解決與擬合多項式、參數函數和超越相關的問題至關重要方程式。即使在處理不嚴格單調的函數時,這種方法也可以讓您有效地估計值和參數。
近似搜尋模仿二分搜尋的概念,但它並不不強加搜尋函數嚴格單調的限制。它的運作原理如下:
這是近似值的簡化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中文網其他相關文章!