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 :

Déclaration d'une matrice (m,n)


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut Déclaration d'une matrice (m,n)
    bonjour, je souhaite créer une matrice (n,2) en la remplissant à chaque itération mais je ne sais pas comment faire.
    voici mon programme:
    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
    % PARCOURS DU SIGNAL DE DONNEES
    for i = 1:length(sig_donnee)
           
        % on recupere la valeur courante du signal
        donneec = sig_donnee(i);
        
        %on cherche les bornes inf et sup
        bornsup = 0;
        borninf = 0;
        
        X = find(donneec < 3);
        Y = diff(X);
        for n = 1:numel(Y)
            
            if(Y(n) > 1)
                bornsup = X(n+1);
                borninf = X(n);
            z=[];
            z=[borninf bornsup]; 
            end
        end
        
        %histo1D pour chaque plage entre les arrets
        for k=1:size(z,1)
            A=[];
            A=[A,histo1D(typehisto, sig_donnee(borninf:bornsup), sig_dist(borninf:bornsup), sig_tps(borninf:bornsup), classes)];
        
        end
        
    end
    Bien sur z n'est pas de la forme que j'attends et quand j'execute mon programme il n'y rien qui s'affiche!!!
    Pourriez vous m'aider? merci
    PS: la fonction histo1D fonctionne bien

  2. #2
    Membre éclairé Avatar de legreg2
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 61
    Par défaut
    D'abord, quel est la forme de sig_donnee ?

    Quelle est la matrice que tu remplie à chaque itération, A ??

    Je vois plusieurs problème :
    • avec donneec, tu dois récupérer qu'une seule valeur, X et Y n'ont alors aucune signification
    • tu initialises z dans ta branche if(Y(n) > 1), z n'est donc tout le temps initialisé, or tu l'utilises dans ta boucle for k=1:size(z,1), il doit y avoir un problème de ce côté...


    Enfin, quelle est la forme des données que tu insère dans A ??

    Voilà ce que j'ai vu pour le moment

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    d'abord merci pour la réponse,
    je voudrais remplir deux matrices: z avec les borninf et bornsup puis A avec des histo.
    histo est un vecteur colonne qui vient d'une autre fonction.
    finalement je voudrais z=borninf1 borninf2...
    bornsup1 bornsup2...

    A=(histo1 histo2 ...)
    les signaux que je traite sont des signaux aléatoires.

  4. #4
    Membre éclairé Avatar de legreg2
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 61
    Par défaut Problème sig_donnee
    Si sig_donnée est un signal aléatoire, l'opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donneec = sig_donnee(i);
    ne va récupérer qu'une seule valeur.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Si donnec<3
    alors
    X=1 et Y=[]
     
    Si donnec>3
    alors
    X=[] et Y=[]

    Le problème vient de la ligne "donneec = sig_donnee(i);" qui ne récupère qu'une seule valeur.

    Greg

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Merci à tous mais un problème subsiste...je n'arrive toujours pas à afficher la matrice A.

    premiere 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
    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 histo = histo1D(typehisto, sig_donnee, sig_dist, sig_tps, classes);
    % histo = histo1D(typehisto, sig_donnee, sig_dist, sig_tps, classes);
    % 
    % crée 1 histo à partir d'un signal de données
    %
    % Paramètres d'entrée : 
    %           typehisto   : type d'histo à calculer = choix entre 'Distance' ou 'Duree'
    %           sig_donnee  : signal de donnée 
    %           sig_dist    : signal de la distance cumulée par pas de temps
    %           sig_tps     : signal des pas de temps cumulés
    %           classes     : classes pour l'histo
    % Paramètres de sortie : 
    %           histo       : histogramme de Distance ou de duree selon le type specifié
    %
     
    % initialisation de l'histo
    histo = zeros(length(classes)-1,1);
    deltaD = 0;
    deltaT = 0;
     
    % PARCOURS DU SIGNAL DE DONNEES
    for i = 1:length(sig_donnee)
     
        % on recupere la valeur courante du signal
        donneec = sig_donnee(i);
     
        % A quelle classe appartient la valeur courante du signal?
        indtmp = find(donneec > classes);
        indclasse = max(indtmp);
     
        % cas particulier pour les bornes des classes
        if(donneec == classes(1))
            indclasse = 1;
        elseif(donneec == classes(end))
            indclasse = length(classes)-1;
        elseif(donneec > classes(end))
            indclasse=[];
        end
     
         % calcul des Delta de distance et de Temps
        if(i==1)
            if(~isempty(sig_dist) & strcmp(typehisto,'Distance')) deltaD = sig_dist(1); end
            if(~isempty(sig_tps) & strcmp(typehisto,'Duree')) deltaT = sig_tps(1); end
        else
            if(~isempty(sig_dist) & strcmp(typehisto,'Distance')) deltaD = sig_dist(i)-sig_dist(i-1); end
            if(~isempty(sig_tps) & strcmp(typehisto,'Duree')) deltaT = sig_tps(i)-sig_tps(i-1); end
        end   
     
        % Ajout des delta à la classe trouvee 
        if (~isempty(indclasse))
            if(strcmp(typehisto,'Distance')) histo(indclasse)= histo(indclasse) + deltaD; end
            if(strcmp(typehisto,'Duree')) histo(indclasse)= histo(indclasse) + deltaT; end
        end
     
     end
    deuxieme 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
    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
    function sous_histo = decoupage(typehisto, sig_donnee, sig_dist, sig_tps, classes);
    % sous_histo = decoupage(typehisto, sig_donnee, sig_dist, sig_tps, classes);
    % 
    % à partir d'un signal de données, on créée un histo à chaque fois que la
    % vitesse est nulle
    %
    % Paramètres d'entrée  : 
    %           typehisto   : type d'histo à calculer = choix entre 'Distance' ou 'Duree'
    %           sig_donnee  : signal de donnée 
    %           sig_dist    : signal de la distance cumulée par pas de temps
    %           sig_tps     : signal des pas de temps cumulés  
    %
    % Paramètres de sortie : 
    %           sous_histo : histogrammes de Distance ou de duree selon le type specifié
    %
     
    %déclarations
    z=[];
    A=[];
     %on cherche les bornes inf et sup
        bornsup = 0;
        borninf = 0;
     
        X = find(sig_donnee < 3);
        Y = diff(X);
        for n = 1:numel(Y)
     
            if(Y(n) > 1)
                bornsup = X(n+1);
                borninf = X(n);
            z(n,:)=[borninf bornsup];
     
            end
     
        %histo1D pour chaque plage entre les arrets
        for k=1:size(z,1);
            A=[A,histo1D(typehisto, sig_donnee(borninf:bornsup), sig_dist(borninf:bornsup), sig_tps(borninf:bornsup), classes)];
     
        end
        end
    des idées?

  6. #6
    Membre éclairé Avatar de legreg2
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 61
    Par défaut
    Il reste plusieurs trucs étranges dans ton programme, pourrais-tu nous fournir un exemples des signaux d'entrées pour y voir plus clair ?

    Il nous faudrait un exemple de :

    typehisto
    sig_donnee
    sig_dist
    sig_tps
    classes

    J'ai du mal avec l'histoire des classes, et pour le sous programme hista1D, je ne comprend toujours pas les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    donneec = sig_donnee(i);
    indtmp = find(donneec > classes);
    car tu ne récupère qu'une seule valeur, faire une recherche dans une seule valeur est absurde (un simple "if" devrait suffire).

    Enfin, si tu peux nous poster un exemple, peut-être y verrons-nous plus clair...

    Greg

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for n = 1:numel(Y)
     
            if(Y(n) > 1)
     
                bornsup = X(n+1);
                borninf = X(n);
                z(n,1)=borninf;
                z(n,2)=bornsup; 
     
            end
     
    end
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    z=[];
    for n = 1:numel(Y)
     
            if(Y(n) > 1)
     
                bornsup = X(n+1);
                borninf = X(n);
                z=[z ; borninf bornsup];
     
            end
     
    end
    Ou encore, si z est de grande dimension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    z=zeros(n,2);
    for n = 1:numel(Y)
     
            if(Y(n) > 1)
     
                bornsup = X(n+1);
                borninf = X(n);
                z(n,:)=[borninf bornsup];
     
            end
     
    end

Discussions similaires

  1. Déclaration d'une matrice avec Indice const
    Par Delaready dans le forum C
    Réponses: 3
    Dernier message: 31/01/2013, 19h18
  2. déclaration d'une matrice
    Par etudiante-m dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2012, 20h59
  3. Erreur lors de la déclaration d'une matrice
    Par miss_angel dans le forum OpenCV
    Réponses: 1
    Dernier message: 13/10/2011, 11h31
  4. Déclaration d'une matrice
    Par ziedest dans le forum Débuter
    Réponses: 3
    Dernier message: 16/12/2009, 20h03
  5. déclaration et initialisation d'une matrice
    Par Gébix dans le forum C++
    Réponses: 5
    Dernier message: 16/02/2006, 01h22

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