IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

simplifier une expression math ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut simplifier une expression math ?
    bonjours
    j'ais un probléme avec mon projet qui consiste à :

    - simplifier une expression math ex
    si j'ais cette expression 2*x*2 je veut qu'élle devient 4*x.

    svp existe t'il un composant ou des bibliothéque qui me permet de le faire

    info: j'ais commancé à écrire mes propre algo mais je manque de temps !

    alors aidez moi svp merci

  2. #2
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut
    onsultes l'inité "Math" qui regroupe un ensemble de rouitnes de calculs mathématiques. Tu trouvera peut être ton bonheur.

  3. #3
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 567
    Par défaut
    Citation Envoyé par kanzarih
    bonjours
    j'ais un probléme avec mon projet qui consiste à :

    - simplifier une expression math ex
    si j'ais cette expression 2*x*2 je veut qu'élle devient 4*x.

    svp existe t'il un composant ou des bibliothéque qui me permet de le faire

    info: j'ais commancé à écrire mes propre algo mais je manque de temps !

    alors aidez moi svp merci
    Ce type de travail n'est pas trivial. Il n'est pas possible de te dépanner si tu ne fournis pas les structures de données que tu as conçues pour représenter tes expressions (arbre binaires par exemple).

    rem : je ne suis pas un spécialiste de ce genre de travail.

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Par défaut
    Bonjour,

    Ce que tu veux faire, c'est du calcul formel. Une introduction sympa sur :

    http://home.nordnet.fr/~ogontier/OLIVIER/FORMEL/FORMEL.HTM

    Le livre de Levine mentionné en introduction semble malheureusement épuisé. Si tu habites près de paris, tente ta chance là :

    http://franck.pissotte.perso.cegetel.../jecherche.htm

    Si je trouve autre chose, je le posterai et réciproquement s.t.p. le sujet m'intéresse aussi !!!

    a+

  5. #5
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    J'ai un peu buché la dessus il y a des années, et effectivement ce n'est pas trivial.
    Je te donne la méthode que j'avais élaborée, qui peut être une piste ou non, à toi de voir.

    1. A l'origine c'est un analyseur syntaxique. 2 * x * 3 est parsé et stocké sous la forme d'un arbre: (la visu est pas évidente ici...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (op,*)
      (cte,2)
      (op,*)
        (var,x)
        (cte,3)
    Chaque couple est un noeud de l'arbre (type et data) et possède sa méthode 'Calcule'.
    Pour obtenir le résultat, il suffit donc de fait noeud_racine.calcule.
    - si le type est *, la méthode 'calcule' appel la méthode 'Calcule' de ses 2 enfants et en multiplie le résultat.
    - si le type est une constante, la méthode 'Calcule' renvoie la valeur de la cte, etc...

    2. J'ai implémenté la méthode 'Dérive' également, qui génère un 2eme arbre à partir du 1er. --> l'arbre de la fonction dérivée est correcte, mais la méthode dérive ne fait aucune simplification.

    3. je me suis donc penché sur la simplification, dans une expression sous forme d'arbre.
    Dans ce cas, pour simplifier l'expression 2 * x * 3 en 6 * x, on s'apercoit dans le parcours transversale de l'arbre, qu'entre le couple (cte,2) et le couple (cte, 3), le chemin ne passe que par des couples (op,*), donc que des multiplications.
    --> il donc possible d'en déduire formellement un nouvel arbre, en supprimant une des 2 constantes, et en générant un nouvel arbre.
    mais attention de gérer correctement les suppressions de couple, l'op '*' doit toujours avoir 2 enfants...

    on peut également gérer le divisé, et la puissance dans les parcours, pour simplifier l'arbre, et donc l'expression.
    La difficulté de simplification dans cette forme, est donc de faire plusieurs parcours dans l'arbre (toutes les combinaisons dans l'idéal, mais ce n'est surement par obligatoire), de détecter les chemins 'simplifiables' (ex, 2 ctes sont reliées par des noeuds '*'), et d'en traiter le résultat (modifier l'abre en conséquence).


    Bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Par défaut
    IL me semble que la notation la plus simple à implementer etait la préfixée (en notation inverse polonaise comme sur les calculette HP d'antan).
    Mais c'est un vieux souvenir d'algo...
    BOn code

  7. #7
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut
    en fait mon prob n'est pas de resoudre le prob de 2*x*2 = 4*x mais mon travail consiste à crée une application qui minimise une fonction à trois variable exemple : f(x,y,z) = x^2+2xy+3y^2+2yz selon ces étapes :

    1- determiner la matrice hétiénne H
    2-voir si H est symétrique positive
    3-determiner la matrice Gnew
    4-voir si le détérminant de Gnew est >0
    5- si c'est le cas appliquer l'algo de FIBUNACCI sur la fonction f(x)

    c'est une casse tete mais j'ais réussit les etapes 1,2,3,4 il ne me réste que la sinquiéme alors existe t'il un biblio simple qui me permer d'évaluer une fonction f(x) ex : f(x)=2x alors si je fixe x à 3 le résulta sera 6

    merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2012, 14h36
  2. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22
  3. [String] rendre une expression reguliere insensible à la case
    Par chimical dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/05/2004, 11h38
  4. "Différence de type dans une expression" Tquery
    Par Hakim dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2004, 00h22
  5. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo