Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5055 connectés 

 


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.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


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

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 !

sombresonge

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.

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 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

sombresonge

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!

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 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...

H4dd3R Pquoi ça s´appelle Polonaise?? Comme un mathématicien??
tgrx

H4dd3R a écrit a écrit :

sombresonge
d'expression en polonaise(inverse)
?? Quezako??  




 
ca correspond au parcours postfixe de l'arbre défini ci-dessus

H4dd3R sombresonge
d'expression en polonaise(inverse)
?? Quezako??
flo850

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...

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

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

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 !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)