Comment fait-on pour dériver une fonction math en C++?
Merci
![]()
Comment fait-on pour dériver une fonction math en C++?
Merci
![]()
"dériver une fonction " ??
je dérive des classes mais pas des fonctions![]()
Je pense que danduril parlait de dérivation au sens mathématique de terme càd que dériver x² donne 2x (en dérivant sur x bien sûr).
En tout cas avec la math.h du C, il n'y a pas moyen autant que je sache.
T'as jamais fait des fonctions dérivées en math?
f'(x) tu connais?
![]()
Pour seulement ceux qui connaissent la réponse (et qui ont passé le bac) merci de me faire savoir comment faire...
la notion de fonction au sens mathematique n'existe pas en c++.
c'est pourquoi parler de deriver une fonction ne veut pas dire grand chose dans le domaine du c++. Alors que deriver ... une classe signifie quelque chose ...
c'est donc a toi de coder le concept de fonction. Et donc c'est aussi a toi de coder les methodes qui vont bien (deriver, integrer ...).
avec une classe fonction, tu pourrais deja y voir un peu plus clair
merci khayyam90
mais il me semblait que dans "math.h", il existe une methode permettant de dériver
merci quand même
je continu de chercher
non (voir mon post plus haut), il y a tous les sin, cos, atan et autres mais ruen qui concerne des dérivation/intégration etc.
Ben, il faut dire que là, on entre dans le calcul formel...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Effectivement on entre dans le calcul formel.
Et je peux vous garantir que la programmation à ce niveau n'est pas de la blaque. Image un peu une table des fonctions avec leur dérivées et intégrales. Ton programme doit être capable de faire d'abord la moindre somme formelle de "x + x = 2x", et surtout le faire comprendre que le terme "2x" est au fait "2*x".
ça m'a rappelé un programme que j'ai eu à faire celui d'évaluer une expression mathématique donnée sous forme de chaine
Par exemple:
La fonction f(x,y) est passé sous forme de chaîne de caractère
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CFunction<double> f("f(x,y) = sin(x + 2y) + x^2 + ln(y)"); cout << "La valeur de f(x,y) au point (3.5, 4.2) est\n" << f(3.5, 4.2) << endl;
La classe template CFunction analyse la fonction au moyen de son constructeur qui vérifie de manière syntaxique, lexical, nature, type des expresions, etc.
L'opérateur d'appel de fonction operator() est celle qui transforme la classe CFunction en un foncteur et se charge de l'évaluation effective syntaxique, lexicale, etc.
Rien que ce petit programme console m'a pris des mois pour le mettre sur pied. Je ne te dis pas la foule de classes qui se cache derrière. Et surtout sa technique d'évaluation par des appels récursives de quoi se perde dans la logique du programme de calcul. Et surtout qu'à partir d'une fonction f() on peut appeller une autre fonction g() (évalution de fonctions de fonctions).
L'étape suivante était de perfectionner mes classes pour faire des dérivés et intégrales et surtout résoudre les équations de manière formelle.
Du moins numériquement j'ai pu écrire un programme qui résout des systèmes d'équations différentielles.
Enfin j'ai surtout était inspiré par la puissance de calcul formelle d'une calculatrice performante la Texas Instrument 89 - 92 - 92 Plus et ça version actuelle TI Voyage 200.
Bon je conclus qu'il faudra écrire d'important quantité de code. Mais je crois qu'il doit y avoir des outils de calculs mathématiques en commençant par MatLab.
Gabrielly![]()
J'avais écrit une fonction (qui marchait !) qui calculait numériquement le gradient d'une autre fonction et donc calculait implicitement et numériquement des fonctions dérivées.
En fait pour calculer la valeur de la dérivée d'une fonction f en un point donné x tu peux utiliser la formule :
f'(x)= (f(x+h)-f(x-h))/(2*h) lorsque h tend vers 0.
En pratique pour calculer la valeur de la dérivée de f en un point x tu utilises donc la formule ci-dessus en prenant une valeur de h "suffisamment petite" (avec toutes les conséquences que peut avoir le mot "suffisamment" !!) avec par exemple h=10^-5. Voilà, je sais que ma réponse concerne une application numérique et pas formelle mais étant donné que tu ne précisais pas cela dans ton message initial ...![]()
De manière générale en programmation, pour dériver :
- soit on connaît l'expression mathématique de la fonction et dans ce cas il est aisé de la dériver à la main, puis ensuite de l'implémenter,
- soit on ne la connaît pas, et dans ce cas on est obligé d'avoir recours au calcul numérique (méthode donnée par exemple par rulianf mais il y en a d'autres, et un tas de bibliothèques doivent le faire).
La première solution est toujours à privilégier car :
- elle permet d'avoir accès à la dérivée de manière bien plus rapide que par le calcul numérique (où pour chaque point où l'on veut la dérivée il faut calculer par rapport aux points à côté, alors que dans l'autre cas on applique bêtement la formule mathématique)
- on peut avoir accès à n'importe quelle valeur, et pas seulement des valeurs discrétisées comme dans un calcul numérique (où si l'on veut une valeur précise il fauit encore faire parfois des interpolations par exemple).
Donc tout dépend de ce que tu as, mais si c'est un problème mathématique avant tout, privilégie ta tête plutôt que l'ordi, et dans l'autre cas utilise le car tu n'as pas le choix....
A+
Partager