Comprendre le fonctionnement interne de la recherche d'approximation est crucial pour résoudre les problèmes liés à l'ajustement des polynômes, des fonctions paramétriques et des valeurs transcendantales. équations. Cette approche vous permet d'estimer efficacement les valeurs et les paramètres, même lorsqu'il s'agit de fonctions qui ne sont pas strictement monotones.
La recherche d'approximation imite le concept de recherche binaire, mais ce n'est pas le cas. Cela n'impose pas la contrainte que la fonction recherchée soit strictement monotone. Voici comment cela fonctionne :
Voici une implémentation C simplifiée de la recherche d'approximation :
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 } } };
Supposons que vous souhaitiez trouver la valeur de x telle que y = f(x) soit la plus proche de y0. Voici comment utiliser la classe 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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!