Bonjour,
Je souhaiterais savoir s'il existe en C++ une fonction qui permette de trouver directement le zéro d'une fonction.
Je vous remercie par avance,
Cordialement.
Bonjour,
Je souhaiterais savoir s'il existe en C++ une fonction qui permette de trouver directement le zéro d'une fonction.
Je vous remercie par avance,
Cordialement.
Bonjour,
En C++ uniquement, non, par contre, dans l'une des nombreuses bibliothèques de mathématiques, certainement.
Regarde du coté de boost, notamment Boost.Math
Bonjour,
Merci pour votre réponse.
J'ai regardé dans la bibliothèque Boost Math.
Je n'ai pas trouvé de fonction permettant de résoudre une équation, je suis cependant débutante en C++.
Sachant que je souhaiterais que la fonction me rende une solution numérique (donc non exacte), connaissez-vous un autre moyen de faire ?
Je vous remercie par avance,
Cordialement.
Et bien, programmer le calcul.
Certes, c'est bien de ne pas réinventer la roue, mais vient un moment où c'est plus rapide, et surtout plus formateur.
Quelle est ta situation précise?
Dois-tu pouvoir déterminer {x de R | f(x)=0} pour toute fonction f qu'on te donnerai?
Si oui, comment te la donnerait-on? par sa forme analytique (f(x)=2x²-1) ou par une fonction précodée?
Je voudrais rentrer la fonction par une forme analytique.
La fonction est :
f(x(k))=-x(k)*exp(-(x(k)+t)) +10.
Je voudrais trouver la valeur x(0) de x qui annule la fonction pour t=0.
Puis la valeur x(1) de x qui annule la fonction pour t=x(0).
Puis la valeur x(2) de x qui annule la fonction pour t=x(0)+x(1).
etc.
Je voudrais que les valeurs x(0), x(1) et x(2) soient numériques avec une précision de 15 chiffres après la virgule.
Merci par avance.
Premièrement, la précision à 15 chiffres, ce n'est pas facilement possible. (cf le format flottant
Il faut te tourner vers des outils spécialisés.
Enfin, négligeons ce détail.
Quand je disais la forme analytique, je voulais désigner ceci (ou pire encore):
Commençons par le début, sais-tu comment t'y prendre mathématiquement parlant? Autrement dit, si tu n'avais qu'un crayon, que ferais-tu?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main() { string equation = "f(x(k))=-x(k)*exp(-(x(k)+t)) +10"; cout << equation << " a pour zéro : " << search_zero(equation) << endl; return 0; }
Il ne faut pas oublier qu'un ordinateur est une calculette géante, super rapide, mais qui fais ce qu'on lui dit.
Et qu'un programme n'est qu'une manière de lui dire que faire.
La seule vraie limite d'un langage est: "Il n'est possible de programmer que ce qu'on peut expliquer."
tu cherches donc la solution de -x*exp(-(x+t)) +10 == 0
c'est-à-dire 10 = x * exp(-(x+t))
commence par ecrire une petite fonction:
Ton problème devient alors d'écrire la fonction double chercher_zero(double x, double t); qui devrait retourner le zero de f pour un x et un t donné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double f(double x, double t) { return -x * exp(-(x+t)) +10; }
Pour l'usage futur, tu peux envisager ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class exponentielle { private: double decalage; public: explicit exponentielle(double d) : decalage(d) {} double operator()(double x, double t) const { return -x * exp(-(x+t)) + decalage; } }; //exemple d'usage int main() { exponentielle e10(10); std::cout << " à t=0, f(4) = " << e10(4) << std::endl; }
Partager