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 :

Equation non linéaire


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Equation non linéaire
    Bonjour je ne sais pas si je trouverai quelqu'un sur ce site qui puisse m'aider car je souhaite coder sous MATLAB...
    Le titre est plutôt clair je souhaite résoudre un systéme de 4 équations non linéaires. J'ai un bon début de code mais j'ai un message d'erreur que je ne comprends pas du tout...

    Voici le code :

    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
    function F=myfun(x) 
    V1=400000 
    %V2=x(2) 
    %P1=x(1) 
    P2=100000000 
    %Q1=x(4) 
    Q2=100000000 
    R=1.575 
    X=22.275 
    Z=sqrt(R*R+X*X) 
    teta1=0 
    %teta2=x(3) 
    d=atan(R/X) 
    dprime=((pi/2)-d) 
    Y=0.00014361 
     
    F=[(x(1))-(V1*x(2)/Z)*(sin(teta1-(x(3))-dprime))+(V1*V1/Z)*(sin(dprime)); 
    P2-(V1*x(2)/Z)*(sin(x(3)-teta1-dprime))+(x(2)*x(2)/Z)*(sin(dprime)); 
    x(4)-(V1*x(2)/Z)*(cos(teta1-x(3)-dprime))+(V1*V1)*((cos(dprime)/Z)-Y); 
    Q2-(V1*x(2)/Z)*(cos(x(3)-teta1-dprime))+(x(2)*x(2))*((cos(dprime)/Z)-Y)] 
     
     
    x0=[-5;-5;-5;-5] 
    options=optimset('Display','iter'); 
    [x,fval]=fsolve(@myfun,x0,options,V1,P2,Q2,R,X,Z,teta1,d,dprime,Y)
    Et voici le message d'erreur:

    ??? Input argument "x" is undefined. 
    
    Error in ==> myfun at 23 
    F=[(x(1))-(V1*x(2)/Z)*(sin(teta1-(x(3))-dprime))+(V1*V1/Z)*(sin(dprime));
    HELP !!

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut faire attention que l'appel à la fonction fsolve et la définition de ta fonction myfun doivent se faire dans deux fonctions distinctes.
    De la façon dont tu effectues l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [x,fval]=fsolve(@myfun,x0,options,V1,P2,Q2,R,X,Z,teta1,d,dprime,Y)
    Tu dois définir ta fonction et tes différentes variables comme ceci:
    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
    function resolution_equation
    V1=400000 
    %V2=x(2) 
    %P1=x(1) 
    P2=100000000 
    %Q1=x(4) 
    Q2=100000000 
    R=1.575 
    X=22.275 
    Z=sqrt(R*R+X*X) 
    teta1=0 
    %teta2=x(3) 
    d=atan(R/X) 
    dprime=((pi/2)-d) 
    Y=0.00014361 
     
    x0=[-5;-5;-5;-5]; 
    options=optimset('Display','iter'); 
    [x,fval]=fsolve(@myfun,x0,options,V1,P2,Q2,R,X,Z,teta1,d,dprime,Y)
    % ou [x,fval]=fsolve(@(x) myfun(x,V1,P2,Q2,R,X,Z,teta1,d,dprime,Y),x0,options)
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function F=myfun(x,V1,P2,Q2,R,X,Z,teta1,d,dprime,Y) 
     
    F=[(x(1))-(V1*x(2)/Z)*(sin(teta1-(x(3))-dprime))+(V1*V1/Z)*(sin(dprime)); 
    P2-(V1*x(2)/Z)*(sin(x(3)-teta1-dprime))+(x(2)*x(2)/Z)*(sin(dprime)); 
    x(4)-(V1*x(2)/Z)*(cos(teta1-x(3)-dprime))+(V1*V1)*((cos(dprime)/Z)-Y); 
    Q2-(V1*x(2)/Z)*(cos(x(3)-teta1-dprime))+(x(2)*x(2))*((cos(dprime)/Z)-Y)];
    PS: Pense à mettre des ';' à la fin de tes lignes, ce qui empêche l'affichage de la valeur dans la ligne de commande.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci ça marche,

    Puis-je poser une question de plus?

    Peux-tu m'expliquer ce que l'ont doit renseigner dans les valeur de x0.
    Je me rends compte que c'est super important pour la résolution et je n'ai pas compris entièrement son utilité.

    Merci !!

  4. #4
    Invité
    Invité(e)
    Par défaut
    La valeur x0 est le point de départ de la résolution, c'est à partir de celle-ci que l'algorithme commence sa convergence vers une solution. Et selon sa valeur, il se peut qu'il converge vers une "mauvaise" solution (Exemple: minimum local et non global), ou n'en trouve pas du tout.
    Donc, si tu as une idée de la valeur à trouver, il est bon de fixer une valeur x0 approchante.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Juste pour être certains d'avoir bien compris.
    Le premier terme du tableau de x0 je présume qu'il correspond à x(1) et ainsi de suite ?

    Puis-je prendre des valeurs différentes pour chacune de mes inconnues parce que je n'arrive pas à faire en sorte que mon vecteur f(x) soit proche de zéro avec un vecteur de gradient stable.

    Encore merci,

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je dis oui à tes deux propositions x0 correspond en tous points à x, et tu peux très bien lui mettre n'importe quelles valeurs, aussi différentes quelles soient.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ok,
    Mais j'ai l'impression de pas faire converger la résolution...

    Je dois mettre dans les valeurs de x(1) les valeurs les plus proches du résultats comment fait on ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Comme je te l'ai dit, si tu as une idée des valeurs finales rentre des valeurs proches. Mais si tu n'en as aucune, il n'y a pas vraiment de valeurs miracles , essaie avec plusieurs... à tatons

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ton aide.



    Ce forum est hyper réactif !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/05/2015, 09h42
  2. simulation d equation non linéaire
    Par moh-ichi dans le forum Simulink
    Réponses: 4
    Dernier message: 27/07/2014, 11h37
  3. Système d'équations non-linéaires
    Par smolf2 dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/01/2011, 17h03
  4. equation differentielle non linéaire
    Par olfaksentini dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/12/2010, 20h05
  5. Equation non linéaire par Runge-Kutta
    Par sdplam dans le forum Mathématiques
    Réponses: 8
    Dernier message: 28/10/2009, 19h34

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