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 :

Problème avec la fonction find


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Problème avec la fonction find
    Bonjour,

    étant débutante avec Matlab j'ai un petit souci avec la fonction find. Est-ce que qn pourrait m'aider et m'expliquer?

    J'essaye de développer un programme qui me permette de calculer la somme de l'énergie sur un intervalle de temps de 10s. J'utilise donc la boucle for et la fonction find pour trouver les indices qui ont un temps supérieur t+dt(dt=10s). Le fichier que j'utilise comporte une colonne de temps et d'énergie. Le problème est que mes indices klow et kup sont vides quand je charge et donc il me permet pas de faire le calcul de l'énergie. Est-ce que qn sait ou je me trompe dans mon utilisation de la fonction find? 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
    clear all
    close all
     
    data2=load('SML64_long_AE_correct.txt');
    data=load('trx9_SML64d_mod3.txt');
    %data3=load('count.txt');
    %t=data(:,1);
    %def=data(:,12);
    Q=data(:,11);
    Ener=data2(:,14);
    temps=data2(:,4);
    def=data2(:,7);
    defm=data(:,16);
    amplitude=data2(:,12);
    count=data2(:,9);
    cumul_ener=data2(:,17);
     
    dt=10;
    dE=0;
    k=0,
     
    for i=1:length(temps)  
        t(i)=temps(i);
     
        [klow]=find (temps(i) >t(i),1,'first');
        [kup]=find(temps(i)>t(i)+dt,1,'first');
     
        for j=klow:kup
            dE=dE+Ener(j);
        end
        k=k+1;
        dE2(k)=dE;
        taux(k)=dE2(k)/dt;
     
    end
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Utilise temps et non temps(i) lorsque tu l'utilises avec la fonction find.

    Note : il me semble que tu oublies de remettre dE à zéro dans ta boucle.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    J'avais déjà testé auparavant avec temps au lieu de temps(i) mais ne marche pas non plus.
    Merci en tout cas pour ta réponse.

  4. #4
    Invité
    Invité(e)
    Par défaut
    En quoi cela ne marche pas exactement ?
    Tu te rends bien compte que vers les dernières itérations, il deviendra impossible de trouver des temps strictement supérieurs à t(i), et encore moins t(i)+dt ?

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    ok merci j'ai rajouté -dt à ma boucle. J'ai modifié un peu mon code et j'ai deux autre problèmes maintenant. Je reçois un message:

    ??? Improper assignment with rectangular empty matrix.
    
    Error in ==> testtaux2 at 27
        klow(i)=find (temps >=t1(i),1,'first');
    Je sais pas trop ce que ça signifie? Est-ce vous sauriez m'expliquer ou est la faute?

    L'autre problème est que je voudrais sommer mon énergie à partir des indices klow jusqu’à kup, c'est-à-dire si par exemple j'obtiens pour klow=2 et kup= 8 il faudrait que je somme toute les énergie dE entre cet intervalle. Je sais pas si finalement ma boucle for est la mieux adaptée, car lorsque je prends les indices suivant klow=3 et kup=9 mon programme repend la somme de l’énergie entre klow=2 et kup=8 + la somme de l’énergie entre klow=3 et kup= 9. Si j’enlève dE rien ne fonctionne alors y a-t-il un moyen autre pour faire la somme de l’énergie entre les indices défini?
    Je vous remets mon code modifié:

    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
    clear all
    close all
     
    data2=load('SML64_long_AE_correct.txt');
    data=load('trx9_SML64d_mod3.txt');
    %data3=load('count.txt');
    %t=data(:,1);
    %def=data(:,12);
    Q=data(:,11);
    Ener=data2(:,14);
    temps=data2(:,4);
    def=data2(:,7);
    defm=data(:,16);
    amplitude=data2(:,12);
    count=data2(:,9);
    cumul_ener=data2(:,17);
     
    dt=10;
    dE=0;
    k=0;
    n=0;
    for i=1:length(temps)-dt
       t1(i)=temps(i)+n*dt;
        t2(i)=temps(i);
     
     
        klow(i)=find (temps >=t1(i),1,'first');
        kup(i)=find(temps >t2(i)+dt,1,'first');
     n=n+1;
        for j=klow(i):kup(i)
     
            dE=dE+Ener(j);
     
        end
        k=k+1;
        dE2(k)=dE;
     
    %    dt3(k)=dt2;
        taux(k)=dE2(k)/dt;
     
    end
    Merci

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Pour la somme j'ai réussi à trouver la solution Pour le temps par contre je trouve pas

Discussions similaires

  1. [XL-2010] Problème avec la fonction find-Envoi de mails à différentes adresses
    Par clemmb dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 28/10/2014, 12h12
  2. Problème avec la fonction Find
    Par kyros21 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/01/2013, 13h50
  3. problème avec la fonction Find et un passage en argument
    Par paiva44 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2009, 18h56
  4. [E - 03] Problème avec la fonction Find
    Par documentation dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/02/2009, 17h54
  5. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43

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