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 :

Probleme matrice matlab


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Points : 41
    Points
    41
    Par défaut Probleme matrice matlab
    Bonjour à tous !

    J'écris un programme qui ouvre plusieurs fichiers de données contenant des accélérations. En fait, j'ouvre un fichier, j'extrait le vecteur temps et el vecteurs temps et je subplot toute mes courbes (accélération en fonciton du temps) dans la mm figures.

    Cependant voici mon soucis : matlab ne veut pas stocké mes vecteurs temps et accélération dans une matrice, 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
     
    close all
    clear all
     
    format long
     
     
    D=dir(':data\EQS*')
    ND=length(D);
    datadase=':prog_sort\data\';
     
    for n=1:ND
        %%Ouverture de tous les fichier EQS
     
        foldr=D(n).name;
     
        % Retrieving folder and file information
        foldername = sprintf('%s\\%s',datadase,foldr);
        v(n)=load(foldername);
     
        disp(sprintf('Reading folder %s',foldername));
     
     
        s(n)=length(v(n).EQS.Station);
     
            for i=1:s(n)
                vect_time=v(n).EQS.Station(i).Comp(1).Raw.Dt*(0:v(n).EQS.Station(i).Comp(1).Raw.Nt-1);
                tmax(i)=vect_time(end);
            end    
     
            clear vect_time
     
            for i=1:s(n)
            %Extraction des composantes
            vect_time=v(n).EQS.Station(i).Comp(1).Raw.Dt*(0:v(n).EQS.Station(i).Comp(1).Raw.Nt-1);
           acc_X(i)=v(n).EQS.Station(i).Comp(1).Raw.Acc; %extraction composante X
            acc_Y(i)=v(n).EQS.Station(i).Comp(2).Raw.Acc; %extraction composante Y
            acc_Z(i)=v(n).EQS.Station(i).Comp(3).Raw.Acc; %extraction composante Z
     
     
     
            %plot des accélérations
            figure(n)
     
            subplot(s(n),1,i)
            plot(vect_time,x1)
     
            xlim([0 min(tmax)])
            ax=axis
            axis tight
     
     
            end
     
     
           delta=t0-minimum;
     
     
     
    end
    et voici mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    In an assignment  A(I) = B, the number of elements in B and I must be
    the same.
     
    Error in essai (line 40)
            acc_X(i)=v(n).EQS.Station(i).Comp(1).Raw.Acc; %extraction
            composante X
    si je tape whos:

    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
     
     
      Name                 Size                Bytes  Class     Attributes
     
      AllStatsMatrix       0x0                     0  double    global    
      AllTimesMatrix       0x0                     0  double    global    
      D                   14x1                  9798  struct              
      ISPRINT              0x0                     0  double    global    
      ND                   1x1                     8  double              
      NR                   0x0                     0  double    global    
      WHICH_DATASET        0x0                     0  double    global    
      datadase             1x53                  106  char                
      foldername           1x82                  164  char                
      foldr                1x28                   56  char                
      i                    1x1                     8  double              
      n                    1x1                     8  double              
      outfldr              0x0                     0  double    global    
      s                    1x1                     8  double              
      tmax                 1x11                   88  double              
      v                    1x1               3412790  struct              
      vect_time            1x9494              75952  double              
      x1                   0x0                     0  double

  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
    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 du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Points : 41
    Points
    41
    Par défaut
    oui je sais bien mais bon voila ce que cela donne avec whose :


    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
     
     
    for n=1:ND
     
        %%Loading of each EQS structure
        foldr=D(n).name;
        foldername = sprintf('%s\\%s',datadase,foldr);
        v(n)=load(foldername);
        disp(sprintf('Reading folder %s',foldername));
     
        s(n)=length(v(n).EQS.Station);%number of station for event number n
     
     
         for i=1:s(n)
            %%Extraction of initial time for all Station and each EQS file
            h=v(n).EQS.Station(i).Comp(1).Raw.Dt*(0:v(n).EQS.Station(i).Comp(1).Raw.Nt-1);
            h=h';
            vect_time(i)=h;
         end           
        end
    même erreur et pourtant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >> whos h
      Name          Size             Bytes  Class     Attributes
     
      h         46641x1             373128  double              
     
    >> whos vect_time
      Name               Size             Bytes  Class     Attributes
     
      vect_time      46641x1             373128  double
    donc je comprend pas trop

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

    Et que vaut i dans l'histoire ?
    C'est un scalaire : donc vect_time(i) ne représente qu'une seule valeur, et tu veux en mettre 46641 dedans.
    Donc h(i) à la rigueur, mais sûrement pas h tout entier.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Points : 41
    Points
    41
    Par défaut
    Alors en fait avec la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:s(n)
    v(n).EQS.Station(i).Comp(1).Raw.Dt*0:v(n).EQS.Station(i).Comp(1).Raw.Nt-1);
    end
    je récupère un vecteur temps pour chaques i.

    En fait ce que je veux faire c'est créer une matrice qui contient tous mes vecteurs temps, ou avoir accés à tous mes vecteurs (car ils n'ont pas tous la même taille).

    Je sais pas trop comment m'y prendre car je n'arrive pas à avoir accés à tous ses vecteurs en même temps

  6. #6
    Invité
    Invité(e)
    Par défaut
    Si tu souhaites récupérer chaque h entier, et que ceux-ci n'ont pas tous la même taille, alors c'est un tableau de cellules dont tu as besoin.

    Voir aussi ce sujet

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Points : 41
    Points
    41
    Par défaut
    ok cool merci, j'avais trouvais une alternative aussi :

    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
     
     
        for i=1:s(n)
            %%Extraction of initial time for all Station and each EQS file
            h=v(n).EQS.Station(i).Comp(1).Raw.Dt*(0:v(n).EQS.Station(i).Comp(1).Raw.Nt-1);
            x3_temp=v(n).EQS.Station(i).Comp(3).Raw.Acc;
            %action=sprintf('x3_temp%i=x3_temp',i);
            %eval(action);
     
            %%Prend le maximum de la longueur du vecteur temps entre les s(n)
            %%
            if len_vect<length(h)
                len_vect=length(h)
                t_f=h(length(h))
                dt=v(n).EQS.Station(i).Comp(1).Raw.Dt;
            end
     
        end
     
        acc_zeros=zeros(len_vect,14);
     
        for i=1:s(n)
            x3_temp=v(n).EQS.Station(i).Comp(3).Raw.Acc;
            acc_zeros(1:length(x3_temp),i)=x3_temp;
        end

  8. #8
    Invité
    Invité(e)
    Par défaut
    C'est effectivement une autre solution, mais attention qu'elle va te rajouter des zéros pour "compléter les trous".
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> x = 1:5;
    >> x(2,1:8) = 1:8
        
    x = 
        1    2    3    4    5    0    0    0
        1    2    3    4    5    6    7    8

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Points : 41
    Points
    41
    Par défaut
    oui j'ai vu ça ! mais en l'occurence cela m'arrange ici !

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

Discussions similaires

  1. [hist] Probleme matrice simple
    Par mihaispr dans le forum MATLAB
    Réponses: 9
    Dernier message: 17/07/2009, 23h54
  2. Probleme legend matlab
    Par abidineb dans le forum MATLAB
    Réponses: 4
    Dernier message: 25/05/2009, 01h13
  3. Réponses: 0
    Dernier message: 19/12/2008, 18h50
  4. Probleme licence Matlab 6.5 sur Vista
    Par MBAYE BABACAR GUEYE dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/11/2007, 18h23
  5. probleme load matlab
    Par slayer23 dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/07/2007, 03h43

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