Calcul d'une dérivée [C] - Programmation
Marsh Posté le 22-10-2001 à 21:04:10
d'une fonction quelconque ou d'un polynome seulement ? dansle premeir cas c'est très compliqué dans le second c'est assez simple
Marsh Posté le 22-10-2001 à 21:09:11
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 !!!
Marsh Posté le 22-10-2001 à 22:33:42
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...
Marsh Posté le 23-10-2001 à 08:57:52
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...
Marsh Posté le 23-10-2001 à 10:49:19
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)
Marsh Posté le 23-10-2001 à 11:37:10
moi, ça m'interresse ... tu pourras me l'envoyer ce code !?
Marsh Posté le 23-10-2001 à 11:53:52
Leto II > le plus simple c'est sans doute que tu en donnes les references...
Marsh Posté le 23-10-2001 à 17:45:41
c les sources qui nous interresse ... dériver des fonctions, en général, ça va, j'y arrive !
Marsh Posté le 23-10-2001 à 19:09:33
Pour l'algo comme c un peu long ceux qui le veulent envoie un mail à : jhell2000@hotmail.com
Marsh Posté le 23-10-2001 à 22:11:34
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 * / -
Marsh Posté le 23-10-2001 à 23:12:24
LetoII a écrit a écrit : T'as juste à faire un analyseur syntaxique.... |
Il faut faire un peu plus qd même: un analyseur gramatical en faite.
Et Aussi avant de dériver un arbre il faut aussi s'assurer que la dériver ait un sens... mais bon si tu arrive déjà à construire l'arbre correctement t'as presque gagner
Marsh Posté le 23-10-2001 à 23:30:08
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
Marsh Posté le 24-10-2001 à 00:12:24
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)!
Marsh Posté le 24-10-2001 à 12:56:27
sombresonge a écrit a écrit : 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)! |
il est genial il a tout compris .
c'est exactement ce qu'il faut faire .
le plus simple est de ne s'occuper que des binaires au debut , puis on ajoute les unaires ( on garde tjrs la struc d'arbre binaire , mais certains noeud n'ont q'un fils ) et si tu est un peu plus sauvage , apres tu traites les opérateurs n-aires...
Marsh Posté le 24-10-2001 à 14:03:00
sombresonge
d'expression en polonaise(inverse)
?? Quezako??
Marsh Posté le 24-10-2001 à 14:18:48
H4dd3R a écrit a écrit : sombresonge d'expression en polonaise(inverse) ?? Quezako?? |
ca correspond au parcours postfixe de l'arbre défini ci-dessus
Marsh Posté le 24-10-2001 à 16:03:48
H4dd3R a écrit a écrit : Pquoi ça s´appelle Polonaise?? Comme un mathématicien?? |
C'est un polonais qui a propose cette notation qui permet d'eviter les parentheses
2+3 -> + 2,3
2*(3+4) -> * 2, + 3,4 ou avec parentheses * 2,(+ 3,4)
et sur ses calculatrices, HP utilise la polonaise inversee
2+3 -> 2,3 +
2*(3+4) -> 2 3 4 + * .... oui la c'est un peu plus dur...
Marsh Posté le 24-10-2001 à 16:35:31
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 ?
Marsh Posté le 24-10-2001 à 22:46:46
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.
Marsh Posté le 24-10-2001 à 22:53:42
Je@nb a écrit a écrit : 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 ? |
J'en ai fait un début: l'analiseur de l'expression et sa décomposition en un Arbre. ça m'as prit 2 mois. Pour la factorisation, l'integration ... il faut vraiment que tu prenne un bon gros bouquins sur le calcul formel parceque c très chaud à expliquer!
Marsh Posté le 24-10-2001 à 23:28:48
sombresonge a écrit a écrit : J'en ai fait un début: l'analiseur de l'expression et sa décomposition en un Arbre. ça m'as prit 2 mois. Pour la factorisation, l'integration ... il faut vraiment que tu prenne un bon gros bouquins sur le calcul formel parceque c très chaud à expliquer! |
ca depend ce que tu veus faire : faire leTAD arbre + derivé un arbre => 2 semaines
on avait dejala fonction de construction d'un arbre a partir d'une exp
Marsh Posté le 24-10-2001 à 23:31:13
j'oublias on a traiter +- * / sin cos et j'ai rajouter : n variables , sans avoir
Marsh Posté le 24-10-2001 à 23:32:08
j'oublias on a traiter +- * / sin cos et j'ai rajouter : n variables , tan ,ln , (petite )simplification
.L'integration est plus dure
Marsh Posté le 24-10-2001 à 23:35:35
flo850 a écrit a écrit : on avait dejala fonction de construction d'un arbre a partir d'une exp |
Je n'avais pas cette fonction. En faite je n'avais même pas l'algo pour le faire. J'ai dut chercher un peu tout seul avec des bouquins - > 2mois pour capter le pourquoi du comment et implémenter tut ça proprement.
Marsh Posté le 25-10-2001 à 09:01:32
tgrx a écrit a écrit : ca correspond au parcours postfixe de l'arbre défini ci-dessus |
super, il est bien avancé maintenant qu'il sais que ce le parcout postfixe... l'explication de départ était plus claire !
Marsh Posté le 25-10-2001 à 09:07:14
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.
Marsh Posté le 25-10-2001 à 16:26:28
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.
Marsh Posté le 22-10-2001 à 20:56:29
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 !