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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1714088
art_dupond
je suis neuneu... oui oui !!
Posté le 08-04-2008 à 03:07:05  profilanswer
 

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
mood
Publicité
Posté le 08-04-2008 à 03:07:05  profilanswer
 

n°1714097
Joel F
Real men use unique_ptr
Posté le 08-04-2008 à 07:43:38  profilanswer
 

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

n°1714152
art_dupond
je suis neuneu... oui oui !!
Posté le 08-04-2008 à 10:42:42  profilanswer
 

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
n°1714530
in_your_ph​ion
Posté le 08-04-2008 à 17:06:00  profilanswer
 

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
n°1714570
tpierron
Posté le 08-04-2008 à 18:01:32  profilanswer
 

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

n°1714596
art_dupond
je suis neuneu... oui oui !!
Posté le 08-04-2008 à 19:06:22  profilanswer
 

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
n°1714806
art_dupond
je suis neuneu... oui oui !!
Posté le 09-04-2008 à 10:02:17  profilanswer
 

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
n°1714867
Joel F
Real men use unique_ptr
Posté le 09-04-2008 à 11:17:52  profilanswer
 

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.

n°1714948
art_dupond
je suis neuneu... oui oui !!
Posté le 09-04-2008 à 13:03:33  profilanswer
 

ok merci :)

 

et merci pour le mot clé :)


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

---------------
oui oui

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
variable path et pointage fonctionrécupérer le retour d'une fonction unix
Selectionner une plage de cellule en fonction d'une autre cellule[VB/VBA/VBS] Afficher des valeurs en fonction des données d'un champ
fonction pour lister les fichiers d'un repertoire[PHP] fonction ftp_ pour déplacer un fichier
passage de l'intérieur d'un tableau par référence dans une fonction ?Fonction pour convertir chaine ASCII en caracteres
fonction matcher connue en PHP mais pas en JAVALes fichiers dans une fonction
Plus de sujets relatifs à : Eval() ? Ou solution pour dériver une fonction en symbolique ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR