Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 15-05-2011 15:40:02

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Boucle while (Algorithme)

Bonjour,

Je sais bien que vous êtes pas spécialisé en Matlab,mais ma question est à propos de comment faire la boucle,j'aimerais avoir l'idée ou bien savoir pourquoi mon programme ne fonctionne pas.

Dans Matrice,je devrais travailler avec la transformée de Fourier du max et min,je me bloque sur le fait que comment après chaque fois que je mets un zéro,vérifie si le max et min restent encore max et min,sinon,je dois chercher le nouveau max et min pour utiliser la transformée de Fourier de nouveau max et min.

J'ai fait la tentative suivante:

epse=0.01;
epsilon = 0.01;
MASQUE=ones(256,256);

somme = sum(MASQUE(:));

while(abs(somme)>epsilon)

    Auto_Cor1=Auto_Cor1.*MASQUE;
    G1=abs(Auto_Cor1).^2;

    Auto_Cor2=Auto_Cor2.*MASQUE;
    G2=abs(Auto_Cor2).^2;

    Auto_Cor3=Auto_Cor3.*MASQUE;
    G3=abs(Auto_Cor3).^2;

    XCor1=XCor1.*MASQUE;
    G4=abs(XCor1).^2;

    XCor2=XCor2.*MASQUE;
    G5=abs(XCor2).^2;

    XCor3=XCor3.*MASQUE;
    G6=abs(XCor3).^2;

    [A1 ID1] = max(Auto_Cor1(:));
    [A2 ID2] = max(Auto_Cor2(:));
    [A3 ID3] = max(Auto_Cor3(:));

    [M1 id1] = max(XCor1(:));
    [M2 id2] = max(XCor2(:));
    [M3 id3] = max(XCor3(:));

    M123=[M1 M2 M3];
    A123=[A1 A2 A3];

    MAXC=max(M123)
    MINA=min(A123)

    if     MAXC==M1
        trans_four_C=TF7;
    elseif MAXC==M2
        trans_four_C=TF8;
    else
        trans_four_C=TF9;
    end

    if     MINA==A1
        trans_four_A=TF1;
    elseif MINA==A2
        trans_four_A=TF2;
    else
        trans_four_A=TF3;
    end

    %% DC
    Matrice=abs(trans_four_C).*cos(angle(trans_four_C) - angle(trans_four_A))-epse*abs(trans_four_A);

    somme = sum(Matrice(:))

    if (abs(somme)<epsilon),break,end

    if somme>0
        [maximum indice] = max(Matrice(:));
        Matrice(indice) = 0;
        MASQUE(indice) = 0;
    else
        [minimum indice] = min(Matrice(:));
        Matrice(indice) = 0;
        MASQUE(indice) = 0;
    end
    somme = sum(Matrice(:));
end

Le programme reste bloqué dans l'exécution, et lorsque je vérifie avec Debug l'indice du MASQUE, je trouve à chaque fois que ce dernier ne change pas.

Merci

Hors ligne

#2 15-05-2011 15:51:57

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : Boucle while (Algorithme)

Re,

et si tu commençais par répondre ici :
http://www.bibmath.net/forums/viewtopic.php?id=4624

sinon, je ne vois pas pourquoi je me creuserais la cervelle pour quelqu'un qui ne réagit pas même quand il a obtenu une réponse...

Si ça ne marche pas, une piste est de lire les messages d'erreur et de les fournir.

Sinon, on réalise ce travail sur papier avec une petit matrice exemple et on exécute pas à pas les étapes lesquelles
est censé passer ton programme.
Puis dans ton programme, à chaque étape correspondante, tu poses un "mouchard", c'est à dire n'importe quoi qui te dira si ton programme passe bien par là, et si est le résultat attendu est le bon...
Tu comprends ?..
Et ça c'est valable dans n'importe quel langage de programmation.

T'es quand même du genre obstiné : je ne connais pas matlab, mais je t'ai donné le lien d'un forum où on parle spécifiquement de Matlab et où tu es sûr à 100 % d'avoir la bonne réponse et tu préfères poser la question ici...
En plus, il se trouve que je sais pas (ou plus ?) ce qu'est une "transformée de Fourier"
J'avoue que je ne comprends pas...

Et là tu vas répondre dans une semaine, en ouvrant une autre discussion sur un autre sujet ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 15-05-2011 16:33:33

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Re : Boucle while (Algorithme)

Merci pour la réponse,

 

Yoshi a écrit :

T'es quand même du genre obstiné : je ne connais pas matlab, mais je t'ai donné le lien d'un forum où on parle spécifiquement de Matlab et où tu es sûr à 100 % d'avoir la bonne réponse et tu préfères poser la question ici...

J'ai signalé dans mon message,que je sais bien que vous êtes pas spécialisé en Matlab?Pour le forum developpez,j'ai déjà poser la question,mais sans réponse,et si j'insiste a poster ma question dans ce forum, c'est pour deux raisons :
1-Je suis convaincu,de vos compétences.
2-Mon problème est algorithmique.(Je parle de la logique de boucle )

Yoshi a écrit :

Sinon, on réalise ce travail sur papier avec une petit matrice exemple et on exécute pas à pas les étapes lesquelles
est censé passer ton programme.
Puis dans ton programme, à chaque étape correspondante, tu poses un "mouchard", c'est à dire n'importe quoi qui te dira si ton programme passe bien par là, et si est le résultat attendu est le bon....

Oui,j'ai compris ,et j'ai déja fait cela,je trouve que la variable :

MASQUE garde la même indice,c'est pour cette raison que l'exécution reste coincer.

Hors ligne

#4 16-05-2011 13:02:56

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : Boucle while (Algorithme)

Re,

Pour t'aider efficacement, il faudrait déjà que je comprenne ce que fait chacune de ces lignes, por ce n'est pas le cas :

    Auto_Cor1=Auto_Cor1.*MASQUE;
    G1=abs(Auto_Cor1).^2;

    Auto_Cor2=Auto_Cor2.*MASQUE;
    G2=abs(Auto_Cor2).^2;

    Auto_Cor3=Auto_Cor3.*MASQUE;
    G3=abs(Auto_Cor3).^2;

    XCor1=XCor1.*MASQUE;
    G4=abs(XCor1).^2;

    XCor2=XCor2.*MASQUE;
    G5=abs(XCor2).^2;

    XCor3=XCor3.*MASQUE;
    G6=abs(XCor3).^2;

    [A1 ID1] = max(Auto_Cor1(:));
    [A2 ID2] = max(Auto_Cor2(:));
    [A3 ID3] = max(Auto_Cor3(:));

    [M1 id1] = max(XCor1(:));
    [M2 id2] = max(XCor2(:));
    [M3 id3] = max(XCor3(:));

    M123=[M1 M2 M3];
    A123=[A1 A2 A3];

    MAXC=max(M123)
    MINA=min(A123)

Va donc voir mon programme modifié ici : http://www.bibmath.net/forums/viewtopic.php?id=4624 et les explications qui vont avec...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quaranteneuf plus cinquante neuf
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums