gestionnaire d'expressions mathématiques

gestionnaire d'expressions mathématiques - Java - Programmation

Marsh Posté le 18-11-2007 à 19:09:07    

Bonjour,
je dois créer un interpréteur simplifié d’expressions symboliques mathématiques.
Par exemple si l'utilisateur tape Deriv(4*Ln(x)) alors le programme retourne 4/x ou;  Somme(1+ ... + n) Rép. : n*(n+1)/2; Factor(a*b + a*c) Rép. : a*(b+c)
où a, b, c, ..., n, ..., x, y et z sont des variables symboliques autorisées.
 
Je ne vois pas du tout comment faire donc j'aurais besoin d'un peu d'aide au moins pour m'aiguiller au départ car je suis vraiment coincé la!
Merci d'avance

Reply

Marsh Posté le 18-11-2007 à 19:09:07   

Reply

Marsh Posté le 30-11-2007 à 15:11:43    

Les programmes ne sont généralement pas capables de manipuler des expressions mathématiques comme les humains les écrivent.
 
Il faut donc passer par une représentation interne de l'expression.
La structure la plus classique est la structure d'arbre, parce que les expressions mathématiques sont composés d'opérateurs (+, -, *, /, ...), unaires, binaires ou n-aires (cad toujours à 1, 2 ou n arguments ; exemple : l'opérateur somme, c'est le + binaire). La traduction sous forme d'arbre est donc assez naturelle (attention aux parenthèses au moment de "traduire" l'expression en l'arbre équivalent !).
 
Ainsi : ln(x) + 3 * 5 peut se représenter par l'arbre suivant :
      *
     / \
    +   5
   / \
  ln  3
 /
x
 
Gros avantages des arbres :
 - les priorités entre opérateurs s'expriment naturellement (par exemple, le fait que la multiplication s'applique toujours avant l'addition), puisque pour évaluer l'expression, on applique récursivement les opérateurs du haut de l'arbre (racine de l'arbre) jusqu'en bas (feuilles de l'arbre) ; et il n'y a plus de besoin de parenthèses
 - une manipulation de l'expression revient à manipuler un noeud, puis à refaire une manipulation similaire à chaque sous-noeud. Par exemple, pour dériver l'expression ci-dessus, on commence par le noeud racine (opérateur *), et on applique la règle (u*v)' = u' * v + u * v'. Donc on fabrique une nouvelle expression avec les expressions :
    +
   / \
  ln  3
 /
x
et  
5
et leurs dérivées, que l'on calcule grâce à la récursivité.
 
Autre exemple, pour simplifier une expression (inévitable après une dérivation formelle), on applique des règles simples à chaque noeud de l'arbre. Exemple 0 * n'importe quel arbre = 0, 1 * n'importe quel arbre = cet arbre, 0 + n'importe quel arbre = cet arbre, n'importe quel arbre / 1 = cet arbre, etc.

Reply

Marsh Posté le 06-12-2007 à 14:23:16    

Merci pour ces infos qui m'aident. Mais je rencontre une petite difficultés, j'arrive très bien a rentrer des expressions du type a*(b+c) dans un arbre. Mais je n'arrive pas à introduire les ln, exp, cos, sin...

Reply

Sujets relatifs:

Leave a Replay

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