| |||||
| Dernière réponse | |
|---|---|
| Sujet : [C] Calcul d'une dérivée | |
| Je@nb | En fait moi je cherche ça car ma Ti 89 me sert bien mais j'ai envie de porter ça à d'autre langages mais vu que je suis une bite en prog, je pense que ça va être impossible à faire. |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| Je@nb | En fait moi je cherche ça car ma Ti 89 me sert bien mais j'ai envie de porter ça à d'autre langages mais vu que je suis une bite en prog, je pense que ça va être impossible à faire. |
| youdontcare | pour faire un parser d'expression simple (+ - / *) en une demie heure chrono, c'est par ici : http://compilers.iecc.com/crenshaw/
c'est la seule ressource potable que j'aie trouvée sur le sujet. ça a dix ans, c'est en pascal et ça compile du 68000 (!). c'est néanmoins très bien expliqué et convertible (tissable ?) en C très rapidement. ensuite, on peut améliorer sa méthode pour faire un cas général : une fonction récursive qui parcourt une table d'opérateurs avec leur précédence & associativité, construire l'arbre (utile pour la lazy evaluation), etc. |
| El_gringo |
|
| sombresonge |
|
| flo850 | j'oublias on a traiter +- * / sin cos et j'ai rajouter : n variables , tan ,ln , (petite )simplification .L'integration est plus dure |
| flo850 | j'oublias on a traiter +- * / sin cos et j'ai rajouter : n variables , sans avoir |
| flo850 |
|
| sombresonge |
|
| flo850 | je n'ai fait que la derivation en C sous linux et je ne pense pas que ce soit exploitable pour la factorisation .
Si ca t'interesse , je peux tu mailer les .c et .h. |
| antsite | Ca m'intéresse aussi beaucoup ! :) |
| Je@nb | y en ont qui on déjà programmer un calcul formel ?
car on m'a demandé de faire une app qui fait les dérivations et autres calcul : factorisation ... si qqn l'a déjà fait, pourrait-il nous donner l'algo ? |
| BENB |
|
| H4dd3R | Pquoi ça s´appelle Polonaise?? Comme un mathématicien?? |
| tgrx |
|
| H4dd3R | sombresonge
d'expression en polonaise(inverse) ?? Quezako?? |
| flo850 |
|
| sombresonge | En fait pour pouvoir esperer y arriver il faut pas penser +,-,*,/,cos,sin ...
mais penser Opérateur et opérande: Unaire (Cos,exp...) Binaire (+,-,*,/) puis penser quoi qui as la priorité sur quoi *,/ devant +,- ça fait 2 familles là! puis continuer à analyser la langue mathématique (En fait ya toute une littérature dessus...) PS: Pour construire l'arbre on est pas obliger de le construire phisiquement (File de frère + pointeur vers premier frère gauche...) mais on peut s'ensortire avec des pile et de file... Mais pour faire du calcul formel vaut mieux pouvoire reproduire la structure de l'arbre à partir des piles... Pour ce qui veulent s'y attaqué je conseil déjà de partir d'expression en polonaise(inverse) parceque foncer direct dans le langage mathématique sans avoir aucune connaissance des grammaires c trop Hard (c faisable mais trop dure)! |
| flo850 | c clair , on a fait ce TP au debut de la licence , le prof nous a filé une fct qui prenait un exp et retournait un arbre .Nous on a juste fait le TAD arbre et la fct de derivation . Ca a pris 2 semaine
on a eu a refaire cette fct en compil , il m'a fallut 2 semaine aussi ,mais avec un an de programmation de plus |
| sombresonge |
|
| flo850 | je l'ai eu en TP en licence: tu fais un arbre a partir de l'expression , chq noeud est un operateur ou un nombre ( stocké sous forme de char *) apres tu derive ton arbre de maniere recursive en partant de la racine : + + derivée ( / \ ) = / \ A B derivée(A) derivée (B) et ainsi de suite avec * / - |
| LetoII | Pour l'algo comme c un peu long ceux qui le veulent envoie un mail à : jhell2000@hotmail.com |
| El_gringo | c les sources qui nous interresse ... dériver des fonctions, en général, ça va, j'y arrive ! |
| mordicus340 | tu achetes une TI 89 ;) |
| BENB | Leto II > le plus simple c'est sans doute que tu en donnes les references... |
| Sebastien | idem too me |
| El_gringo | moi, ça m'interresse ... tu pourras me l'envoyer ce code !? |
| LetoII | T'as juste à faire un analyseur syntaxique....
Bon tu passe ton expression sous forme d'arbre tu identifie les fonctions courrantes dont les dérivées sont connues, tu parcours ton arbre de façon à respecter les raigles de dérivations et voilà... si t'es patient j'ai un pote qui upload un code dessus demain (par contre c du C++ mais ça doit être facilement portable en C) |
| El_gringo | ou alors, tu te prends moins la tête pour un résultat logiquement plus stable et performant : tu cherches sur le net une librairie mathématique qui à les fonctions nécessaires. ça doit forcément être trouvable (si tu trouves un truc, ça serai sympa de me dire ou tu l'as trouvé, ça m'interresse pas mal ce style de trucs... |
| sombresonge | Pour une foction numérique quelconque tu dois commencer par écrire un moteur de calcul formel en suite tu lui apprend les règle de dérivation... |
| darkoli | Ben si tu ne dois traiter que des polynomes, c'est super facile !!!
Tu stock les coefs dans un tableau genre : [1 3 5] dans un tableau, 1 et dans la case0 donc c'est le coef de degré 0, etc ... Faire la derivée consiste à diminuer le degré de ta fonction. int fct[20]; int degre=2; fct[0]=1; fct[1]=3; fct[2]=5; for (int i=1;i<=degre;i++) { fct[i-1]=fct[i]*i; } fct[degre]=0; voila c'est facile !!! |
| barbarella | d'une fonction quelconque ou d'un polynome seulement ? dansle premeir cas c'est très compliqué dans le second c'est assez simple |
| antsite | comment faire pour calculer la dérivée d'une fonction :
5x^2+3x+1 on applique une fonction dessus et ça nous sort 10x+3. Je vois vraiment pas comment faire ! Help ! |




