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 d'un système d'équations


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut résolution d'un système d'équations
    Bonjour,
    J'ai un message d'erreur qui s'affiche et je ne le comprends pas.
    Il s'agit de résoudre un système de 4 EDO du 1er ordre.

    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
    g = 9.81;           %g s'exprime en m/s2
    M = 10;             %M s'exprime en kg
    m = 5;              %m s'exprime en kg
    l = 1;                %l s'exprime en m
    F = 1;               %F s'exprime en N
    f1 = 'theta2';
    f2 = '-g*((M+m)/(M*l))*theta1-(1/(M*l))*F';
    f3 = 'x2';
    f4 = '-g*(m/M)*theta1+(1/M)*F'; 
     
    %  SOLUTION APPROCHEE (calcul numérique et tracé graphique)
    %  obtenue avec RUNGE KUTTA 4
    %  ========================================================
     
    %  méthode de RUNGE KUTTA 4 (maillage constant h)
    %  --------------------------------------------
    for i = 1:length(h)
        [a,b1,b2,b3,b4] = dm_f_rk4_syst_portique_masse_suspendue(t0,tf,theta10,theta20,x10,x20,h(i),f1,f2,f3,f4);
        subplot(2,2,i); plot(a,b1,'-b',a,b2,'-r',a,b3,'*k',a,b4,'-y');
        title(['rk4 (h=',num2str(h(i)),')']);
        hold on 
    end
    Pour la ligne surlignée en rouge, il s'affiche:
    [a,b1,b2,b3,b4] = dm_f_rk4_syst_portique_masse_suspendue(t0,tf,theta10,theta20,x10,x20,h(i),f1,f2,f3,f4);
    ??? In an assignment A(I) = B, the number of elements in B and
    I must be the same.
    Je ne comprends pas pourquoi il n'y a pas le même nombre d'arguments.
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    Pourrais-tu nous montrer le code associé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dm_f_rk4_syst_portique_masse_suspendue
    ? Je suppose que cette fonction ne renvoie pas 5 arguments, d'où le message d'erreur.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Voici le fichier de la fonction correspondante.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    function [t,theta1,theta2,x1,x2] = dm_f_rk4_syst_portique_masse_suspendue(t0,tf,theta10,theta20,x10,x20,h,f1,f2,f3,f4)
     
    g = 9.81;             %g s'exprime en m/s2
    M = 10;               %M s'exprime en kg
    m = 5;                %m s'exprime en kg
    l = 1;                %l s'exprime en m
    F = 1;                %F s'exprime en N
     
     
    %  Résolution d'un système d'EDO du 1er ordre
    %  par la méthode de RUNGE-KUTTA d'ordre 4
    %  ---------------------------------------
     
     
    %  définition du maillage suivant t
    %  --------------------------------
    mt = t0:h:tf;
     
    %  fonction et dérivée première en t = t0
    %  --------------------------------------
    mtheta1 = theta10; mtheta2 = theta20;
    mx1 = x10; mx2 = x20;
     
    %  méthode de RUNGE-KUTTA d'ordre 4
    %  --------------------------------
    for i = 1:floor((tf-t0)/h)
     
       t = mt(i); theta1 = mtheta1(i); theta2 = mtheta2(i);
       x1 = mx1(i); x2 = mx2(i);
       f1a = eval(f1); f2a = eval(f2);
       f3a = eval(f3); f4a = eval(f4);
     
       t = mt(i)+h/2; theta1 = mtheta1(i)+h*f1a/2; theta2 = mtheta2(i)+h*f2a/2;
       x1 = mx1(i)+h*f3a/2; x2 = mx2+h*f4a/2;
       f1b = eval(f1); f2b = eval(f2);
       f3b= eval (f3); f4b = eval (f4);
     
       theta1 = mtheta1(i)+h*f1b/2; theta2 = mtheta2(i)+h*f2b/2;
       x1 = mx1(i)+h*f3b/2; x2 = mx2(i)+h*f4b/2;
       f1c = eval(f1); f2c = eval(f2);
       f3c = eval (f3); f4c = eval (f4);
     
       t = mt(i+1); theta1 = mtheta1(i)+h*f1c; theta2 = mtheta2(i)+h*f2c;
       x1 = mx1(i)+h*f3c; x2 = mx2(i)+h*f4c;
       f1d = eval(f1); f2d = eval(f2);
       f3d = eval(f3); f4d = eval (f4);
     
       mtheta1(i+1) = mtheta1(i)+h*(f1a+2*f1b+2*f1c+f1d)/6;
       mtheta2(i+1) = mtheta2(i)+h*(f2a+2*f2b+2*f2c+f2d)/6;
       mx1(i+1) = mx1(i)+h*(f3a+2*f3b+2*f3c+f3d)/6;
       mx2(i+1) = mx2(i)+h*(f4a+2*f4b+2*f4c+f4d)/6;
     
    end
     
    t = mt; theta1 = mtheta1; theta2 = mtheta2;x1 = mx1; x2 = mx2;

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

    Ton problème vient des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mtheta1(i+1) = mtheta1(i)+h*(f1a+2*f1b+2*f1c+f1d)/6;
    mtheta2(i+1) = mtheta2(i)+h*(f2a+2*f2b+2*f2c+f2d)/6;
    mx1(i+1) = mx1(i)+h*(f3a+2*f3b+2*f3c+f3d)/6;
    mx2(i+1) = mx2(i)+h*(f4a+2*f4b+2*f4c+f4d)/6;
    Tu trouveras l'explication de cette erreur dans la FAQ, à priori l'un ou plusieurs des fxx (f1a, f1b, etc...) n'est pas un scalaire, mais un vecteur.

    La fonction eval est à proscrire, préfère créer une fonction avec les paramètres en entrée qui changent.

Discussions similaires

  1. Résolution d'un système d'équations
    Par vlksoft dans le forum Excel
    Réponses: 2
    Dernier message: 22/11/2007, 17h46
  2. Résolution d'un système d'équations
    Par jbollagnier dans le forum Mathématiques
    Réponses: 16
    Dernier message: 25/10/2007, 10h49
  3. [Débutant] Résolution d'un système d'équations
    Par RaphTIM dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/05/2007, 15h42
  4. Réponses: 1
    Dernier message: 14/02/2007, 11h12
  5. Résolution d'un système d'équations
    Par JeaJeanne dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/12/2006, 10h08

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