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
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
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?
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
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; }
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Tu veux le faire analytiquement ou numériquement ?
Numériquement, boost propose plusieurs élément, donc le premier est le classique algorithme de Newton : http://www.boost.org/doc/libs/1_53_0...ls1/roots.html
Analytiquement, l'exercice est de type totalement différent, et définir un ensemble de fonction que tu veux pouvoir traiter (tu pourras pas toutes les traiter ... ça serait trop beau) est la première étape. La seconde est de coder de quoi faire comprendre à l'ordinateur la fonction, puis finalement les algorithmes qui vont résoudre ton problème.
La base de ce second type de problème c'est de la compilation et de la manipulation d'AST. Tu donnes une expression au programme, il l'analyse et créé un AST, ensuite tu traites cet AST pour en déduire le résultat. C'est un exercice assez complexe, plus que celui de proposer une implémentation basique de l'algorithme de Newton.
Bonjour,
Merci pour votre réponse.
Je voudrai une solution numérique. Je vais donc utiliser la fonction Boost.
J'ai téléchargé la librairie Boost.
Je ne vois pas comment accéder à la fenêtre Options pour rajouter les répertoires d'installation (pour que Visual C++ trouve la bibliothèque Boost).
Pouvez-vous m'indiquer comment accéder à cette fenêtre ?
Merci d'avance.
Dans l'Explorateur de solutions, sélectionne ton projet, puis clique sur le premier bouton en haut de l'Explorateur de solutions. Tu auras alors accès à la fenêtre des propriétés du projet.
Bonjour,
Merci pour votre réponse.
Lors de la création d'un projet, je souhaiterais savoir quel modèle déjà installé je dois choisir ?
J'ai essayé en choississant le projet Win32. Quand je réalise un Debug, on me dis que le projet est obsolète.
Cela vient-il du fait que j'ai choisi le mauvais projet ?
Merci d'avance.
A priori, il vaut mieux choisir un projet vide, voire un projet console.
Le premier étant vide, il n'a aucun problème possible, mais tout est à faire.
Le projet console, lui, contient un minimum de code et aucune extension.
Un projet win32 contient un certain nombre de dépendance pour utiliser le code spécifique à windows.
Mieux vaut se limiter au code pour C++ quand on débute.
Cela dit, "le projet est obsolete" signifie tout simplement qu'il n'a pas été recompilé depuis les derniers changements. cherche la commande/le bouton Reconstruire ou Rebuild.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager