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 :

Condition d'arrêt pour while


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 47
    Points
    47
    Par défaut Condition d'arrêt pour while
    la Boucle While ne s arrête pas, je sais quoi faire pour la condition d arrêt
    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
    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
    epsilon=0.01;
    nt=1;
    NTmax=12;
    eina = 0.100;
    sigma= 0.2;
    es= 0.200;
    et= 0.300;
    state=[0;1;2];
    alpha=0.8;
    beta=0.3;
    Oalpha=alpha;%omega de alpha
    Obeta=beta;
     
    Talpha(NTmax,1)=alpha;
    for i=NTmax-1:-1:1
        Oalpha=alpha*Oalpha+(1-Oalpha)*beta;
        Talpha(i,1)=Oalpha;
    end
    %belief starting from beta
    Tbeta(1,1)=beta;
    for i=2:NTmax
        Obeta=alpha*Obeta+(1-Obeta)*beta;
        Tbeta(i,1)=Obeta;
    end
    %corresponding value of the belief and their indice in the value matrix
    Tbelief=[Tbeta;Talpha];
    for i=1:2*NTmax
        Tbelief(i,2)=i;
    end
    Tbelief(:,1);
     
     
    %Initialiser V et Vold
    Vold=ones(2*NTmax,NTmax);
    V=zeros(2*NTmax,NTmax);
    lambda=alpha;
    %boucle while
    while V-Vold <epsilon
        V_old=V;
        Olambda=alpha*lambda+(1-lambda)*beta
        for i=1:2*NTmax
            if Tbelief(i,1)==Olambda
                ind=Tbelief(i,2);
            end
        end
        if nt < NTmax
     
            Q0= -eina -sigma +Vold(ind,nt);
            Q1= -eina -es -sigma + Vold(1) ;
            Q2= -es - et - sigma +(1-lambda)*Vold(2*NTmax,nt)+ lambda*Vold(1,nt+1);
     
            Q=[Q0;Q1;Q2];
            [maxQ position]=max(Q);
            a=state(position);
     
        else (nt==NTmax);
            Q1= -eina -sigma + Vold(2*NTmax);
            maxQ=Q1 ;
            a= 1   ;
        end
        %la mise a jour de nt, V et lambda selon la valeur de a
        if a==0
            for i=1:2*NTmax
                if Tbelief(i,1)==lambda
                    ind2=Tbelief(i,2);
                end
                ind2=Tbelief(i,2);
            end
            ind2=Tbelief(i,2);
            V(ind2,nt)=Q0;
            lambda=Olambda;
            nt;
        end
     
        if a==1
            for i=1:2*NTmax
                if Tbelief(i,1)==lambda
                    ind3=Tbelief(i,2);
                end
                ind3=Tbelief(i,2);
            end
            ind3=Tbelief(i,2);
            ind3=Tbelief(i,2);
            V(ind3,nt)=Q1;
            lambda=alpha;
            nt;
        end
     
        if a==2
            for i=1:2*NTmax
                if Tbelief(i,1)==lambda
                    ind4=Tbelief(i,2)
                end
                ind4=Tbelief(i,2)
            end
            ind4=Tbelief(i,2)
            V(ind4,nt)=Q2;
            lambda=beta;
            nt=max(nt+1,NTmax-1);
        end
        if V==Vold
            V-Vold<epsilon;
        else
            V-Vold>epsilon;
        end
        a
        lambda
    end
    Merci d avance pour votre aide

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

    Quel est le but des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i = 1:2*NTmax
        if Tbelief(i,1) == lambda
            ind2 = Tbelief(i,2);
        end
        ind2 = Tbelief(i,2);
    end
    ind2 = Tbelief(i,2);
    de même pour ind3 et ind4 ? Il me semble que la fonction find te sera peut-être utile.
    Même question pour ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if V == Vold
            V-Vold<epsilon;
        else
            V-Vold>epsilon;
        end
    qui au final ne font strictement rien.

    Attention : Vold et V_old sont deux variables distinctes

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 47
    Points
    47
    Par défaut
    pour les premières lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for i = 1:2*NTmax
        if Tbelief(i,1) == lambda
            ind2 = Tbelief(i,2);
        end
        ind2 = Tbelief(i,2);
    end
    ind2 = Tbelief(i,2);
    je les ai remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for i=1:2*NTmax
        if Tbelief(i,1)==lambda
            ind2=Tbelief(i,2);
        end
    end
    V(ind2,nt)=Q0;
    lambda=Olambda
    nt;
    pour la dernière partie de V, j’ai voulu faire une condition d’arrêt mais ça marche pas

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux donc bien utiliser find à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:2*NTmax
        if Tbelief(i,1)==lambda
            ind2=Tbelief(i,2);
        end
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ind2 = find( Tbelief(:,2) == lambda );
    Attention toutefois à la comparaison de nombres flottants Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?
    Citation Envoyé par arij25 Voir le message
    pour la dernière partie de V, j’ai voulu faire une condition d’arrêt mais ça marche pas
    Comme je te l'ai dit, les lignes ne font strictement rien, tu produits le résultat de V-Vold<epsilon; ou V-Vold>epsilon; sans l'afficher ni le stocker dans une variable.
    Tu peux utiliser un flag comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    flag = true;
    while flag
        % ...
        if condition
            flag = ... % true ou false
        end
     
    end

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 47
    Points
    47
    Par défaut
    Merci pour tes réponses je vais les appliquer à mon code
    c'est gentil

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

Discussions similaires

  1. Condition d'arrêt d'une boucle WHILE
    Par el_gringo16 dans le forum Débuter
    Réponses: 4
    Dernier message: 15/06/2010, 18h09
  2. Problème condition d'arrêt boucles while et for
    Par Clairette29 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/06/2008, 11h51
  3. [VB.NET]Boucle infinie et condition d'arrêt
    Par Benbedo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/07/2006, 09h20
  4. Réponses: 6
    Dernier message: 15/06/2006, 15h15
  5. Condition sur requete pour Action MAcro
    Par hugo69 dans le forum Access
    Réponses: 4
    Dernier message: 12/10/2005, 12h24

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