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

Calcul scientifique Python Discussion :

Simplification équation sympy (un c'tit carré dans une racine)


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club Avatar de collins_
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Par défaut Simplification équation sympy (un c'tit carré dans une racine)
    Bonjour à tous,
    Je galère sur un truc tout simple comment simplifier une pauvre expression sous sympy : un carré dans une racine
    J'ai simplifié l'exemple (c'est des trucs qui se simplifient pas dans une calcul d'équa diff...), et même en stipulant bien a et b positif , qeuchi
    J'ai tenté plein de combo factor, powsimp... reqeuchi

    Le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import sympy as sp
    from IPython.display import *
    sp.init_printing(use_latex=True)
    from sympy import factor,powsimp,sqrt,symbols,exp,expand_power_exp
    a,b,c = symbols('a,b,c',Positive=True)
    abc=sqrt(a*a+4*a*b+4*b*b)  #ben vi , c'est tout bête ça vaut a+2b :)
    display(abc)
    state1=factor(abc)
    display(state1)
    state2=powsimp(state1) 
    #state2=simplify(state1)
    #state2=expand_power_exp(state1)
    display(state2)
    Merci d'avance pour celui qui a la solus
    Images attachées Images attachées  

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Salut

    cf :
    https://docs.sympy.org/latest/tutori...ification.html

    Sympy a plein de fonctionnalité différente. On ne sait pas toujours bien laquelle il nous faut utiliser. Le lien ci dessus en donne une bonne idée si on prend le temps de regarder chaque fonction.

    NB : Une racine carrée est une puissance (1/2).

    Ce que j'ai trouvé qui produit le résultat voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    powdenest(factor(abc), force=True)
    (pow = puissance, nested = imbriqué, donc powdenest = désimbrication de puissance)
    Sans le force = True, ca ne factorise pas. Probablement parce que simpy peut travailler avec des complexes, et donc que le carré sous la racine pourrait très bien être négatif. Donc la simplification n'est possible que sous certaines hypothèses (que l'on autorise à faire avec le force=True)

  3. #3
    Candidat au Club Avatar de collins_
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Par défaut
    Merci pour ta rapidité,ça marche dans un cas simple mais quand c'est plongé au milieu d'exponentielle sympy s'y perd (ça marche à moitié tout ce qui est dans les racines est censé se simplifier à chaque fois ) :
    Nom : Annotation 2020-08-04 092050.jpg
Affichages : 2285
Taille : 108,1 Ko

    Au niveau du "domaine" de calcul, j'ai pas mal tenté de truc et bien précisé que c'est des nombres positifs et pas des complexes (Γ,Γs= symbols('Γ,Γs',positive=True) ).

    En fait j'ai l'impression que sympy prend pas très bien en compte les domaines de validités qu'on lui donne : j'ai tenté une limite a t->oo sur mes sommes d'exponentielles (calcul immédiat de tête) et à chaque fois il me demande le signe du contenu de l'exponentielle (ça plante), j'ai pas trouvé de moyen pour lui filer l'info...
    J'ai un cas simple pour montrer le souci : lim(x**n) pour x->oo plante avec "NotImplementedError: Result depends on the sign of sign(log(x))" en retour, aucun moyen de lui donner le domaine de calcul...
    Nom : Annotation 2020-08-04 093155.jpg
Affichages : 3133
Taille : 54,9 Ko

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par collins_ Voir le message
    Merci pour ta rapidité,ça marche dans un cas simple mais quand c'est plongé au milieu d'exponentielle sympy s'y perd (ça marche à moitié tout ce qui est dans les racines est censé se simplifier à chaque fois ) :
    Oui normal. Le calcul symbolique est une science complexe. Les leviers de simplifications sont nombreux (voire même infini. Par exemple une simplification peut dépendre d'un changement de variable, sauf que sans intuition, difficile de trouver le bon puisqu'il existe une infinité de changement de variable), d'où le fait qu'il soit difficile d'implémenter des algorithmes qui soit "tout terrain", c'est à dire qui aboutissent à la meilleure simplification dans tous les cas. Voilà pourquoi, sympy n'est pas toujours capable de simplifier une écriture. Et cette incapacité augmente bien sûr lorsque le calcul a une forme compliquée.

    J'en ai moi même fait l'expérience avec un autre logiciel, bien plus puissant : Maple. Et bien même constat : il y a des choses qu'on peut simplifier à la main, que le logiciel ne parvient pas à simplifier.

    La parade peut parfois si situer dans une reformulation du problème. Dans ton cas par exemple si tu sais que T²+4*T*Ts (ou qqch comme ca) doit apparaitre à plusieurs reprises, alors peut être que les variables du problème de départ peuvent être changées. Donc faire le changement de variable, pour mettre évidence les variables communes est une piste pour avoir le résultat voulu. Faut il encore trouver le bon, et pouvoir exprimer l'ensemble des variables du systèmes dans ce nouveau jeu de variable, qui ne doit pas contenir plus de variables qu'il n'y en a au départ (sinon aucune chance d'avoir une simplification).

  5. #5
    Candidat au Club Avatar de collins_
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Par défaut
    Merci encore pour tes judicieuse remarques, j'étais effectivement sur la piste de faire manuellement le changement avec un coup de MonEnormeEquation.subs(lemderdierachanger,letrucsimple).
    Et puis ça me rassure, j'ai des collègues qui ne jurent que par mathematica ou matlab (qui coutent un bras) et finalement on retrouve les mêmes soucis...
    Pour finir, si qq'un as une solution sur la manière que sympy prenne en compte le domaine de valeurs x>0 dans le cas ultrasimple du calcul limit(x**n, n, oo) ça me donnerais une bonne piste pour mes calculs d'equa diff et de limites (après le changement de variable qui va bien)

Discussions similaires

  1. [Débutant] Colorer un carré dans une picture box
    Par mattmax dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/06/2018, 11h47
  2. Trouver position carré dans une image
    Par ViveLesQuads dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 22/01/2010, 09h28
  3. placer des carrés dans une grille (mur de briques)
    Par ben53 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 08/09/2009, 23h07
  4. simuler dans une picturebox l'empilement de 1000 carrés successifs
    Par laurenjiongo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/11/2006, 02h52
  5. Integrer un carré dans un RichEdit
    Par Harry dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/09/2004, 15h02

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