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 :

[SymPy] Résoudre un très gros système d'équations (24 inconnues)


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 34
    Points : 29
    Points
    29
    Par défaut [SymPy] Résoudre un très gros système d'équations (24 inconnues)
    Bien le bonjour,

    Fraîchement initié à Python, je cherche à résoudre un système de 24 équations à 24 inconnues (rien que ça) à l'aide de la fonction "solve" de la bibliothèque Sympy.
    Le but de l'opération est de déterminer les efforts et moments dans un système en fonction de paramètres (longueurs de certains éléments, masse du système et un angle de rotation entre 2 éléments).

    Voici mon 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
    >>> from math import *
    >>> from sympy import *
    #Définition des paramètres particuliers
    >>> m,g,Stheta,Ctheta,F = symbols('m g Stheta Ctheta F')
    #Définition des paramètres - distances
    >>> XAG,YAG,ZAG,XAB,YAB,ZAB,XAU,YAU,ZAU,XCH,YCH,ZCH,XCB,YCB,ZCB,XAE,YAE,ZAE,XAH,YAH,ZAH,XCE,YCE,ZCE,XCI,YCI,ZCI =symbols('XAG YAG ZAG XAB YAB ZAB XAU YAU ZAU XCH YCH ZCH XCB YCB ZCB XAE YAE ZAE XAH YAH ZAH XCE YCE ZCE XCI YCI ZCI')
    #Définition des variables symboliques - Efforts et moments
    >>> XA51,YA51,ZA51,LA51,MA51,XB31,YB31,LB31,MB31,XH43,YH43,ZH43,XC03,YC03,ZC03,LC03,MC03,YE04,LE04,XI64,YI64,ZI64,LI64,MI64 =symbols('XA51 YA51 ZA51 LA51 MA51 XB31 YB31 LB31 MB31 XH43 YH43 ZH43 XC03 YC03 ZC03 LC03 MC03 YE04 LE04 XI64 YI64 ZI64 LI64 MI64')
    #Création de B, contenant toutes les équations
    >>> B = [XB31+XA51,-m*g-F+YB31+YA51,ZA51,ZAG*m*g-ZAU*F*Ctheta+LB31-ZAB*YB31+LA51,-ZAU*F*Stheta+MB31+ZAB*XB31+MA51,-XAG*m*g+XAU*F*Ctheta+YAU*F*Stheta+XAB*YB31-YAB*XB31,XH43+XC03-XB31,YH43+YC03-YB31,ZH43+ZC03,YCH*ZH43-ZCH*YH43+LC03-LB31+ZCB*YB31,-XCH*ZH43+ZCH*XH43+MC03-MB31-ZCB*XB31,XCH*YH43-YCH*XH43-XCB*YB31+YCB*XB31,-XA51-XH43+XI64,-YA51+YE04-YH43+YI64,-ZA51-ZH43+ZI64,-LA51+LE04-ZAE*YE04-YAH*ZH43+ZAH*YH43+LI64,-MA51+XAH*ZH43-ZAH*XH43+MI64,XAE*YE04-XAH*YH43+YAH*XH43,XC03+XI64,YC03+YE04+YI64,ZC03+ZI64,-LC03-LE04+ZCE*YE04-LI64-YCI*ZI64+ZCI*YI64,-MC03-MI64+XCI*ZI64-ZCI*XI64,-XCE*YE04-XCI*YI64+YCI*XI64]
    #Résolution
    >>> solve(B,[XA51,YA51,ZA51,LA51,MA51,XB31,YB31,LB31,MB31,XH43,YH43,ZH43,XC03,YC03,ZC03,LC03,MC03,YE04,LE04,XI64,YI64,ZI64,LI64,MI64])
    []
    Et voilà, en utilisant solve je n'obtiens qu'un maigre "[]", qui apparaît d'ailleurs après une longue minute d'attente.
    J'ai consulté l'aide de Sympy, je n'y ai rien trouvé de bien concluant.

    J'ai vérifié et revérifié mes équations et n'ai pas trouvé d'erreur.
    Mes questions donc:
    - Quelle peut être mon erreur? Pourquoi est-ce que je n'obtiens pas de résultat?
    - Y aurait-il un moyen autre de résoudre ce système d'équations?

    Voici un exemple de résolutions réussies d'équations (2 inconnues - 2 équations) présentée dans l'aide de Sympy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> x, y, z = symbols('x y z')
    >>> solve([x*y - 7, x + y - 6], [x, y])
    [(-sqrt(2) + 3, sqrt(2) + 3), (sqrt(2) + 3, -sqrt(2) + 3)]
    >>> solve([x - y + 2, x + y - 3], [x, y])
    {y: 5/2, x: 1/2}
    Je vous remercie de l'aide que vous pourrez m'apporter,

    Bien cordialement

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut,

    Alors je n'ai jamais fait de resolution d'équation symbolique avec Sympy, donc je ne pourrais pas te répondre directement. Cependant, je pense que la method employee n'est pas la bonne. La formulation est sacrément sale...

    Est-ce que tu peux poster l'équation générale à résoudre (non développée). Je pense qu'il te faut passer passer par une formulation matricielle et utiliser un module tel que numpy pour résoudre le tout.

    ax+b=y, x et y peuvent être de très grande dimension (des centaines d'inconnues), mais l'équation reste simple à résoudre.

    EDIT
    Si l'équation est linéaire c'est simple. Prenons ton deuxième exemple résolu avec sympy. On a les deux equations suivantes:
    1. x-y+2=0
    2. x+y-3=0

    Ce qui peut se réécrire matriciellement par:
    | 1 -1| | x | | -2 |
    | 1 1 | | y | = | 3 |
    Si on note cette equation sous la forme A.X = B, on a X = A^(-1).B. Avec x=X[0] et y=X[1]

    L'écrire en python est vraiment très simple. Mais peut-être que tu sais très bien tout ça mieux que moi et que le problem ne peut être formuler ainsi.

    Ju

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Salut,

    Tout d'abord merci d'avoir pris le temps de me répondre.

    Je n'ai hélas pas d'équation générale à montrer, les 24 équations dont je dispose étant issus de torseurs statiques.

    Je vais essayer de tout reposer sous forme matricielle suivant ton conseil, ma méthode n'était, comme tu le dis, sûrement pas la bonne. Je débarque un peu en Python et j'ai foncé tête baissée dans la première méthode venue.

    Je tiendrai le forum au courant de l'avancée de mes recherches, ça peut peut-être intéresser d'autres personnes...

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Cela m'étonnerait d'avoir un résultat exploitable avec sympy. Il vaudrait mieux faire du numérique, c'est d'ailleurs l'esprit de Python.
    Pas d'aide par mp.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    La joie des torseurs mécaniques...
    Pour les système tu as la formule générale avec xi s'exprime comme quotient du déterminant de ta matrice à laquelle tu a substituée la colonne i par la colonne de vecteur (les constantes) par le déterminant de ta matrice si celle-ci est inversible, ce qui est le cas en SI si et seulement si ton système est isostatique. Pour avoir 24 équations tu dois avoir une dizaine de pièces je dirais, je doute que ton système soit isostatique.
    Ton système est donc non inversible (d’où le blanc je suppose), tu ne pourras trouver que certaines variables, les autres seront liées entre elle par une équation linéaire. Pour résoudre cela tu vas devoir faire des hypothèses supplémentaires sur ton système en utilisant la RDM. Sinon j'ai personnellement un code qui permet de trouver l'espace des solutions d'un système linéaire à coefficients constants (numériquement). Avec un peu de temps je pense que tu peux l'adapter arriver à créer une petite symbolique adaptée au problème pour résoudre ça comme tu le souhaites !
    Mais marco a raison, je trouve ça un peu inutile de faire ça, concrètement on s'en fiche de la formule générale et à mon avis sur les 24 variables il y en a pleins qui ne t’intéressent pas !! Et v'la le résultat final en plus

Discussions similaires

  1. Système d'équations à deux inconnues
    Par Anakin Skywalker dans le forum Mathématiques
    Réponses: 4
    Dernier message: 27/09/2019, 09h20
  2. Résolution d'un système d'équations à n inconnues
    Par sahoumaa dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 03/11/2012, 12h03
  3. TP:Système d'équation à deux inconnues
    Par tayaa dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 19/11/2010, 16h46
  4. Résoudre un système d'équations différentielles
    Par mostafaziad dans le forum MATLAB
    Réponses: 7
    Dernier message: 06/07/2007, 09h18
  5. Réponses: 1
    Dernier message: 11/01/2007, 09h00

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