Eval() ? Ou solution pour dériver une fonction en symbolique ? - C++ - Programmation
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
Marsh Posté le 08-04-2008 à 17:06:00
art_dupond a écrit : Youp
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.
Ou une simplement une autre approche pour le problème ?
|
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
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
Marsh Posté le 08-04-2008 à 19:06:22
in_your_phion a écrit : |
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 ).
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 : |
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 ).
Mais de toute façon j'apprendrai déjà beaucoup en regardant comment tu as fait
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
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.
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
oui je sais, il semblerait que de demander de faire un eval() serait aussi en soi tordu
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 ) ?
Ou une simplement une autre approche pour le problème ?
marchi
Message édité par art_dupond le 08-04-2008 à 03:08:12
---------------
oui oui