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 :

Script pour calcul de somme de valeurs avec règle [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut Script pour calcul de somme de valeurs avec règle
    Bonjour,

    J'ai une matrice de données remplie de 0 ou de 0.2. J'aimerai que matlab me sorte pour chaque colonne la somme des valeurs successives (delta) des 0.2. Exemple : col1 = 0 0.2 0.2 0 0 0.2 0.2 0.2 ; result_col1= 0.4 0.6 etc. J'ai écrit un script qui marche très bien qui me calcule ce que je veux sans problème (cf. dessous). Premier petit souci : comment faire en sorte que mon script passe à la colonne d'après et crée une seconde colonne correspondante dans mon fichier résultat (ici d) et ainsi de suite jusqu'à finir ma matrice ?

    Et ensuite, ce que j'aimerai c'est ajouter une règle disant que "si tu vois moins de cinq zéros successifs tu l'ignores, tu ne remets pas ton compteur à zéro pour le calcul du prochain delta". Dans le script ci-dessous, le calcul d'un delta s'arrête dès qu'il voit un 0 après un 0.2.

    Merci d'avance pour votre aide.

    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
     
    T = importdata('data.xls')   
    T= T.Feuil1;
     
    d(1,:) = zeros(1,size(T,2));   
    j=1;   
     
     
    for individu=1:size(T,2)        
     
        for i=1:size(T,1);             
            if T(i,individu)== 0.2 || any(T(1:i))==0    
                d(j,individu) = d(j,individu)+T(i,individu);
            elseif T(i)==0 && T(i-1)== 0.2     
                j= j+1;
                d(j,individu) = 0;
            end
        end
        j=1;
    end

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    Bonjour,

    Je ne sais pas si je vais être lu et entendu mais je tente quand même. J'ai réécrit mon précédant script pour faire ce que je lui demande (cf. condition mentionnée dans le message précédant). Le voici :

    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
    clc; 
    T = importdata('data_jana.xls');
     result = cell(1, size(T,2));
     
    for col = 1:size(T,2)
        %// Get length-value pairs
        [lengths, values] = runLengthEncode(T(:,col));
        %// Compute all deltas
        deltas = 0.2*lengths(values == 0.2);
        %// Remove deltas following 5 zeros
        idxFiveZeros = find(lengths > 4 & values == 0, 1);
        if(isempty(idxFiveZeros))
            idxFiveZeros = numel(lengths);
        end
        deltas = deltas(1:sum(values(1:idxFiveZeros) == 0.2));
        %// Store result for column
        result{col} = deltas;
    end
    Avec ce code y'a pas de message d'erreur. Le problème est que dès qu'il trouve cinq 0 consécutifs, il stoppe le calcul des deltas de toute la colonne. Comment y remédier? Merci pour votre aide.

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour,

    qu'est-ce que tu entends par il stop le calcule? je ne vois pas de condition qui ferait sortir de ta boucle prématurément dans ton code.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    Citation Envoyé par Gooby Voir le message
    Bonjour,

    qu'est-ce que tu entends par il stop le calcule? je ne vois pas de condition qui ferait sortir de ta boucle prématurément dans ton code.
    La boucle est bonne puisqu'il check toutes les colonnes.
    En fait, lorsque je regarde les résultats une fois le script lancé, il n'y aucun calcul de deltas dans certaines colonnes alors que dans ces colonnes il y'a des valeurs entrecoupées de moins de 5 zéros. Par exemple: la colonne 1 elle débute par dix zéros puis y'a des 6 valeurs 0.2 qui se suivent puis deux zéros qui les séparent des précédentes. et si je regarde le résultat en lancant le script, il m'affiche pour cette colonne 0 alors qu'il y'a bien des valeurs qu'il doit additionner.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Par défaut
    Alors j'ai changé totalement mon code. Le voici:

    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
    T = importdata('data_jana.xls');
     
    result = cell(1, size(T,2));
    for icol = 1:size(T,2);
        nzeros = 0;
        delta = 0;
        deltas = [];
        for el = T(:, icol);
            if el==0
                nzeros = nzeros + 1;
                if nzeros==5
                    deltas = [deltas, delta];
                    delta = 0;
                end
            else
                delta = delta + el;
                nzeros = 0;
     
            end
        end
        if nzeros<5
            deltas = [deltas, delta];
            delta = 0;
        end
        disp(deltas);
        result{icol} = deltas;
    end
    Reste que maintenant il ne calcule pas les deltas... Je ne vois pas où est le pb avec ce script. Help!

  6. #6
    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
    Pourrais-tu nous fournir le fichier xls ?

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

Discussions similaires

  1. [Débutant] Petit problème pour calcul de somme
    Par kriskikout dans le forum Ada
    Réponses: 4
    Dernier message: 04/11/2006, 06h47
  2. Réponses: 7
    Dernier message: 02/11/2006, 19h05
  3. Réponses: 3
    Dernier message: 24/08/2006, 11h56

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