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 :

rédaction / solution d'un système d'équations non-linéaire avec SYMPY


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 42
    Points : 53
    Points
    53
    Par défaut rédaction / solution d'un système d'équations non-linéaire avec SYMPY
    Bonjour et merci d'avance pour votre attention (dont j'ai bien besoin !)

    Je veux définir analytiquement le plus petit cercle tangent à deux courbes D1 et D2 et passant par un point Pt1 de la courbe D1.
    Les courbes et le point sont connus (continues, dérivables). Les courbes pouvant être des droites, arc de cercle ou d'ellipse...
    Le point Pt2 est un point de la courbe D2 (de pente a2).

    Dans un premier temps, je considère deux droites( on commence doucement )

    Le cercle recherché (de centre x,y) est porté par la perpendiculaire à D1 en Pt1
    La seconde condition étant que la distance du centre du cercle à D1 et D2 est identique...

    On est d'accord jusque là ?
    Je me sers de ce que je connais (c'est à dire pas grand chose ! : ) ainsi que SYMPY et Solve (est-ce bien adapté ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eq1= Eq ((an*x+bn1,y))# équation normale à D1 en Pt1
    avec an la pente de la normale à D1 et bn1 = ypt1-an*xpt1 où xpt1 et ypt2 coordonnées du point Pt1

    Pour ce qui est de la seconde condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eq2= Eq ((y-ypt2-a2*(x-xpt2))/norme_a2-sqrt((x-xpt1)**2+(y-ypt1)**2))
    y - ypt2 -a2*(x-xpt2) / norme_a2 étant la distance du point (x,y) à la droite D2 (produit vectoriel)
    sqrt((x-xpt1)**2+(y-ypt1)**2 étant le rayon du cercle

    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [eq1,eq2]
    solution = solveset([eq1,eq2])
    Mais SYMPY n'aime pas la mise en forme de mon système:
    [CODE[Eq((-3.0303*x + 7.0909, y), 0), 1.4356*(Eq(-(x - 3.0)**2 - (y + 2.0)**2 + (0.66*x + y - 14.64)**2, 0))] is not a valid SymPy expression][/CODE]

    Quelqu'un peut-il me dire comment dois-je présenter ce système ?
    Comment puis-je prendre en compte la valeur absolue d'un produit vectoriel comportant des valeurs symboliques ?
    J'ai déjà utilisé SYMPY pour trouver l'intersection d'une ellipse et d'une droite, ce qui en matière de non-linéarité est semblable à ce pb ... Non ?
    Merci d'avance, il faut vraiment que je parvienne à automatiser ce calcul (y compris pour des cas plus compliqués comme ellipse / ellipse)

  2. #2
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 42
    Points : 53
    Points
    53
    Par défaut modification de la question ...
    Je viens de mettre ma version de SYMPY à jour et les réponses données sont toute autre que ce que j'obtenais ...
    Pas encore ce que je souhaite, mais je pense être sur la voie.

    A mieux y réfléchir, il est peut-être pas si non-linéaire que ça mon système !! ...

    Bref, si quelqu'un peut m'éclairer, je suis tout de même preneur !
    Merci d'avance

  3. #3
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par massaproduxy Voir le message
    Les courbes et le point sont connus (continues, dérivables). Les courbes pouvant être des droites, arc de cercle ou d'ellipse...
    Droite, arc de cercle ou ellipse, ce sont les trois seuls cas que tu veux pouvoir traiter ou bien tu veux pouvoir traiter des courbes de natures quelconques tant qu'elle sont dérivables (et donc à fortiori continue) ?
    - Si ce sont les 3 seuls cas, alors tu devras surement procéder par distinction de cas, car sinon je vois assez mal comment tu vas procédé si tu tiens à une résoltion analytique. Note que ça te fait déjà 9 cas à traiter (3*3).
    - Si tu veux pouvoir traiter avec des formes plus générales alors oublie la résolution analytique, tu ne pourra pas envisager tous les cas possible à la main. Là te faudra un algo d'optimisation qui va estimer la position du cercle minimal. Ou sinon, en reformulant le problème de manière paramétrique il y a peut-être moyen de rester analytique (à voir, ca dépend de la manière dont tu fournis tes courbes en entrée déjà).


    Autrement, peut tu poster un MWE (Minimal Working Example)? C'est un bout de code qui se suffit à lui même. C'est à dire :
    - qu'on peut l'exécuter tel quel, et il fonctionne (dans le sens il ne crash pas, quite à ce qu'il ne fasse pas tout à fait ce que tu veuilles)
    - qui contienne l'ensemble des éléments nécéssaires pour présenter ta problématique
    - qui ne contienne pas plus d'éléments que çeux précédent de sorte à bien cerner le problème. Ca facilitera le travail de toute personne voulant t'aider.

    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 42
    Points : 53
    Points
    53
    Par défaut J'ai avancé .... un peu !
    Merci LG 53,
    Dans un premier temps, droites, arcs de cercles et d'ellipses me suffisent. On pourrait imaginer une suite avec de courbes de Béziers mais ça c'est si je m'ennuie
    En fait,les courbes sont extraites de fichiers .dxf et je veux pouvoir rejoindre des segments par des arc de cercle tangents aux courbes.

    J'ai obtenus (enfin !!) les premiers résultats en utilisant sympy.solvers.solveset.nonlinsolve(system, *symbols) puisque mon systéme n'est effectivement pas linéaire, il a fallut toutefois que je remplace la valeur absolue du produit vectoriel par le signe - (moins) pour obtenir un peu miraculeusement les coordonnées des deux cercles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e2=(-(y-ypt2-a2*x+a2*xpt2))/norme_a2-sqrt((x-xpt1)**2+(y-ypt1)**2)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e2=abs(y-ypt2-a2*x+a2*xpt2)/norme_a2-sqrt((x-xpt1)**2+(y-ypt1)**2)
    En laissant la valeur absolue, j'obtenait une droite paramétrée : solution = {(-0.33*y + 3.34, y)}
    qui est en fait la normale au Pt de contact avec la première droite,

    et si j'écris l'équation sans signe, la solution est vide

    Peut-être quelqu'un saura me dire comment Sympy interprète "abs" , mais je peux imaginer qu'avec du calcul symbolique, ça ne peut pas faire bon ménage...
    Fort de ce résultat, je m'attaque aux cas des cercles, qui ne devrait pas poser trop de problème, puis à celui des ellipses avec changement de repère à la clef (Y'a bien longtemps que je n'avais pas fait des trucs comme ça moi )

    Je vais regarder comme mettre mes lignes de code en ligne comme tu le suggères...
    Merci encore

  5. #5
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Simpy propose aussi sa propre fonction valeur absolue :

    http://docs.sympy.org/latest/modules...lementary.html

    Ceci dit je ne sais pas si ca vient de ca, ni si ca peut résoudre ton problème. Car sans MWE, je ne peux rien tester, donc difficile de mieux t'aider...

Discussions similaires

  1. Solution d'un système d'équations
    Par JadTaki dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 29/01/2015, 10h05
  2. [Débutant] Solution système d'équations avec ODE solver
    Par prog_ dans le forum MATLAB
    Réponses: 0
    Dernier message: 05/11/2010, 03h31
  3. système d'équations avec ln
    Par lulu712 dans le forum Mathématiques
    Réponses: 2
    Dernier message: 26/01/2010, 10h59
  4. la meilleure solution d'un système à 2 équations et 3 inconnues
    Par SmileSoft dans le forum Mathématiques
    Réponses: 3
    Dernier message: 09/01/2010, 16h08
  5. Recherche de solutions entières à un système d'équations
    Par ram-0000 dans le forum Mathématiques
    Réponses: 17
    Dernier message: 04/07/2008, 09h13

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