[MATLAB] Problème
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

[MATLAB] Problème



  1. #1
    alkra

    [MATLAB] Problème


    ------

    Bonjour à tous,
    Je suis entrain d'essayer de faire un programme en matlab et je vous avouerai que je lutte un peu.

    Je lis un fichier avec des chiffres sous forme de vecteur avec 8192 valeurs. Je voudrai calculer la moyenne par pas de 30 et mettre cette moyenne dans un autre vecteur. Au final je voudrai avoir un vecteur avec 8192 valeurs qui correspondraient à mes moyennes. Mes 30 premières valeurs seraient la première moyenne puis les 30 suivantes la deuxième ainsi de suite.
    Le problème c'est que j'ai du mal à imbriquer des boucles for, je dois pas être très doué, cela ne me parait pas très compliqué pourtant...
    Si quelqu'un a une idée je suis preneur

    Alkra

    -----

  2. #2
    Arzhur

    Re : [MATLAB] Problème

    Bonjour,


    Qu'est-ce qui ne marche pas sur ce que tu as fait ?

  3. #3
    alkra

    Re : [MATLAB] Problème

    J'ai essayé pas mal de chose, la mon code ressemble à ceci :


    Code:
    fid=fopen('Test.txt','r');
    donnees=fscanf(fid,'%f',[1,inf]);
    fclose('all');
    min=0;
    
    tab=zeros(1,8192);
    for i=9:30:length(donnees)
        
       
        if (i<length(donnees)-30);
            for j=i:15:i+29
             min=min+donnees(1,i);
            end
           min=min/3;
        end
            
                   
    end
    Je vois pas comment faire pour récupérer mes moyennes toutes les 30 valeurs.

  4. #4
    Arzhur

    Re : [MATLAB] Problème

    Je vois pas comment faire pour récupérer mes moyennes toutes les 30 valeurs.

    Tu peux récupérer tes valeurs en gérant un index de début et un index de fin que tu incrémentes de 30 à chaque "pas" .
    Une fois que tu as les bons index debut/fin extraire le "sous vecteur" correspondant aux valeurs et calculer la moyenne ne devrait pas être trop compliqué.


    Je ne dis pas que c'est le moyen le plus optimisé mais c'est assez simple. Faut juste faire "gaffe aux bords" ( du vecteur)

  5. A voir en vidéo sur Futura
  6. #5
    alkra

    Re : [MATLAB] Problème

    Déjà merci de de ton aide
    Si je comprends bien je dois utiliser la position (index ?) dans mon vecteur qui correspondra a une des mes moyennes ? La pour l'instant j'essaye de calculer mes moyennes tout les 30 valeurs, je prends peut-être le problème à l'envers.
    Je vais voir comment utiliser ce que tu viens de me dire. Merci

  7. #6
    Arzhur

    Re : [MATLAB] Problème

    La pour l'instant j'essaye de calculer mes moyennes tout les 30 valeurs, je prends peut-être le problème à l'envers.
    Alors je ne sais pas qui prend quoi dans quel sens...mais en tout cas, si je devais le faire, je commencerais par calculer les moyenne "30-par-30".

    L'idée des index (ou position ) c'est pour aider à délimiter les 30 premières valeurs puis les 30 suivantes et ainsi de suite.

  8. #7
    VirGuke

    Re : [MATLAB] Problème

    Salut,

    Effectivement tu prend le problème à l'envers, et ton code est plein de fautes. Es-tu sûr d'avoir réfléchi à la question?

    Il va falloir te créer un tableau supplémentaire pour stocker tes moyennes.

    La façon la plus naturelle de le faire, comme te l'indique Arzhur, c'est d'imbriquer tes boucles :

    Code:
    Moy=zeros(1,N)                   
    
    Pour j = 1 à ...                        % chaque bloc 
         Pour i = j à j+30                % dans chaque bloc
    
              ...                                % tu calcules ta moyenne
              Moy(j) = ...                   % ce que tu viens de calculer
    
         Fin
    Fin
    Cependant Matlab n'est pas du tout mais pas du tout optimisé pour faire des boucles, il préfère les notations matricielles.
    Donc une chose intéressante serait que tu réfléchisse à :
    - comment tu pourrais inverser les boucles sur i et j
    - comment utiliser mean(tab(j:j+30) dans ton code

    Enfin, une des façons les plus optimisées de le faire c'est de l'écrire dans ce style :

    Moy = mean( reshape(Tab,30,...) , 'row' );

    reshape sert à réorganiser le tableau en matrice de largeur 30 et de hauteur ce qu'il faut, et mean avec l'argument 'row' demande un vecteur des moyennes de chaque ligne. Je ne me souviens plus de l'ordre des arguments, ni si reshape accepte une longueur vide (au pire ça se calcule), mais tout ça est dans l'aide de matlab ou sur leur site.

  9. #8
    alkra

    Re : [MATLAB] Problème

    Merci de vos réponses rapides.

    Oui j'ai réfléchi à la question mais n'étant pas un pro de matlab j'avoue ne pas connaître toutes les possibilités.
    Quand tu parles d'inverser les boucles i et j, tu parles de boucler toutes les 30 valeurs puis ensuite sur l'ensembles des valeurs?

  10. #9
    VirGuke

    Re : [MATLAB] Problème

    Citation Envoyé par alkra Voir le message
    Quand tu parles d'inverser les boucles i et j, tu parles de boucler toutes les 30 valeurs puis ensuite sur l'ensembles des valeurs?
    Heu, ouinon. Je ne comprends pas ce que tu veux dire là en fait.

  11. #10
    alkra

    Re : [MATLAB] Problème

    C'est bon j'ai réussi :
    Code:
     
    
    fid=fopen('Test.txt','r');
    donnees=fscanf(fid,'%f',[1,inf]);
    fclose('all');
    moy=zeros(1,210);
    m=zeros(1,8190);
    x=1:length(donnees);
    
    donnees=donnees/1030;
    %donnees=transpose(donnees);
    y=donnees;
        N=length(donnees);
        JM=39;
        k=N/JM;
        
        
        for j=1:(k-1);
            l=j*JM;
            for i=l:l+JM;
                moy(j)=moy(j)+donnees(i);
                  
            end
        end
       
        for j=1:k;
            l=j*37;
            for i=l:l+37;
                m(i)=moy(j);
            end
            
        end
           
          hold on
          plot(x,y,'-r');
          plot(x,m,'-g');

Discussions similaires

  1. Problème matlab
    Par invitea045cfc8 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 28/07/2011, 12h46
  2. Problème matlab
    Par invitea045cfc8 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 22/07/2011, 12h09
  3. problème sur matlab
    Par invite369a226b dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 06/04/2006, 18h44
  4. probleme matlab
    Par invitefe22fd59 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 25/04/2005, 10h39
  5. problème matlab
    Par invitef5b3a62a dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 23/02/2005, 09h51