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

MATLAB Discussion :

Comment resoudre un systeme d'equations polynomiales?


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Comment resoudre un systeme d'equations polynomiales?
    Bonjour,
    je voudrais determiner les coordonnees d'un point qui est l'intersection de deux cercles en 2D(je sais qu'il peut y avoir deux couples solutions et j'en choisirai une). J'ai donc le systeme d'equation suivant:
    eq1=(x-x1)^2+(y-y1)^2-h^2;
    eq2=(x-x2)^2+(y-y2)^2-h^2;
    ou les seules inconnues sont x et y.
    Comment faire pour les avoir et aussi pour faire comprendre a matlab que se sont des nombres?
    De plus dans un graphique comment faire pour afficher la legende d'une ou deux courbes et pas pour les autres?
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Si tu as la Symbolic Toolbox, tu dois pouvoir tout simplement utiliser la fonction solve.

    [EDIT]Et pour la 2ème question qui n'a rien à voir, et bien tu ne mets tout simplement pas de légende là où tu ne veux pas en mettre.

    Si je prends l'exemple donné dans l'aide de LEGEND :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 0:.2:12;
            plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));
            legend('First','Second','Third');
            legend('First','Second','Third','Location','NorthEastOutside')
    Je modifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 0:.2:12;
            plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));
            legend('First');
            legend('First','Location','NorthEastOutside')
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Suite a la question
    Merci pour la premiere reponse> Mais pour la seconde, cela ne fait pas ce que je veux avec Matlab 2008. Par exemple si je trace 4 courbes et que je ne veux afficher une legende que pour la seconde et la troisieme, que dois je faire?
    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    C'est important l'ordre dans lequel tu les traces ?
    Parce que sinon tout simplement tu intervertis pour que la 2 et la 3 deviennent la 1 et la 2 (solution rapide du vendredi soir :aie)
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut J'ai essaye
    Matlab n'est pas très coopératif, en faisant cela, il me met la même couleur de légende pour tous ce que je lui demande (j'ai des courbes bleues, rouges, vertes je veux la légende de la bleue et la rouge et il m'affiche que la couleur bleue pour les deux courbes différentes). Donc je suis un peu perdu.
    Pour ce qui est de la résolution d'équation je lui rentre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    X1=2;
    Y1=3;
    H=5;
    X2=3;
    Y2=6;
    c=solve('(x-X1)^2+(y-Y1)^2-H^2','(x-X2)^2+(y-Y2)^2-H^2','x','y')
    c.x
    c.y
    et il me donne la réponse mais sans avoir remplacé les constantes par leur valeurs et subs n'a pas l'air de fonctionner. Que dois je faire ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 880
    Points
    52 880
    Par défaut
    Une autre possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    figure
    p = plot(1,1,'ro',2,2,'go',3,3,'bo',4,4,'co',5,5,'mo',6,6,'ko')
     
    col  = {'red' 'green' 'blue' 'cyan' 'magenta' 'black'};
     
    idx = randperm(numel(col));
    idx = idx(1:3);
     
    legend(p(idx),col{idx})
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Je viens de tester ton programme dut, mais lorsque je le lance plusieurs fois il me donne des resultats differents pour la legende. Pas de solutions pour mon probleme d'equations ?
    En tout cas merci pour l'aide

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Pour les équations : inspire-toi de ce poste.

    (comme tu le vois cela aurait été mieux de faire 2 messages séparés pour les 2 problèmes différents )
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 880
    Points
    52 880
    Par défaut
    Citation Envoyé par jean-luc-thebert Voir le message
    Je viens de tester ton programme dut, mais lorsque je le lance plusieurs fois il me donne des resultats differents pour la legende.
    Ben c'est normal... c'était le but de ce code...
    Il permet de voir comment relier une courbe à son entrée dans la légende.

    Ici il y a 6 courbes tracées (des points individuels en fait) et seulement 3 entrées dans la légende.

    Le coté aléatoire est donné par la fonction RANDPERM

    Bon on va faire plus basique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    figure
    p = plot(1,1,'ro',2,2,'go',3,3,'bo',4,4,'co',5,5,'mo',6,6,'ko');
     
    col  = {'red' 'green' 'blue' 'cyan' 'magenta' 'black'};
     
    idx = [1 3 4 6];
     
    legend(p(idx),col{idx})
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    figure
    p = plot(1,1,'ro',2,2,'go',3,3,'bo',4,4,'co',5,5,'mo',6,6,'ko');
     
    legend(p([1 3 4 6]), {'red' 'blue' 'cyan' 'black'})
    Il faut bien entendu prendre le temps de lire la documentation de la fonction LEGEND...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Suite de la resolution d'equations
    Merci DUT pour l'histoire de la legende. La prochiane fois je ferais des qustions separees promis
    Pour ce qui est de la resolution de mon systeme, je cherche les coordonnes d'un point qui est l'intersection de deux cercles dont voici les parametres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    X1=2;
    Y1=3;
    H=5;
    X2=3;
    Y2=6;
    Si j'utilise le code que tu m'as fourni:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c=solve(sprintf('(x-%d)^2+(y-%d)^2-%d^2','(x-%d)^2+(y-%d)^2-%d^2',X1,Y1,H,X2,Y2,H);
    J'ai comme reponse:
    ??? c=solve(sprintf('(x-%d)^2+(y-%d)^2-%d^2','(x-%d)^2+(y-%d)^2-%d^2',X1,Y1,H,X2,Y2,H);
    |
    Error: Unbalanced or unexpected parenthesis or bracket.
    Comment faire pour que cela marche avec un systeme d'equation?
    Merci d'avance

  11. #11
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Le message d'erreur est pourtant clair (même sans connaitre l'anglais il y a des traducteurs sur le net...) : tu n'as pas le même nombre de parenthèses ouvrantes que de parenthèses fermantes.
    En bref il te manque une parenthèse avant le ;, et tu dois écrire chaque équation séparément (un SPRINTF par équation)

    Je te conseillerais de construire ta phrase (ton équation) sur une ligne séparée, tu y verras plus clair.

    Et donc pour plusieurs équations tu construis plusieurs "phrases".
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    equa1=sprintf('%dx+%dy',4,5);
    equa2=sprintf('%dx*%dy',2,3);
    c=solve(equa1,equa2,'x','y');
    Note : je n'ai pas testé, je n'ai pas la fonction solve chez moi.
    Règles du Forum

    Adepte de la maïeutique

  12. #12
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Merci a tous
    Je debute en programmation, je suis en master de mecanique et on me demande de faire un projet en utilisant matlab donc je galere pas mal au debut. En tout cas merci pour vos reponses mes deux problemes sont resolus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. resoudre systeme d'equation
    Par boss89 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/10/2012, 02h02
  2. Resoudre un systeme d'equation avec des variables
    Par matt394 dans le forum MATLAB
    Réponses: 4
    Dernier message: 27/07/2007, 04h49
  3. [VS.NET 2005] Comment resoudre installation problematique ?
    Par stailer dans le forum Framework .NET
    Réponses: 1
    Dernier message: 21/12/2005, 02h51
  4. Réponses: 3
    Dernier message: 29/09/2005, 16h43
  5. REsolution d'un systeme d'equation
    Par Dr_GonZO dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/03/2005, 09h38

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