近似検索の内部動作を理解することは、多項式、パラメトリック関数、および超越関数のフィッティングに関連する問題を解決する上で非常に重要です。方程式。このアプローチにより、厳密には単調ではない関数を扱う場合でも、値とパラメーターを効果的に推定できます。
近似検索は二分探索の概念を模倣しますが、そうではありません。検索関数が厳密に単調であるという制約を課さないでください。その仕組みは次のとおりです:
これは近似の簡略化された 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 } } };
y = f(x) が y0 に最も近くなるような x の値を見つけたいとします。近似クラスの使用方法は次のとおりです。
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 中国語 Web サイトの他の関連記事を参照してください。