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 différentielle de second ordre via Euler


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Equation différentielle de second ordre via Euler
    Bonjour, j'aurais voulu savoir si quelqu'un pouvait m'aider quant à mon codage d'une équation différentielle de second ordre décrivant la résonance d'une radio AM entre 500 kHz et 1Mhz.
    Je pense, après l'avoir relu plusieurs fois, que mon code a l'air correct, mais il reste un message d'erreur que je ne parviens pas à résoudre.

    Le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Attempted to access y(2); index out of bounds because numel(y)=1.
     
    Error in ==> onair at 36
               v(comptet+1)=v(comptet)+y(comptet+1)*pas;
    Merci d'avance

    Voici mon 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
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    clear all
    clc
    %équation différentielle à résoudre: V''(t)+V'(t)/RC+V(t)/LC=e'(t)/RC
    %où e(t)=A.sin(w.t) et w=2pi.f
    %
    C=10e-9;                                            %valeur théorique de la capa
    L=10e-4;                                            %valeur théorique de la self
     
    compteR=1;                                          %choix de la valeur pour chaque boucle (idem pour omega et t)
     
    for R=[1000 2000 5000 10000 20000 50000 100000]     %boucle sur R
     
        compteW=1;
     
        for w=2*pi*500000:2*pi*50000:2*pi*1000000      %Boucle sur omega
     
            A=5;                                                %valeur quelconque de l'amplitude de e(t)
            periode=2*pi/w;                                 %définition de la période
            Tobs=15*periode;                                    %intervalle de temps observé
     
            pas=Tobs/3000;                                      %définition du pas
     
            t=0:pas:Tobs;
            e=A*sin(w*t);
            e_prime=A*w*cos(w*t);
     
            v(1)=0;                                             %condition initiale V(0)
            y(1)=0;                                             %condition initiale y(0)
     
            comptet=1;                                                      
     
            for t=pas:pas:Tobs;                                   %boucle sur t
                                                                  %méthode d'euler
                                                                  %explicite
     
               v(comptet+1)=v(comptet)+y(comptet+1)*pas;
               y(comptet+1)= y(comptet)+pas*(-(y(comptet)/R/C)-(v(comptet)/L/C)+e_prime/R/C);
     
               comptet=comptet+1;                                 %changement de valeur avant de refaire la boucle
     
            end
     
            B= max(v);
            C=max(e)
            G(compteR,compteW)=B/C;                                              %définition du gain
     
            compteW=compteW+1;
     
        end
     
        compteR=compteR+1;
     
    end
     
    F=500000:50000:1000000;                              %définition de la fréquence
    R=[1000 2000 5000 10000 20000 50000 100000];         %redéfinition de la boucle sur R
     
    figure(1)
     
    hold on;
     
    for i=1:lenght(R);                                   %boucle pour une courbe balayant les valeurs de R
        plot(F,G(i,:));                                  %Graphe
     
    end
    hold off

  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 828
    Points
    14 828
    Par défaut
    Le problème vient de ce terme :
    Dans la ligne de code qui donne l'erreur, tu n'as défini y que jusqu'à comptet, y(comptet+1) n'existe pas encore puisque tu le définis la ligne d'après...

    Je ne sais pas trop ce que tu fais mais a priori il suffit d'inverser les 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
               y(comptet+1)= y(comptet)+pas*(-(y(comptet)/R/C)-(v(comptet)/L/C)+e_prime/R/C);
               v(comptet+1)=v(comptet)+y(comptet+1)*pas;

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup, cela résoud effectivement ce problème là, me voilà maintenant confronté à un autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
     
    Error in ==> onair at 35
               y(comptet+1)= y(comptet)+pas*(-(y(comptet)/R/C)-(v(comptet)/L/C)+e_prime/R/C);
    Je ne sais pas si c'est l'inversion des lignes qui le crée, ou si c'est juste que le programme n'avait pas encore balayé cette ligne du à l'autre problème...

    Comment puis-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 828
    Points
    14 828
    Par défaut
    Non ce n'est pas l'inversion des lignes, le programme n'avait pas encore pu aller jusque là.

    Le message te dit que tu essayes de mettre un truc de dimension N dans un truc de dimension M.

    Ici en l'occurence y(comptet+1) est un scalaire (dimension 1*1)
    Donc cela signifie que ton calcul à droite du signe = donne quelque chose qui n'est pas un scalaire.

    A toi de regarder les dimensions de chaque variable et de comprendre d'où vient le problème.

Discussions similaires

  1. [Débutant] Equation différentielle de second ordre à coefficients non constants
    Par minkovclub dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/11/2011, 10h58
  2. Equation différentielle de second ordre
    Par glenngrauwels dans le forum MATLAB
    Réponses: 3
    Dernier message: 15/11/2009, 14h55
  3. équation différentielle du second ordre ode23
    Par bibed dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/06/2009, 04h26
  4. Réponses: 2
    Dernier message: 22/11/2007, 15h58
  5. Equation différentielle du second ordre
    Par moustiqu3 dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/05/2007, 10h38

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