Eval() ? Ou solution pour dériver une fonction en symbolique ?

Eval() ? Ou solution pour dériver une fonction en symbolique ? - C++ - Programmation

Marsh Posté le 08-04-2008 à 03:07:05    

Youp :)

 


Voilà mon "pitit" problème :)

 

Je voudrais pouvoir entre une fonction mathématique (pas forcement jolie et contenant des paramètres) dans mon programme, en prendre la dérivée et évaluer cette dérivée en fonction de différentes valeurs des paramètres et pour différentes valeurs de la variable.

 

Pour ça, je récupère la fonction sous forme de string que je donne à manger à une fonction qui en calcule la dérivée de manière symbolique (la fonction retourne un string).

 

Mon problème est de pouvoir évaluer cette dérivée, qui est un string, et donc de faire une sorte de "eval()" dessus.

 

J'ai vu une solution qui consistait à écrire la string dans un fichier (avec un programme autour, oui oui :)) et de compiler ce fichier.
Mais ça m'a l'air tordu :sweat:

Spoiler :

oui je sais, il semblerait que de demander de faire un eval() serait aussi en soi tordu :o


Mais y aurait-il par hasard une autre manière pas trop compliquée de mettre ça en place (toutes les bidouilles sont acceptées sachant que je suis assez nioub :p) ?

 

Ou une simplement une autre approche pour le problème ?

 


marchi :)

Message cité 1 fois
Message édité par art_dupond le 08-04-2008 à 03:08:12

---------------
oui oui
Reply

Marsh Posté le 08-04-2008 à 03:07:05   

Reply

Marsh Posté le 08-04-2008 à 07:43:38    

bah a toi d'écrire un parser pour parser la chaine et appeller en cascade les fonctions élementaires nécessaires.
 
Regarde du coté de boost::spirit, booost::xpressive et boost::proto

Reply

Marsh Posté le 08-04-2008 à 10:42:42    

ah oui pas bête, je n'y avais même pas pensé :p
 
Comme je décompose déjà en fonction élémentaire pour faire ma dérivée, suffit que j'adapte pour faire mon eval :)
 
merci beaucoup :jap:
 
 
ps: ça a l'air pratique boost, je garde sous le coude :)


---------------
oui oui
Reply

Marsh Posté le 08-04-2008 à 17:06:00    

art_dupond a écrit :

Youp :)

 


Voilà mon "pitit" problème :)

 

Je voudrais pouvoir entre une fonction mathématique (pas forcement jolie et contenant des paramètres) dans mon programme, en prendre la dérivée et évaluer cette dérivée en fonction de différentes valeurs des paramètres et pour différentes valeurs de la variable.

 

Pour ça, je récupère la fonction sous forme de string que je donne à manger à une fonction qui en calcule la dérivée de manière symbolique (la fonction retourne un string).

 

Mon problème est de pouvoir évaluer cette dérivée, qui est un string, et donc de faire une sorte de "eval()" dessus.

 

J'ai vu une solution qui consistait à écrire la string dans un fichier (avec un programme autour, oui oui :)) et de compiler ce fichier.
Mais ça m'a l'air tordu :sweat:

Spoiler :

oui je sais, il semblerait que de demander de faire un eval() serait aussi en soi tordu :o


Mais y aurait-il par hasard une autre manière pas trop compliquée de mettre ça en place (toutes les bidouilles sont acceptées sachant que je suis assez nioub :p) ?

 

Ou une simplement une autre approche pour le problème ?

 


marchi :)

 

si tu veux avoir l'allure de la dérivée a priori tu n'a pas besoin de calculer la dérivée en symbolique, non ? PAr exemple, si ta fonction est une fonction 1d du type f(x, a,b,c), avec a,b,c des paramètres, pourquoi ne pas juste faire une fonction qui calcule la dérivée avec ( f(x+1,a,b,c) - f(x,a,b,c) )/ 2 ?

 

enfin je dis ca .... c'est peut être pas ce que tu souhaites faire

Message cité 1 fois
Message édité par in_your_phion le 08-04-2008 à 17:08:04
Reply

Marsh Posté le 08-04-2008 à 18:01:32    

Si tu te sens l'âme d'un hacker, je me suis amusé dans ma jeunesse à écrire un évaluteur d'expression C/Javascript (en C, pas en C++). Il y a un fichier Calc.c dans l'archive, ça fait 15Ko, donc je vais éviter de faire un copier coller sur ce forum :
 
http://cutilitylib.googlecode.com/ [...] -04-08.zip

Reply

Marsh Posté le 08-04-2008 à 19:06:22    

in_your_phion a écrit :


 
si tu veux avoir l'allure de la dérivée a priori tu n'a pas besoin de calculer la dérivée en symbolique, non ? PAr exemple, si ta fonction est une fonction 1d du type f(x, a,b,c), avec a,b,c des paramètres, pourquoi ne pas juste faire une fonction qui calcule la dérivée avec ( f(x+1,a,b,c) - f(x,a,b,c) )/ 2 ?
 
enfin je dis ca .... c'est peut être pas ce que tu souhaites faire


Le problème n'était pas la dérivation, mais ce n'est pas bête en fait (mais trop tard, j'ai déjà fait ma "super" fonction de dérivation :p).
Par contre, le problème serait le même non ? Il faudrait toujours pouvoir évaluer une fonction (qui serait la fonction de départ dans ce cas).
 
(c'est pas divisé par 1 sinon (enfin par le même delta que dans (x + delta)) ?)
 
 

tpierron a écrit :

Si tu te sens l'âme d'un hacker, je me suis amusé dans ma jeunesse à écrire un évaluteur d'expression C/Javascript (en C, pas en C++). Il y a un fichier Calc.c dans l'archive, ça fait 15Ko, donc je vais éviter de faire un copier coller sur ce forum :
 
http://cutilitylib.googlecode.com/ [...] -04-08.zip


 
Merci beaucoup, je m'en inspirerai :)
 
Enfin, faut juste que j'ai un peu de temps (ce n'est pas le plus urgent pour l'instant :p).
Mais de toute façon j'apprendrai déjà beaucoup en regardant comment tu as fait :jap:


---------------
oui oui
Reply

Marsh Posté le 09-04-2008 à 10:02:17    

pitite question :)
 
Est-ce que ça ne risquerait pas d'être lent d'évaluer la fonction, sachant que je vais sans doute devoir évaluer ces dérivées quelques million de fois et qu'elles sont assez longues (4-5 lignes par fonction dans la console) ?
 
Si oui, serait-il envisageable d'avoir un programme "principale" qui fabriquerait un autre programme et qui le piloterait (même si je ne suis pas encore sûr de voir comment faire) ? Ou est-ce une mauvaise idée ?
 
 
merci :)


---------------
oui oui
Reply

Marsh Posté le 09-04-2008 à 11:17:52    

multi-stage programming, tu génère un source à l'exécution que tu compile sous forme de .so/.dll et tu charge/décharge à la volée.

Reply

Marsh Posté le 09-04-2008 à 13:03:33    

ok merci :)

 

et merci pour le mot clé :)


Message édité par art_dupond le 09-04-2008 à 13:12:42

---------------
oui oui
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed