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 :

[ode45] equation non linéaire résolution


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut [ode45] equation non linéaire résolution
    Bonjour a toutes et a tous,
    j'éssaye d'avoir la résolution d'un systéme d'equation non linaire avec 5 équation en utilisant ODE45. la fonction et la suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function dx=systfun(t,x)
     
     
    dx(1)=((g*A)/x(4))*[x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2)];
    dx(2)=((g*A)/(L_CFco-x(4)))*[(ps/(rho*g))-x(3)+(1/(2*g*A^2))-(alpha*(L_CFco-x(4)))*x(2)^2];
    dx(3)= ((-a_CF)^2/(g*a*x(4)))*[x(1)-x(2)+x(5)*sqrt(x(3)-Zi-(po/(rho*g)))]
    dx(4)=0;
    dx(5)=0;
     
    [ti,xi]= ode45('systfun',[0 4],[20 20  0 0 0]):
    plot(ti,xi,(:,1);'r')
    mais des que je lance il m'affiche un message d'erreur
    Expression or statement is incomplete or incorrect.
    auriez vous une idée du problème merci

  2. #2
    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 : 53 166
    Points
    53 166
    Par défaut
    La syntaxe de la ligne suivante est incorrecte :

    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)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    méme si je supprime la commande plot! le message reste tjrs

  4. #4
    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 : 53 166
    Points
    53 166
    Par défaut
    Effectivement, il y a aussi une erreur de syntaxe à la fin de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ti,xi]= ode45('systfun',[0 4],[20 20  0 0 0]):
    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)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    j'ai redéfini ma fonction en deux partie:
    1- déclaration de la fonction
    2- faire recall pour résolution
    comme suite :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function dx=leakfun(t,x)
     
    global g A Zmax_CE alpha L_CFco p0 rho ps Zi a_CF;
     
    dx1=((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2));
    dx2=((g*A)/(L_CFco-x(4)))*((ps/(rho*g))-x(3)+(1/(2*g*A^2))-(alpha*(L_CFco-x(4)))*x(2)^2);
    dx3=((-a_CF)^2/(g*A*x(4)))*(x(1)-x(2)+x(5)*sqrt(x(3)-Zi-(p0/(rho*g))));
    dx4=0;
    dx5=0;
    dx = [dx1 dx2 dx3 dx4 dx5];
     
    end
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ti,xi]= ode45('leakfun',[0 4],[20 20  0 0 0]);

    ça me lance toujours des erreurs:

    dans la 1er partie:
    >> leakfun
    Not enough input arguments.
    
    Error in leakfun (line 5)
    dx1=((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2)); 
    dans la 2eme:
    Error using nargin
    leakfun is a script.
    
    Error in odearguments (line 60)
        if (nargin(ode) == 2)
    
    Error in ode45 (line 115)
        odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
    
    Error in leakfun (line 11)
    [ti,xi]= ode45('leakfun',[0 4],[20 20  0 0 0]);

    JE COMPRENDS PAS

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut equation non linéaire résolution
    Bonjour,
    Peux-tu nous donner les valeurs des variables en global ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Bonjour Phryte
    Bonjour phryte, je te remercie pour ta réponse;


    voici mes valeurs de variable:

    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
    27
    Z_AM_max = 246.5; % cote maxi de la retenue (mNGF)
    Zi=60.7;
    Zs=0;
     
    D_CFco = 3.4; % diamètre (m)
    D_F=0.1; %diamétre fuite
    L_CFco = 84; % longueur (m)
    K_CFco = 3.2e-4; % coefficient de pertes de charge (m/(m3/s)²)
    A=pi*((D_CFco/2)^2); % section de la conduite 
    rho=1000; % la masse volumique de l'eau (kg.m^3)
    p=20.4; % pression (bar)
     
    lambda=0.01; % Coefficient de perte de charge  
    Le=58.8;
    g=9.8;
    ps=5,9389;
    p0=1,01325;
    alpha=lambda/(2*g*(A^2)*D_CFco);
    Af=(pi*((D_F/2)^2))/4;
    lamdaf=1/(2*g*(Af^2));
    he=Z_AM_max+(p/rho*g);
    % Rameau
    D_CFra = 2.3; % diamètre (m)
    L_CFra = 42; % longueur (m)
    K_CFra = 9.8e-4; % coefficient de pertes de charge (m/(m3/s)²)
    % Caractéristique élastique
    a_CF = 1000; % célérité des ondes (m/s)
    Ma fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function dx=leakfun(t,x)
     
     
    global g A Zmax_CE alpha L_CFco p0 rho ps Zi a_CF;
     
    dx1=((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2));
    dx2=((g*A)/(L_CFco-x(4)))*((ps/(rho*g))-x(3)+(1/(2*g*A^2))-(alpha*(L_CFco-x(4)))*x(2)^2);
    dx3= ((-a_CF)^2/(g*A*x(4)))*(x(1)-x(2)+x(5)*sqrt(x(3)-Zi-(p0/(rho*g))));
    dx4=0;
    dx5=0;
     
    dx = [dx1 dx2 dx3 dx4 dx5];
     
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ti,xi]= ode45(leakfun,[0 10],[20 20  0 0 0]);
    ça fait une semaine que je bloc et je n'arrive pas a avancé

    Merci

  8. #8
    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 : 53 166
    Points
    53 166
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ti,xi] = ode45(@leakfun, [0 10], [20 20  0 0 0]);
    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)

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    je pense que les erreurs sont causé par les devisions par 0 car les conditions initiales [20 20 0 0 0] et dans les fonctions il ya des divisions par x4=0

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,

    Zmax_CE n'est pas initialisé.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    bonjour,
    j'ai du ne pas bien coller
    Zmax_CE = 2.475900000000000e+02

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour
    erreur (virgule) :
    ps=5,9389;
    p0=1,01325;

    Il ne faut pas initialiser à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ti,xi]= ode45('leakfun',[0 10],[20 20 0 1e-6 0]);

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Bonjour phryte
    rebonjour phryte,
    je sais pas si ça marche pour toi,
    mais sa bloque toujours pour moi, j'ai redéfinie les paramétrés init [20 20 0 1e-6 0] ,tjrs rien :'(

  14. #14
    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 : 53 166
    Points
    53 166
    Par défaut
    Quel est le message d'erreur maintenant ?
    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)

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    méme chose !!

    Not enough input arguments.
    
    Error in test (line 4)
    dx1=((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function dx=test(t,x)
    parametre2;
     
    dx1=((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2));
    dx2=((g*A)/(L_CFco-x(4)))*((ps/(rho*g))-x(3)+(1/(2*g*A^2))-(alpha*(L_CFco-x(4)))*x(2)^2);
    dx3= ((-a_CF)^2/(g*A*x(4)))*(x(1)-x(2)+x(5)*sqrt(x(3)-Zi-(p0/(rho*g))));
    dx4=0;
    dx5=0;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ti,xi]= ode45('test',[0 10],[20 20 0 1e-6 0]);
    plot(ti,xi(:,1),'r')

  16. #16
    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 : 53 166
    Points
    53 166
    Par défaut
    Crée un fichier leakfun.m avec ce contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function dx = leakfun(t,x)
     
    global g A Zmax_CE alpha L_CFco p0 rho ps Zi a_CF
     
    dx(1,1) = ((g*A)/x(4))*(x(3)-Zmax_CE-(p0/(rho*g))-(alpha*x(4)*x(1)^2));
    dx(2,1) = ((g*A)/(L_CFco-x(4)))*((ps/(rho*g))-x(3)+(1/(2*g*A^2))-(alpha*(L_CFco-x(4)))*x(2)^2);
    dx(3,1) = ((-a_CF)^2/(g*A*x(4)))*(x(1)-x(2)+x(5)*sqrt(x(3)-Zi-(p0/(rho*g))));
    dx(4,1) = 0;
    dx(5,1) = 0;
    Crée un autre fichier test.m avec ce contenu :

    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
    27
    28
    29
    30
    31
    32
    global g A Zmax_CE alpha L_CFco p0 rho ps Zi a_CF
     
    Zmax_CE = 2.475900000000000e+02;
    Z_AM_max = 246.5; % cote maxi de la retenue (mNGF)
    Zi = 60.7;
    Zs = 0;
     
    D_CFco = 3.4; % diamètre (m)
    D_F = 0.1; %diamétre fuite
    L_CFco = 84; % longueur (m)
    K_CFco = 3.2e-4; % coefficient de pertes de charge (m/(m3/s)²)
    A = pi*((D_CFco/2)^2); % section de la conduite
    rho = 1000; % la masse volumique de l'eau (kg.m^3)
    p = 20.4; % pression (bar)
     
    lambda = 0.01; % Coefficient de perte de charge
    Le = 58.8;
    g = 9.8;
    ps =5.9389;
    p0 = 1.01325;
    alpha = lambda/(2*g*(A^2)*D_CFco);
    Af = (pi*((D_F/2)^2))/4;
    lamdaf = 1/(2*g*(Af^2));
    he = Z_AM_max+(p/rho*g);
    % Rameau
    D_CFra = 2.3; % diamètre (m)
    L_CFra = 42; % longueur (m)
    K_CFra = 9.8e-4; % coefficient de pertes de charge (m/(m3/s)²)
    % Caractéristique élastique
    a_CF = 1000; % célérité des ondes (m/s)
     
    [ti,xi] = ode45(@leakfun, [0 10], [20 20 0 1e-6 0]);
    Exécute ce fichier test.m
    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)

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci beaucouppppp jerom briot ça fonctionn, j'ai obtenu un graph malgré que c'est pas le résultat attendu.
    JE VOUS REMERCIE TOUSSSS INFINIMENT

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Transfert simulink
    Bonjour,
    SVP quelqu'un de vous aurez une idée pour faire un call de la résolution de ma fonction ode45 précédente sur Simulink dans le but d'avoir une visualisation avec scop.
    Merci

Discussions similaires

  1. simulation d equation non linéaire
    Par moh-ichi dans le forum Simulink
    Réponses: 4
    Dernier message: 27/07/2014, 11h37
  2. Equation non linéaire
    Par Heyheyman dans le forum MATLAB
    Réponses: 8
    Dernier message: 14/06/2011, 07h58
  3. Equation non linéaire par Runge-Kutta
    Par sdplam dans le forum Mathématiques
    Réponses: 8
    Dernier message: 28/10/2009, 19h34
  4. Système équations non linéaires, résolution ?
    Par smercier2 dans le forum Mathématiques
    Réponses: 23
    Dernier message: 23/10/2007, 04h00
  5. Réponses: 1
    Dernier message: 14/02/2007, 11h12

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