C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

fonctions mathématiques compliquées...

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Nicolas Aunai
Guest





PostPosted: Fri Jan 30, 2004 7:07 pm    Post subject: fonctions mathématiques compliquées... Reply with quote



salut,


dans le but de faire un projet de modélisation physique en c++, j'ai
besoin de me faire une petite biblio de fonctions/objets mathématiques

j'ai notamment besoin de coder tout ce qui est recherche d'un 0 d'une
fonction, résolutions d'équation différentielles etc...

à la base de tout ça se trouve l'expression mathématique a utiliser...

j'aimerai savoir si quelques un d'entre vous ont fait ce genre de truc,
comment "reconnaitre" une fonction passée par un utilisateur ?

faut-il demander une chaine et la parser puis créer des Objets en
conséquence ?

par exemple "3*x^2+2*x" serait reconnu en tant que polynome et il y
aurai création d'un objet "polynome" qui serait facilement manipulable
par la suite...


en revanche pour des expression bcp plus compliquées et courantes en
physique, je sèche complètement exemple :

3*ln(sqrt(x))*exp(-x^4)

ouah rien que ça... c'est assez immonde et j'ai pas vraiment d'idée !


merci d'avance pour vos idées....

--
Nico,
http://astrosurf.com/nicoastro
messenger : [email]nicolas_aunai (AT) hotmail (DOT) com[/email]

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Feb 02, 2004 7:44 am    Post subject: Re: fonctions mathématiques compliquées... Reply with quote



Nicolas Aunai <nicolas.aunai (AT) free (DOT) fr> wrote


[...]
Quote:
j'aimerai savoir si quelques un d'entre vous ont fait ce genre de
truc, comment "reconnaitre" une fonction passée par un utilisateur ?

C'est ce que fait le compilateur, en fin de compte, quand tu lui files
une expression dans ton programme.

Quote:
faut-il demander une chaine et la parser puis créer des Objets en
conséquence ?

C'est la solution classique. (Historiquement, il y a eu d'autres
représentations, mais un arborescence d'objets me semble la solution la
plus appropriée, et la plus répandue, aujourd'hui.)

Quote:
par exemple "3*x^2+2*x" serait reconnu en tant que polynome et il y
aurai création d'un objet "polynome" qui serait facilement manipulable
par la suite...

C'est un peu limité. Les polynomes ne sont qu'un cas particulier.

Quote:
en revanche pour des expression bcp plus compliquées et courantes en
physique, je sèche complètement exemple :

3*ln(sqrt(x))*exp(-x^4)

Une arborescence. Les variables et les constantes constituent les
« feuilles » ; les opérations les vertices intérieur. On aurait donc
quelque chose du genre :

class Node
{
public:
virtual ~Node() {}
virtual double value() const = 0 ;
} ;

class Constant : public Node
{
public:
explicit Constant( double value )
: myValue( value )
{
}
virtual double value() const
{
return myValue ;
}
private:
double myValue ;
} ;

class Variable : public Node ...

mais surtout :

class Plus : public Node
{
public:
Plus( Node const* left, Node const* right )
: myLeft( left )
, myRight( right )
{
}

double value() const
{
return myLeft->value() + myRight->value() ;
}
private:
Node const* myLeft ;
Node const* myRight ;
} ;

etc.

Quote:
ouah rien que ça... c'est assez immonde et j'ai pas vraiment d'idée !

C'est le genre de chose où yacc (ou bison) excelle, avec des règles
comme :

expr : expr '+' expr
{ $$ = new Plus( $1, $3 ) ; }

etc.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.