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 :

Résolution numérique d'un système non linéaire


Sujet :

MATLAB

  1. #1
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut Résolution numérique d'un système non linéaire
    Bonjour,

    j'ai un système d'équation non linéaire de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x^2+(y+a)^2=b;
    y^2+(x+c)^2=d;
    a, b, c et d sont des réels connus, j'ai essayé de trouver x et y avec fsolve, mais ça me donne un résultat erroné.

    Y'a t-il un autre moyen pour résoudre ce système ?
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    en rouge :
    ce ne serait pas x, plutôt?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Citation Envoyé par magelan Voir le message
    Bonjour,

    en rouge :
    ce ne serait pas x, plutôt?
    Oui, je me suis trompé
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  4. #4
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Je reçois ce message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    No solution found.
     
    fsolve stopped because the relative size of the current step is less than the
    default value of the step size tolerance, but the vector of function values
    is not near zero as measured by the selected value of the function tolerance.
    Pourtant j'ai mis le step size tolerance à 'TolFun',1e-16
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Peux--tu nous donner a, b, c et d?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Citation Envoyé par magelan Voir le message
    Peux--tu nous donner a, b, c et d?
    Ok

    a=c=2
    b=956.5920;
    d=1.9061e+003;
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tes 2 équations sont 2 équations de cercle : le premier de centre (0,2) et de rayon 30.9, le deuxième de centre (2,0) et de rayon 43.6, ces 2 cercles ne se coupent pas, ton système n'a donc pas de solution dans R.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Citation Envoyé par magelan Voir le message
    Tes 2 équations sont 2 équations de cercle : le premier de centre (0,2) et de rayon 30.9, le deuxième de centre (2,0) et de rayon 43.6, ces 2 cercles ne se coupent pas, ton système n'a donc pas de solution dans R.
    Donc, comment faire pour trouver la solution dans C
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Fsolve ne permet pas de trouver des solutions dans C.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Citation Envoyé par magelan Voir le message
    Fsolve ne permet pas de trouver des solutions dans C.
    D'après vous qu'elle est la fonction adéquate à mon problème, j'ai cherché des code de Newton-Raphson, mais j'ai trouvé pour une seul équation pas pour un système d'équations
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    A mon avis, la meilleur méthode, c'est une feuille de papier et un crayon. Comme cela t'a été expliqué dans le forum algorithme, une résolution analytique est possible.


    Sinon, non, je ne connais pas de fonction numérique qui résous un systèmes d'équations dans l'ensemble des complexes.

    La fonction solve de la toolbox calcul symbolique permettrait peut-être de résoudre ce système.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par magelan Voir le message
    Fsolve ne permet pas de trouver des solutions dans C.
    Je ne suis pas tout à fait d'accord, en bidouillant un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [x,fval] = fsolve(@myfun,x0);
     
    function F = myfun(x)
    a=2;
    c=2;
    b=956.5920;
    d=1.9061e+003; 
    F = [abs( ( x(1) +i*x(2) )^2 + ( x(3) +i*x(4) + a)^2 - b );
         abs( ( x(3) +i*x(4) )^2 + ( x(1) +i*x(2) + c)^2  - d)];
    J'ai trouvé une solution vers x = [117.68 115.63 -119.68 115.63] avec son conjugué.

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bien vu , je n'avais pas pensé à cette décomposition.

    Simple curiosité : quel x0 as-tu choisis?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  14. #14
    Invité
    Invité(e)
    Par défaut
    J'ai procécé un peu à tatons, il m'a fallu augmenter les valeurs par défault des options MaxFunEvals et MaxIter pour les obtenir.

  15. #15
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Je ne suis pas tout à fait d'accord, en bidouillant un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [x,fval] = fsolve(@myfun,x0);
     
    function F = myfun(x)
    a=2;
    c=2;
    b=956.5920;
    d=1.9061e+003; 
    F = [abs( ( x(1) +i*x(2) )^2 + ( x(3) +i*x(4) + a)^2 - b );
         abs( ( x(3) +i*x(4) )^2 + ( x(1) +i*x(2) + c)^2  - d)];
    J'ai trouvé une solution vers x = [117.68 115.63 -119.68 115.63] avec son conjugué.
    Oui ça nous donne ce résultat, si je constate que les valeurs de mon vecteur x sont [120 120 -120 120].
    Aussi, j'obtiens un autre résultat si je considère que x n'est pas complexe, égale au même résultat si je le considère complexe, mais il faut que j'initialise mon vecteur x à zéros;
    Heureusement je peux vérifier si le calcul est vrais ou bien non, car j'ai les valeurs expérimentales. (j'affirme que ça colle pas avec ce que j'ai)
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  16. #16
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    X complexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    x0 = zerons(4,1); 
    [x,fval] = fsolve(@myfun,x0);
     
    function F = myfun(x)
    a=2;
    c=2;
    b=956.5920;
    d=1.9061e+003; 
    F = [abs( ( x(1) +i*x(2) )^2 + ( x(3) +i*x(4) + a)^2 - b );
         abs( ( x(3) +i*x(4) )^2 + ( x(1) +i*x(2) + c)^2  - d)];
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle
    non-square systems; using Levenberg-Marquardt algorithm instead. 
    > In fsolve at 324
      In Untitled at 4
     
    No solution found.
     
    fsolve stopped because the last step was ineffective. However, the vector of function
    values is not near zero, as measured by the default value of the function tolerance. 
     
    <stopping criteria details>
     
     
    x =
     
       25.8823
             0
      -27.8396
             0
     
     
    fval =
     
      380.9861
      353.6344
    X non complexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    x0 = zerons(2,1); 
    [x,fval] = fsolve(@myfun,x0);
     
    function F = myfun(x)
    a=2;
    c=2;
    b=956.5920;
    d=1.9061e+003; 
    F = [abs( ( x(1) )^2 + ( x(2)  + a)^2 - b );
         abs( ( x(2)  )^2 + ( x(1)  + c)^2  - d)];
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    No solution found.
     
    fsolve stopped because the last step was ineffective. However, the vector of function
    values is not near zero, as measured by the default value of the function tolerance. 
     
    <stopping criteria details>
     
     
    x =
     
       25.8609
      -27.8609
     
     
    fval =
     
      380.9847
      353.6357
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  17. #17
    Invité
    Invité(e)
    Par défaut
    Pour les valeurs x = [ 25.8823 0 -27.8396 0], il faut faire attention à l'affichage que tu obtiens:
    No solution found.
    
    fsolve stopped because the last step was ineffective. However, the vector of function
    values is not near zero, as measured by the default value of the function tolerance. 
    Autrement dit, fsolve n'a pas trouvé la solution et te retourne juste les valeurs de la dernière itération qu'il a effectué.

    Pour x0 = [120 120 -120 120];, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    options=optimset('Display','iter','MaxFunEvals',30000,'MaxIter',3000);
    [x,fval] = fsolve(@myfun,x0,options)

  18. #18
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Merci pour tout le monde
    grâce à vous je crois qu'on a pu trouvé la solution

    Citation Envoyé par magelan Voir le message
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

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

Discussions similaires

  1. Résolution d'un système non linéaire
    Par raoul2000 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 02/10/2014, 15h25
  2. Résolution d'un système non linéaire -linéaire
    Par soft001 dans le forum Mathématiques
    Réponses: 15
    Dernier message: 04/10/2012, 17h08
  3. [fsolve] résolution système non linéaire
    Par gotenths dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2011, 20h40
  4. Système non linéaire
    Par Hayabusa dans le forum Mathématiques
    Réponses: 5
    Dernier message: 21/11/2010, 23h56
  5. [Débutant] Solution pour un système non linéaire à 3 inconnues
    Par geant02 dans le forum MATLAB
    Réponses: 5
    Dernier message: 10/03/2008, 16h36

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