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 :

Nombres de paramètres d'une fonction [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut Nombres de paramètres d'une fonction
    Bonjour,

    Je suis en train de réaliser une fonction qui va m'être utile dans mon projet. Cependant il se trouve que cette fonction est relativement la même dans toutes les situations, à la différence que le nombre de paramètres doit varier.

    Voici deux exemples : reflux_3, reflux_4

    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
    function [Dref, Fref]=reflux_3(evenements_inter_Im123_liquide,evenements_Imp1_liquide,evenements_Imp2_liquide,evenements_Imp3_liquide)
    nbreflux=0;
    for i=1:size(evenements_inter_Im123_liquide,1)
     
        %Pour déterminer les reflux entre 3 pistes, on procède comme suit
        %: on a déterminé dans etude_de_courbe les événements commun à 3
        %pistes par domaine. On cherche alors, dans un domaine donné et selon 
        %la piste l'ensemble des événements communs aux trois pistes i.e. leur
        %début et fin que l'on stocke dans les DDI et FFI. Il n'y a alors
        %reflux que si le début d'un événement commun sur la piste 3 est avant
        %2 lui-même avant 1 ce qui se traduit physiquement par une 
        %"montée" depuis 3 vers 1.
     
        X1=find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D1=X1(end);
        DD1=evenements_Imp1_liquide(D1,1);
        FF1=evenements_Imp1_liquide(D1,2);
        X2=find(evenements_Imp2_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D2=X2(end);
        DD2=evenements_Imp2_liquide(D2,1);
        FF2=evenements_Imp2_liquide(D2,2);
        X3=find(evenements_Imp3_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D3=X3(end);
        DD3=evenements_Imp3_liquide(D3,1);
        FF3=evenements_Imp3_liquide(D3,2);
        if((DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
        Dref(nbreflux,1)=DD1;
        Dref(nbreflux,2)=DD2;
        Dref(nbreflux,3)=DD3;
        Fref(nbreflux,1)=FF1;
        Fref(nbreflux,2)=FF2;
        Fref(nbreflux,3)=FF3;
        end
     
        clear X1 D1 DD1 FF1 D2 DD2 FF2 X3 D3 DD3 FF3
    end
    Dref;
    Fref;
    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
    function [Dref, Fref]=reflux_4(evenements_inter_Im1234_liquide,evenements_Imp1_liquide,evenements_Imp2_liquide,evenements_Imp3_liquide,evenements_Imp4_liquide)
    nbreflux=0;
    for i=1:size(evenements_inter_Im1234_liquide,1)
     
        %Pour déterminer les reflux entre 4 pistes.
     
        X1=find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1));
        D1=X1(end);
        DD1=evenements_Imp1_liquide(D1,1);
        FF1=evenements_Imp1_liquide(D1,2);
        X2=find(evenements_Imp2_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1));
        D2=X2(end);
        DD2=evenements_Imp2_liquide(D2,1);
        FF2=evenements_Imp2_liquide(D2,2);
        X3=find(evenements_Imp3_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1));
        D3=X3(end);
        DD3=evenements_Imp3_liquide(D3,1);
        FF3=evenements_Imp3_liquide(D3,2);
        X4=find(evenements_Imp4_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1));
        D4=X4(end);
        DD4=evenements_Imp4_liquide(D4,1);
        FF4=evenements_Imp4_liquide(D4,2);
        if((DD4>=DD3) & (DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
        Dref(nbreflux,1)=DD1;
        Dref(nbreflux,2)=DD2;
        Dref(nbreflux,3)=DD3;
        Dref(nbreflux,4)=DD4;
        Fref(nbreflux,1)=FF1;
        Fref(nbreflux,2)=FF2;
        Fref(nbreflux,3)=FF3;
        Fref(nbreflux,4)=FF4;
        end
     
        clear X1 D1 DD1 FF1 D2 DD2 FF2 X3 D3 DD3 FF3 X4 D4 DD4 FF4
    end
    Dref;
    Fref;
    Comme vous le voyez le fonctionnement est strictement le même sauf que dans reflux_4 je considère un vecteur en plus. J'ai de même écrit reflux_5 et reflux_6. Ce que je voudrais en fait c'est n'avoir qu'une seule fonction dont le nombre de paramètres est variables et qui réalise le travail ci-dessus, est-ce possible ? Au maximum, avec reflux_6, j'aurais 7 paramètres.

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    salut,
    tu n'as qu'a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [def,ref] = reflux(varargin)
    tu vérifies ensuite le nombre de paramètres entrés avec la propriété nargin

    vois


  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Pour connaitre le nombre d’arguments passés à une fonction, utilise la fonction nargin
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Merci, je comprends ce que vous voulez me dire mais le problème n'est pas simplement que le nombre de paramètres varie dans l'en-tête car la fonction est légèrement différente aussi : avec reflux_3 j'ai besoin de X1,X2,X3,D1,D2,D3...ect ; avec reflux_4 je dois rajouter X4,D4...et ainsi de suite pour reflux_6. La condition avec le if diffère aussi. Bref j'ai besoin d'une sorte de fonction "évolutive".

    J'ai l'impression que je devrais donc utiliser plusieurs if(nargin=4), if(nargin=5) ect dans une même fonction, je me trompe ?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    J'ai l'impression que je devrais donc utiliser plusieurs if(nargin=4), if(nargin=5) ect dans une même fonction, je me trompe ?
    c'est en effet l'idée à mettre en oeuvre

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par abel413 Voir le message
    avec reflux_3 j'ai besoin de X1,X2,X3,D1,D2,D3...ect ; avec reflux_4 je dois rajouter X4,D4...et ainsi de suite pour reflux_6.
    C'est un problème typique qui aurait pu être évité : Comment créer des variables nommées A1, A2, A3, ..., AN ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Bon, je suis en train d'écrire quelque chose comme ceci, ce n'est que le début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function [def,ref] = reflux(varargin)
    nbreflux=0;
    if isempty(varargin(1))
        disp('vide');
        Dref=[];
        Fref=[];
    elseif (nargin==4)
        for i=1:size(varargin(1),1)
        X1=find(varargin(2)(:,1)<= varargin(1)(i,1));
        D1=X1(end);
        %ect..
    Cependant cela ne semble pas marcher : initialement je teste si le premier paramètre est vide, c'est donc varargin(1) si je comprends bien. Mais ensuite j'ai besoin d'accéder au paramètre 2, donc varagin(2) selon cette même logique et a sa première ligne (:,1) mais cela ne fonctionne pas de la sorte puisque j'ai ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error: File: reflux.m Line: 20 Column: 13
    ()-indexing must appear last in an index expression.
    EDIT:

    Dut, merci mais j'ai peur de ne pas bien comprendre ce que tu m'indiques exactement. En fait, j'ai l'impression que le problème ci-dessus devrait se ramener à la création d'une cellule mais je ne maîtrise pas du tout cela. Je vois bien que si je tappe varargin(1) ce n'est pas mon vecteur en question mais une case qui contient ce vecteur. Je suis un peu dépassé.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Bon, je pense avoir trouvé le moyen de récupérer le vecteur à l'aide de {}, par exemple varargin{1} correspond à mon valeurs_Im123_liquide dans le cas reflux_3 que je suis en train de traiter. Voici le début du 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
    function [def,ref] = reflux(varargin)
    nbreflux=0;
     
    if isempty(varargin(1))
        disp('vide');
        Dref=[];
        Fref=[];
    end
     
    if (nargin==4)
       for i=1:size(varargin(1),1)
            A=varargin{1};
            B=varargin{2};
            C=varargin{3};
            D=varargin{4};
            X1=find(B(:,1)<= A(i,1));
            D1=X1(end);
            DD1=B(D1,1);
            FF1=B(D1,2);
            X2=find(C(:,1)<= A(i,1));
            D2=X2(end);
            DD2=C(D2,1);
            FF2=C(D2,2);
            X3=find(D(:,1)<= A(i,1));
            D3=X3(end);
            DD3=D(D3,1);
            FF3=D(D3,2);
            if((DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
            Dref(nbreflux,1)=DD1;
            Dref(nbreflux,2)=DD2;
            Dref(nbreflux,3)=DD3;
            Fref(nbreflux,1)=FF1;
            Fref(nbreflux,2)=FF2;
            Fref(nbreflux,3)=FF3;
            end
            clear X1 D1 DD1 FF1 D2 DD2 FF2 X3 D3 DD3 FF3
     end
     
     
     elseif((nargin<4) & (nargin>6))
            Dref=[];
            Fref=[];
    end
     
    if(nbreflux==0)
        Dref=[];
        Fref=[];
    end
    Dref;
    Fref;
    Il semble fonctionner mais je commence à m'y perdre dans les if, for ect si bien qu'avec le debug mode je constate que la boucle for ne s'effectue pas, i reste égal à 1.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Pour commencer, les deux ligne suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X1=find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1));
    D1=X1(end);
    se simplifient en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D = find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im1234_liquide(i,1),1,'last');
    Pour le reste, tu devrais pouvoir faire quelque chose comme :

    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
    function [Dref, Fref] = reflux_4(varargin)
    nbreflux = 0;
     
    for i = 1:size(evenements_inter_Im1234_liquide,1)
     
        for n = 2:nargin
     
            idx = find(varargin{n}(:,1)<= varargin{1}(i,1),1,'last');
            DD(n) = varargin{n}(idx,1);
     
        end
     
        if ...
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
        end
     
    end
    Pour la condition, en fait tu testes si chaque valeurs est supérieure à la précédente. Tu peux donc t'aider de la fonction diff

    En suivant ce raisonnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d = diff(DD)
    d>0
    all(d>0)
    Ce qui donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if all(diff(DD)>0)
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
        end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Merci Dut, j'apprécie beaucoup que tu te sois penché sur une solution alternative. Cependant, je crois que tu m'as perdu pour de bon !

    Cette fonction reflux_4 que tu as écrite est-elle la fonction que je recherche, c'est-à-dire celle que j'essaye de construire et dont le nombre de paramètres est variable, ainsi que les variables à l'intérieur de la fonction ? En fait je ne la comprends pas bien, notamment le "if ..." ; j'avoue, qu'étant donné que tu ne l'as pas mise d'un coup mais scindée en plusieurs codes, je ne m'y retrouve plus.

    S'agit-il de :

    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
    function [Dref, Fref] = reflux_4(varargin)
    nbreflux = 0;
     
    for i = 1:size(varargin{1},1)
     
        for n = 2:nargin
     
            idx = find(varargin{n}(:,1)<= varargin{1}(i,1),1,'last');
            DD(n) = varargin{n}(idx,1);
     
        end
     
        if ...
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
        end
     
    end
     
    d = diff(DD)
    d>0
    all(d>0)
     
    if all(diff(DD)>0)
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
    end
    Mais j'avoue que je la comprends pas bien !

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Comme ceci :
    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
    function [Dref, Fref] = reflux(varargin)
    nbreflux = 0;
     
    for i = 1:size(varargin{1},1)
     
        for n = 2:nargin
     
            idx = find(varargin{n}(:,1)<= varargin{1}(i,1),1,'last');
            DD(n) = varargin{n}(idx,1);
     
        end
     
        if all(diff(DD)>0)
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
        end
     
    end
    C'est mieux ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    En fait, c'est très difficile pour moi de comprendre comment fonctionne la fonction. J'essaye donc de l'adapter par rapport à ce que j'ai déjà fait en rajoutant notamment Fref et FF, ci-dessous :


    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
    function [Dref, Fref] = reflux_cond(varargin)
    nbreflux = 0;
     
    for i = 1:size(varargin{1},1)
     
        for n = 2:nargin
     
            idx = find(varargin{n}(:,1)<= varargin{1}(i,1),1,'last');
            DD(n) = varargin{n}(idx,1);
            FF(n) = varargin{n}(idx,2);
        end
     
        if all(diff(DD)>0)
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
            Fref(nbreflux,:) = FF;
        end
        clear idx DD FF
    end
    Dref;
    Fref;
    A=0;
    Quand je veux la tester avec comme vecteurs d'exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    V1=[1 1 1; 2 1 1; 3 1 1];
    V2=[1 1 1; 2 1 1; 3 1 1; 4 1 1];
    V3=[1 1 1; 2 1 1; 3 1 1; 4 1 1; 5 1 1];
    V4=[1 1 1; 2 1 1; 3 1 1; 4 1 1; 5 1 1; 6 1 1];
    V5=[1 1 1; 2 1 1; 3 1 1; 4 1 1; 5 1 1; 6 1 1; 7 1 1];
     
    [Dref, Fref] = reflux_cond(V1,V2,V3,V4);
    J'obtiens le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ?? Undefined function or variable "Dref".
    Error in ==> reflux_cond at 20
    Dref;
    J'ai déjà cela avec mes propres fonctions et je n'arrive pas à comprendre pourquoi.

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Quelques corrections :

    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
    function [Dref, Fref] = reflux_cond(varargin)
    
    nbreflux = 0;
    
    for i = 1:size(varargin{1},1)
        
        for n = 2:nargin
            
            idx = find(varargin{n}(:,1)<= varargin{1}(i,1),1,'last');
            DD(n-1) = varargin{n}(idx,1);
            FF(n-1) = varargin{n}(idx,2);
    
        end
        
        if all(diff(DD)>=0)
    
            nbreflux = nbreflux+1;
            Dref(nbreflux,:) = DD;
            Fref(nbreflux,:) = FF;        
    
        end
        %     clear idx DD FF
    end
    % Dref;
    % Fref;
    % A=0;
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    salut,

    c'est du au fait que ta condition if all(diff(DD)>0) n'est jamais vérifiée. je n'ai pas compris exactement ce que tu cherches à faire, mais dans ton code initial tu avais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            if((DD3>=DD2) & (DD2>=DD1))
    du coup essaye
    plutôt. J'espère que ça t'aidera

    EDIT : doublé par dut

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Oubliez ce que je viens de dire car je pense que c'est certainement trop compliqué à tester, prenez simplement le code suivant de reflux_3 :

    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
    function [Dref, Fref]=reflux_3(evenements_inter_Im123_liquide,evenements_Imp1_liquide,evenements_Imp2_liquide,evenements_Imp3_liquide)
    nbreflux=0;
     
    if isempty(evenements_inter_Im123_liquide)
        disp('vide');
        Dref=[];
        Fref=[];
    else
    for i=1:size(evenements_inter_Im123_liquide,1)
     
        X1=find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D1=X1(end);
        DD1=evenements_Imp1_liquide(D1,1);
        FF1=evenements_Imp1_liquide(D1,2);
        X2=find(evenements_Imp2_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D2=X2(end);
        DD2=evenements_Imp2_liquide(D2,1);
        FF2=evenements_Imp2_liquide(D2,2);
        X3=find(evenements_Imp3_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D3=X3(end);
        DD3=evenements_Imp3_liquide(D3,1);
        FF3=evenements_Imp3_liquide(D3,2);
        if((DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
        Dref(nbreflux,1)=DD1;
        Dref(nbreflux,2)=DD2;
        Dref(nbreflux,3)=DD3;
        Fref(nbreflux,1)=FF1;
        Fref(nbreflux,2)=FF2;
        Fref(nbreflux,3)=FF3;
        end
     
        clear X1 D1 DD1 FF1 D2 DD2 FF2 X3 D3 DD3 FF3
    end
    end
     
    Dref;
    Fref;
    A=0;
    A present voici les vecteurs problèmatiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    evenements_inter_Imp234_melange=
     
    22231	22231	1
    66124	66124	1
    82159	82160	2
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    evenements_Imp2_melange=
     
    180	181	2
    1107	1107	1
    1186	1186	1
    1191	1191	1
    8404	8404	1
    8446	8446	1
    8449	8449	1
    8451	8451	1
    8453	8454	2
    8546	8547	2
    8550	8550	1
    8574	8574	1
    8622	8623	2
    8626	8626	1
    8645	8646	2
    8649	8649	1
    8671	8671	1
    8693	8693	1
    10840	10842	3
    11551	11551	1
    14213	14213	1
    14270	14270	1
    14293	14295	3
    14301	14301	1
    14319	14320	2
    14322	14322	1
    14324	14327	4
    14329	14329	1
    14331	14340	10
    14347	14349	3
    14353	14356	4
    14358	14365	8
    14371	14371	1
    14373	14379	7
    14381	14390	10
    14393	14399	7
    14401	14404	4
    14407	14413	7
    14415	14416	2
    14418	14423	6
    14429	14435	7
    14439	14446	8
    14448	14454	7
    14456	14467	12
    14513	14513	1
    14520	14523	4
    14531	14537	7
    14539	14552	14
    14562	14562	1
    14564	14568	5
    14570	14570	1
    14576	14578	3
    14588	14609	22
    14614	14620	7
    14622	14628	7
    14639	14639	1
    14642	14646	5
    14648	14665	18
    14671	14677	7
    14679	14680	2
    14682	14689	8
    14702	14703	2
    14707	14707	1
    14709	14720	12
    14723	14727	5
    14735	14736	2
    14738	14741	4
    14744	14744	1
    14747	14747	1
    15243	15243	1
    15246	15246	1
    15251	15251	1
    15255	15255	1
    15257	15257	1
    15259	15264	6
    15268	15276	9
    15302	15302	1
    15304	15304	1
    15306	15306	1
    15308	15308	1
    15345	15347	3
    15350	15353	4
    15368	15368	1
    15371	15371	1
    15457	15457	1
    15464	15464	1
    15483	15485	3
    15493	15493	1
    15557	15557	1
    16787	16787	1
    16790	16790	1
    16798	16798	1
    16813	16813	1
    16863	16863	1
    16868	16868	1
    16873	16874	2
    17006	17007	2
    17028	17028	1
    17030	17030	1
    17032	17033	2
    17035	17035	1
    17037	17038	2
    17091	17091	1
    17105	17105	1
    17121	17123	3
    17139	17139	1
    17151	17152	2
    17198	17198	1
    17223	17223	1
    17394	17394	1
    17400	17400	1
    17424	17424	1
    17426	17428	3
    17439	17439	1
    17456	17456	1
    17465	17465	1
    17482	17482	1
    17484	17484	1
    17486	17486	1
    17502	17502	1
    17505	17505	1
    17512	17512	1
    17514	17515	2
    17517	17517	1
    17519	17519	1
    17666	17666	1
    17669	17669	1
    17673	17673	1
    19374	19375	2
    22110	22111	2
    22113	22114	2
    22130	22132	3
    22230	22231	2
    22257	22257	1
    23574	23574	1
    23591	23591	1
    23596	23596	1
    23635	23635	1
    23638	23638	1
    23641	23641	1
    23643	23644	2
    23648	23648	1
    23652	23654	3
    23656	23656	1
    23677	23677	1
    23679	23679	1
    23682	23682	1
    23695	23696	2
    23705	23708	4
    23710	23712	3
    23716	23729	14
    23733	23733	1
    23748	23748	1
    23751	23751	1
    23753	23754	2
    23756	23757	2
    23759	23760	2
    23766	23766	1
    23768	23769	2
    23771	23771	1
    23773	23775	3
    23797	23797	1
    23799	23799	1
    23802	23802	1
    23805	23806	2
    23808	23821	14
    23823	23823	1
    23833	23833	1
    23836	23837	2
    23839	23839	1
    23843	23848	6
    23850	23850	1
    23852	23852	1
    23854	23854	1
    23856	23857	2
    23859	23859	1
    23862	23863	2
    23882	23882	1
    23893	23894	2
    30246	30246	1
    30325	30325	1
    30379	30379	1
    30383	30383	1
    30390	30390	1
    30400	30400	1
    30731	30732	2
    31311	31312	2
    31314	31317	4
    31319	31320	2
    31324	31324	1
    31388	31388	1
    31525	31526	2
    32058	32058	1
    32255	32256	2
    32515	32515	1
    32716	32716	1
    32892	32894	3
    33042	33043	2
    33045	33047	3
    33109	33109	1
    33320	33320	1
    33399	33399	1
    33424	33424	1
    33465	33466	2
    33539	33539	1
    33584	33585	2
    33610	33610	1
    33619	33619	1
    33628	33628	1
    33630	33630	1
    33794	33794	1
    33836	33837	2
    34323	34323	1
    34379	34379	1
    34647	34648	2
    36998	36999	2
    37015	37022	8
    37051	37051	1
    37077	37077	1
    37140	37140	1
    37156	37156	1
    37167	37168	2
    37173	37173	1
    37177	37177	1
    37179	37179	1
    37196	37196	1
    37200	37200	1
    38948	38954	7
    38989	38997	9
    41419	41419	1
    41426	41426	1
    41428	41430	3
    41433	41434	2
    43172	43175	4
    43177	43177	1
    43179	43179	1
    43193	43194	2
    43225	43230	6
    51082	51082	1
    51085	51087	3
    51089	51091	3
    51093	51095	3
    51097	51098	2
    51102	51104	3
    51106	51164	59
    51167	51298	132
    51302	51308	7
    51310	51316	7
    51318	51320	3
    51323	51323	1
    51325	51374	50
    51376	51381	6
    51383	51385	3
    51388	51389	2
    51392	51397	6
    51400	51402	3
    51404	51406	3
    51409	51409	1
    51413	51413	1
    51417	51417	1
    51419	51420	2
    51423	51424	2
    51426	51428	3
    51430	51432	3
    51434	51436	3
    51439	51448	10
    51451	51452	2
    51455	51457	3
    51459	51461	3
    51463	51465	3
    51467	51470	4
    51472	51476	5
    51481	51481	1
    51540	51540	1
    51544	51544	1
    51547	51548	2
    51551	51553	3
    51555	51556	2
    51558	51559	2
    51562	51564	3
    51566	51567	2
    51569	51571	3
    51573	51575	3
    51579	51579	1
    66095	66095	1
    66099	66099	1
    66124	66126	3
    71703	71703	1
    71707	71707	1
    71710	71711	2
    71728	71736	9
    71740	71740	1
    71742	71743	2
    71746	71747	2
    71761	71761	1
    71780	71781	2
    71784	71784	1
    71789	71794	6
    71798	71799	2
    71802	71802	1
    72149	72149	1
    74008	74009	2
    82138	82140	3
    82159	82161	3
    82844	82846	3
    82892	82892	1
    82897	82897	1
    82899	82900	2
    82904	82904	1
    82908	82909	2
    82919	82925	7
    82966	82966	1
    82968	82968	1
    82982	82985	4
    82987	82996	10
    83850	83850	1
    84120	84120	1
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    evenements_Imp3_melange=
     
    81	81	1
    84	84	1
    87	87	1
    92	92	1
    94	100	7
    122	129	8
    131	135	5
    147	149	3
    164	166	3
    168	170	3
    173	178	6
    180	183	4
    185	188	4
    198	199	2
    202	202	1
    204	204	1
    221	222	2
    228	228	1
    1069	1069	1
    1090	1090	1
    1107	1107	1
    1186	1186	1
    1191	1191	1
    1199	1199	1
    6346	6346	1
    13897	13897	1
    13922	13922	1
    13944	13944	1
    13948	13948	1
    13963	13963	1
    13978	13978	1
    13982	13982	1
    14213	14213	1
    14270	14270	1
    14273	14273	1
    14276	14276	1
    14279	14286	8
    14289	14296	8
    14301	14302	2
    14319	14327	9
    14329	14329	1
    14331	14340	10
    14345	14349	5
    14353	14365	13
    14371	14381	11
    14385	14387	3
    14390	14390	1
    14393	14399	7
    14401	14404	4
    14406	14413	8
    14415	14423	9
    14429	14436	8
    14439	14454	16
    14458	14467	10
    14509	14511	3
    14513	14513	1
    14519	14522	4
    14528	14537	10
    14539	14552	14
    14562	14570	9
    14573	14573	1
    14576	14578	3
    14587	14609	23
    14613	14628	16
    14636	14637	2
    14639	14640	2
    14642	14646	5
    14648	14665	18
    14671	14690	20
    14698	14699	2
    14702	14704	3
    14706	14721	16
    14723	14728	6
    14735	14741	7
    14744	14744	1
    14747	14747	1
    14856	14856	1
    14868	14868	1
    15243	15243	1
    15246	15246	1
    15248	15248	1
    15251	15251	1
    15254	15255	2
    15257	15265	9
    15267	15273	7
    15275	15276	2
    15300	15300	1
    15302	15306	5
    15308	15308	1
    15326	15326	1
    15345	15347	3
    15350	15353	4
    15355	15355	1
    15368	15368	1
    15371	15371	1
    15422	15422	1
    15430	15430	1
    15457	15457	1
    15464	15464	1
    15483	15485	3
    15493	15493	1
    15508	15509	2
    15528	15528	1
    15557	15558	2
    16739	16739	1
    16798	16798	1
    16868	16868	1
    16873	16873	1
    17006	17007	2
    17028	17028	1
    17030	17030	1
    17032	17033	2
    17037	17037	1
    17091	17092	2
    17105	17105	1
    17123	17123	1
    17198	17198	1
    17362	17362	1
    17376	17376	1
    17400	17400	1
    17414	17414	1
    17424	17428	5
    17439	17440	2
    17456	17457	2
    17459	17459	1
    17462	17462	1
    17464	17466	3
    17468	17468	1
    17471	17471	1
    17481	17482	2
    17484	17486	3
    17488	17488	1
    17499	17499	1
    17502	17503	2
    17505	17505	1
    17512	17520	9
    17652	17652	1
    17666	17666	1
    17669	17669	1
    22109	22117	9
    22125	22125	1
    22129	22132	4
    22195	22195	1
    22229	22231	3
    22257	22257	1
    22272	22273	2
    22275	22276	2
    23212	23212	1
    23445	23445	1
    23461	23461	1
    23565	23565	1
    23572	23572	1
    23591	23591	1
    23596	23596	1
    23635	23636	2
    23638	23638	1
    23641	23641	1
    23643	23644	2
    23646	23646	1
    23648	23649	2
    23652	23654	3
    23656	23656	1
    23667	23667	1
    23670	23670	1
    23677	23677	1
    23682	23682	1
    23695	23696	2
    23705	23730	26
    23733	23734	2
    23748	23748	1
    23751	23751	1
    23753	23754	2
    23756	23760	5
    23766	23766	1
    23768	23769	2
    23771	23775	5
    23794	23794	1
    23797	23797	1
    23799	23799	1
    23802	23802	1
    23804	23805	2
    23807	23810	4
    23812	23817	6
    23819	23821	3
    23823	23823	1
    23834	23834	1
    23836	23839	4
    23843	23850	8
    23852	23852	1
    23854	23854	1
    23856	23857	2
    23859	23859	1
    23861	23863	3
    23875	23875	1
    23882	23882	1
    23893	23894	2
    28396	28396	1
    30480	30480	1
    30482	30488	7
    30490	30491	2
    30493	30493	1
    30495	30497	3
    30889	30889	1
    31311	31312	2
    31314	31316	3
    31319	31320	2
    31737	31737	1
    32865	32866	2
    32869	32874	6
    32877	32879	3
    32892	32894	3
    34647	34648	2
    36981	36981	1
    36992	36993	2
    36995	36995	1
    36997	37000	4
    37013	37023	11
    37026	37027	2
    37034	37034	1
    37036	37036	1
    37048	37049	2
    37051	37052	2
    37057	37064	8
    37069	37070	2
    37077	37077	1
    37159	37159	1
    37167	37168	2
    37173	37173	1
    37177	37177	1
    37179	37179	1
    37196	37196	1
    37198	37202	5
    38931	38932	2
    38943	38944	2
    38946	38954	9
    38959	38959	1
    38969	38969	1
    38976	38976	1
    38988	38997	10
    41399	41399	1
    41405	41405	1
    41408	41408	1
    41411	41411	1
    41419	41437	19
    43161	43161	1
    43163	43163	1
    43171	43175	5
    43177	43177	1
    43179	43179	1
    43185	43185	1
    43190	43190	1
    43193	43193	1
    43197	43197	1
    43200	43200	1
    43225	43230	6
    43439	43439	1
    43548	43548	1
    65722	65722	1
    65728	65728	1
    65928	65928	1
    65930	65930	1
    65950	65950	1
    65953	65953	1
    65955	65955	1
    65958	65958	1
    65961	65961	1
    65964	65969	6
    65971	65974	4
    66016	66016	1
    66018	66019	2
    66021	66021	1
    66075	66075	1
    66077	66078	2
    66086	66086	1
    66095	66096	2
    66098	66100	3
    66124	66126	3
    66198	66198	1
    71625	71628	4
    71630	71637	8
    71650	71652	3
    71665	71665	1
    71675	71675	1
    71678	71681	4
    71683	71685	3
    71688	71690	3
    71693	71699	7
    71701	71711	11
    71713	71713	1
    71726	71747	22
    71750	71752	3
    71756	71756	1
    71759	71765	7
    71767	71768	2
    71771	71785	15
    71793	71794	2
    71799	71799	1
    71802	71802	1
    71805	71805	1
    81820	81820	1
    81834	81834	1
    81838	81838	1
    81844	81844	1
    81848	81848	1
    81868	81879	12
    81881	81884	4
    81901	81901	1
    81913	81913	1
    82136	82139	4
    82152	82155	4
    82158	82165	8
    82197	82198	2
    82273	82273	1
    82734	82734	1
    82817	82817	1
    82838	82838	1
    82840	82846	7
    82858	82860	3
    82865	82866	2
    82869	82869	1
    82875	82875	1
    82882	82906	25
    82909	82909	1
    82918	82923	6
    82938	82941	4
    82945	82947	3
    82961	82961	1
    82965	82966	2
    82978	82979	2
    82982	82982	1
    82989	82990	2
    82993	82996	4
    83849	83850	2
    83855	83859	5
    83874	83874	1
    83906	83906	1
    83927	83927	1
    83937	83937	1
    83940	83940	1
    83943	83944	2
    83947	83947	1
    83950	83950	1
    83969	83969	1
    83987	83987	1
    83998	83998	1
    84043	84043	1
    84052	84052	1
    84069	84069	1
    84109	84109	1
    84120	84120	1
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
     
    evenements_Imp4_melange=
     
    412	413	2
    1083	1084	2
    1088	1088	1
    1111	1117	7
    1145	1145	1
    1166	1167	2
    1465	1465	1
    2423	2424	2
    2426	2426	1
    2458	2458	1
    2540	2540	1
    2554	2554	1
    2710	2710	1
    2720	2723	4
    2755	2755	1
    3197	3197	1
    3206	3206	1
    3208	3208	1
    3213	3213	1
    3216	3216	1
    3229	3229	1
    3247	3247	1
    4499	4500	2
    4502	4502	1
    4504	4504	1
    6088	6088	1
    6095	6095	1
    6133	6134	2
    6156	6156	1
    6160	6160	1
    6170	6170	1
    6174	6174	1
    6222	6222	1
    6242	6242	1
    6245	6245	1
    6336	6336	1
    6339	6339	1
    6342	6343	2
    6345	6351	7
    6363	6364	2
    6369	6369	1
    6372	6372	1
    6375	6375	1
    6378	6379	2
    6381	6382	2
    6385	6385	1
    6392	6392	1
    6565	6565	1
    7089	7090	2
    7097	7098	2
    7101	7101	1
    7104	7104	1
    7282	7282	1
    8808	8808	1
    8860	8860	1
    8864	8865	2
    8868	8870	3
    8872	8873	2
    8876	8878	3
    8880	8882	3
    8884	8886	3
    8888	8890	3
    8892	8894	3
    8896	8898	3
    8900	8902	3
    8904	8907	4
    8921	8921	1
    8924	8925	2
    8950	8951	2
    8959	8959	1
    8962	8963	2
    8985	8985	1
    8990	8990	1
    8992	8992	1
    8994	8994	1
    8996	8998	3
    9000	9000	1
    9002	9007	6
    9010	9010	1
    9087	9087	1
    9089	9090	2
    9092	9093	2
    9102	9102	1
    9228	9228	1
    10019	10019	1
    10103	10103	1
    10105	10105	1
    10117	10117	1
    10119	10119	1
    10146	10147	2
    11568	11568	1
    11579	11579	1
    11582	11582	1
    11586	11586	1
    11589	11589	1
    11592	11593	2
    11596	11596	1
    11606	11606	1
    11610	11611	2
    11803	11816	14
    11822	11822	1
    11825	11826	2
    11841	11842	2
    11850	11850	1
    11853	11854	2
    11865	11870	6
    11874	11874	1
    11877	11877	1
    11885	11886	2
    11888	11889	2
    11900	11901	2
    11903	11904	2
    11907	11907	1
    11910	11911	2
    12058	12059	2
    12062	12062	1
    12066	12066	1
    12069	12070	2
    12074	12074	1
    12077	12078	2
    12081	12081	1
    12086	12086	1
    12089	12089	1
    12094	12094	1
    12105	12106	2
    12114	12114	1
    12117	12117	1
    12121	12121	1
    12124	12124	1
    12128	12128	1
    12133	12133	1
    12137	12137	1
    12141	12141	1
    12145	12146	2
    12149	12149	1
    12153	12154	2
    12186	12186	1
    12195	12196	2
    12199	12199	1
    12208	12209	2
    12211	12212	2
    12214	12220	7
    12222	12223	2
    12226	12228	3
    12230	12237	8
    12239	12240	2
    12242	12242	1
    12245	12247	3
    12260	12265	6
    12280	12286	7
    12288	12290	3
    12295	12295	1
    12298	12299	2
    12301	12307	7
    12309	12311	3
    12321	12321	1
    12323	12328	6
    12330	12334	5
    12336	12336	1
    12634	12634	1
    13036	13039	4
    13041	13043	3
    13045	13068	24
    13071	13072	2
    13126	13126	1
    13128	13129	2
    13172	13173	2
    13175	13176	2
    13190	13191	2
    13194	13196	3
    13198	13200	3
    13394	13394	1
    13420	13420	1
    13463	13463	1
    13466	13466	1
    13471	13471	1
    13473	13475	3
    13513	13514	2
    13517	13518	2
    13520	13521	2
    13523	13531	9
    13533	13535	3
    13541	13541	1
    13647	13647	1
    13702	13704	3
    13706	13707	2
    13710	13711	2
    13714	13716	3
    13718	13719	2
    13722	13743	22
    13757	13757	1
    13759	13759	1
    13761	13855	95
    13877	13877	1
    13879	13881	3
    13883	13997	115
    13999	14003	5
    14009	14009	1
    14013	14014	2
    14017	14018	2
    14021	14022	2
    14025	14027	3
    14029	14030	2
    14034	14035	2
    14038	14039	2
    14042	14043	2
    14045	14047	3
    14049	14051	3
    14055	14055	1
    14058	14068	11
    14070	14073	4
    14087	14089	3
    14091	14093	3
    14096	14097	2
    14100	14110	11
    14112	14114	3
    14123	14129	7
    14132	14133	2
    14141	14141	1
    14145	14145	1
    14148	14149	2
    14152	14152	1
    14184	14184	1
    14188	14188	1
    14191	14192	2
    14797	14798	2
    14800	14802	3
    14804	14806	3
    14809	14813	5
    14815	14815	1
    14826	14826	1
    14833	14834	2
    14836	14847	12
    14851	14851	1
    14853	14865	13
    14878	14880	3
    14892	14896	5
    14899	14899	1
    14901	14901	1
    14903	14905	3
    14907	14907	1
    14914	14922	9
    14925	14927	3
    15029	15029	1
    15033	15033	1
    15037	15037	1
    15040	15042	3
    15045	15051	7
    15055	15055	1
    15059	15060	2
    15063	15064	2
    15212	15212	1
    15401	15401	1
    15406	15406	1
    15408	15410	3
    16410	16411	2
    16446	16446	1
    22107	22109	3
    22124	22124	1
    22145	22147	3
    22203	22203	1
    22231	22231	1
    22237	22237	1
    22241	22241	1
    22244	22247	4
    22308	22308	1
    22311	22312	2
    22347	22347	1
    22356	22356	1
    22359	22359	1
    22384	22384	1
    22403	22403	1
    22406	22407	2
    22409	22409	1
    22412	22413	2
    22415	22415	1
    22418	22418	1
    22421	22421	1
    22425	22425	1
    22429	22429	1
    22439	22439	1
    22442	22442	1
    22445	22445	1
    22453	22453	1
    22459	22459	1
    22461	22461	1
    22549	22549	1
    22552	22552	1
    22556	22556	1
    22576	22576	1
    22675	22675	1
    22713	22713	1
    22717	22717	1
    22719	22719	1
    22722	22722	1
    22726	22727	2
    22731	22731	1
    22734	22734	1
    22738	22738	1
    22763	22763	1
    23972	23972	1
    24880	24880	1
    24885	24885	1
    25950	25950	1
    25953	25953	1
    30467	30467	1
    30470	30470	1
    30476	30477	2
    30479	30480	2
    30482	30484	3
    30495	30497	3
    33521	33521	1
    34164	34164	1
    34181	34181	1
    34185	34185	1
    34189	34189	1
    34639	34639	1
    34689	34690	2
    35278	35278	1
    35345	35345	1
    36989	36993	5
    37006	37006	1
    37009	37010	2
    41932	41932	1
    41939	41939	1
    41946	41946	1
    42225	42225	1
    43344	43344	1
    43433	43433	1
    43525	43525	1
    43534	43534	1
    43537	43538	2
    43540	43543	4
    43545	43545	1
    43548	43548	1
    43563	43564	2
    43566	43566	1
    43569	43569	1
    43575	43576	2
    43578	43578	1
    43581	43581	1
    43583	43583	1
    43585	43588	4
    43590	43593	4
    43595	43595	1
    43611	43611	1
    43614	43615	2
    43619	43619	1
    43621	43621	1
    43623	43623	1
    43625	43626	2
    43639	43639	1
    43786	43786	1
    43840	43840	1
    44128	44128	1
    44135	44135	1
    44146	44146	1
    44154	44154	1
    44157	44158	2
    44165	44165	1
    44176	44176	1
    44399	44399	1
    44425	44425	1
    44432	44432	1
    44435	44435	1
    44442	44442	1
    44446	44446	1
    44452	44453	2
    44459	44459	1
    44466	44466	1
    44470	44470	1
    44473	44473	1
    44477	44477	1
    44480	44480	1
    44484	44484	1
    44487	44487	1
    44490	44490	1
    44494	44494	1
    44497	44497	1
    44500	44501	2
    44511	44512	2
    44515	44515	1
    44518	44518	1
    44521	44522	2
    44586	44586	1
    44593	44593	1
    44616	44616	1
    44743	44743	1
    44755	44755	1
    44759	44759	1
    44762	44762	1
    44769	44769	1
    44776	44776	1
    44786	44786	1
    44789	44789	1
    44802	44802	1
    44805	44805	1
    44808	44808	1
    44818	44818	1
    44825	44825	1
    44875	44875	1
    44882	44882	1
    44886	44886	1
    44889	44889	1
    44910	44910	1
    44932	44932	1
    44943	44943	1
    44951	44951	1
    44961	44961	1
    45035	45035	1
    45042	45042	1
    45045	45045	1
    45059	45059	1
    45086	45086	1
    45089	45089	1
    45112	45112	1
    66123	66124	2
    66165	66165	1
    66198	66198	1
    81799	81799	1
    82152	82154	3
    82156	82160	5
    82162	82163	2
    82166	82166	1
    82255	82255	1
    82262	82263	2
    82273	82273	1
    82556	82556	1
    82817	82817	1
    83914	83914	1
    Voilà, il suffit à présent de lancer reflux_3 comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Dreflux_234_melange, Freflux_234_melange]=reflux_3(evenements_inter_Imp234_melange,evenements_Imp2_melange,evenements_Imp3_melange,evenements_Imp4_melange);
    Vous constaterez alors cette erreur que je n'arrive pas à résoudre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Undefined function or variable "Dref".
     
    Error in ==> reflux_3 at 47
    Dref;
    Je pense cela vient du if comme nous en avons discuté mais que pourrais-je faire pour éviter cette erreur ? Vous trouverez également les vecteurs en PJ pour les copier coller directement.
    Fichiers attachés Fichiers attachés

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    En fait je pense peut-être avoir résolue la question : je crois que ce message vient du fait que nbreflux ne s’incrémente pas tout simplement et qu'effectivement la condition n'est jamais vérifiée dans ce cas et donc Dref, Fref ne sont pas crées ! Je pense donc rajouter quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if((DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
        Dref(nbreflux,1)=DD1;
        Dref(nbreflux,2)=DD2;
        Dref(nbreflux,3)=DD3;
        Fref(nbreflux,1)=FF1;
        Fref(nbreflux,2)=FF2;
        Fref(nbreflux,3)=FF3;
        else
        Dref=[];
        Fref=[];
        end
    J'ai entendu parler du "try" "catch" mais je ne sais pas trop le manier dans ce contexte, comment pourrais-je le faire à la fois à cet endroit et tout au début lorsque je teste si le premier vecteur est vide ?

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    En même temps, les trois dernières lignes de ton code :

    ne servent absolument à rien.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Merci Dut, mais pourquoi ? Je veux renvoyer le résultat de Dref et Fref ! C'est pour cela que j'ai pensé à les réécrire à la fin. La dernière ligne c'est simplement pour mettre un point d'arrêt.

    D'autre part, j'ai parlé trop vite précédemment. En effet, dès que la condition du if n'est plus vérifée, Dref et Fref sont vidés et cela ne va pas car j'ai besoin de conserver les résultats issus de l'incrémentation de nbreflux. Décidément je n'arrive plus à m'en sortir.

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par abel413 Voir le message
    Merci Dut, mais pourquoi ? Je veux renvoyer le résultat de Dref et Fref ! C'est pour cela que j'ai pensé à les réécrire à la fin.
    Les variables renvoyées par la fonction sont celles qui apparaissent à gauche du nom de la fonction dans la première ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [Dref, Fref]=reflux_3(evenements_inter_Im12
    Citation Envoyé par abel413 Voir le message
    La dernière ligne c'est simplement pour mettre un point d'arrêt.
    La, je n'ai pas compris.

    Sinon pour revenir à ta question, le premier test avec isempty est inutile.
    Tu peux initialiser une variable vide et la remplir ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A = [];
     
    for n = 1:5
       A(n) = n;
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    J'ai mis spécialement ce A=0; pour y mettre un point d'arrêt lorsque j'utilise le debug mod. Et pour le if du début, en fait j'ai besoin de vérifier si le premier vecteur est vide (car d'après les résultats que j'obtiens en amont ce premier vecteur est parfois vide). Si je ne le test pas, le for ne peut pas démarrer je crois.

    Bref, mon problème est cerné mais je n'arrive pas à le résoudre : si le if((DD3>=DD2) & (DD2>=DD1)) est vérifié tout va bien, Dref et Fref sont bien crées mais la plupart du temps cette condition n'est pas forcément vérifiée dès le début ou à un instant donné. Que pourrais-je faire pour que le travail de la fonction se fasse ? Avec le else que j'ai rajouté, je me retrouve avec tout un tas de 0 dans Dref et Fref dès que le if n'est plus vrai.

    A mon avis pour résumer avec des mots car en code je n'arrive pas à le retranscrire : j'ai besoin que Dref et Fref se remplissent tant que nbreflux s'incrémente i.e. tant que la condition du if est vérifiée dans la boucle for. Si jamais elle n'est pas vérifiée, il faudrait que la boucle for continue tout de même puisque, je pense, rien n'interdit qu'au rang i suivant la condition ne soit pas vraie.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. nombre des paramètres d'une fonction
    Par kochfet dans le forum C++
    Réponses: 8
    Dernier message: 11/06/2013, 14h02
  2. Evaluations des paramètres d'une fonction
    Par WebPac dans le forum Langage
    Réponses: 15
    Dernier message: 06/10/2005, 09h46
  3. paramètres pour une fonction
    Par bul dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/05/2005, 07h49
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. Passer en paramètre d'une fonction (...)
    Par Captain_JS dans le forum C++
    Réponses: 5
    Dernier message: 03/11/2004, 07h18

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