Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 14-06-2011 20:46:12
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Vérifier continuellement une condition
Bonsoir,
Le principe de mon programme est de travailler avec la matrice dont sa somme est supérieure et de vérifier après chaque mise de zéro dans Matrice1 ou bien Matrice2,si la condition est encore présente,sinon je passe à l'autre Matrice.
Le problème est que dans l’exécution, il reste figé sur somme1=0.
Pourquoi et comment je sors de la boucle?
epsilon=0.01;
contpos=0;
contneg=0;
MASQUE1=ones(256,256);
MASQUE2=ones(256,256);
Matrice1=abs(TF4).*cos(angle(TF4) - angle(TF1))-epse*abs(TF1);
Matrice2=abs(TF5).*cos(angle(TF5) - angle(TF1))-epse*abs(TF1);
somme1 = sum(Matrice1(:));
somme2 = sum(Matrice2(:));
while abs(somme2-somme1)>epsilon
while somme1>somme2
if(somme1>0)
[maximum1 indice1] = max(Matrice1(:));
Matrice1(indice1) = 0;
MASQUE1(indice1) = 0;
contpos=contpos+1;
end
if(somme1<0)
[minimum1 indice1] = min(Matrice1(:));
Matrice1(indice1) = 0;
MASQUE1(indice1) = 0;
contneg=contneg+1;
end
somme1 = sum(Matrice1(:))
end
while somme1<somme2
if(somme2>0)
[maximum2 indice2] = max(Matrice2(:));
Matrice2(indice2) = 0;
MASQUE2(indice2) = 0;
contpos=contpos+1;
end
if(somme2<0)
[minimum2 indice2] = min(Matrice2(:));
Matrice2(indice2) = 0;
MASQUE2(indice2) = 0;
contneg=contneg+1;
end
somme2 = sum(Matrice2(:))
end
end
Merci
Hors ligne
#2 15-06-2011 10:04:41
- dartagnan
- Invité
Re : Vérifier continuellement une condition
Bonjour,
Quel est le langage de programmation ?
Lorsque ça bloque sur somme1=0, quelle est la valeur de somme2 ?
Cordialement
#3 15-06-2011 10:06:48
- dartagnan
- Invité
Re : Vérifier continuellement une condition
edit : As-tu essayé de mettre une inégalité large et une inégalité stricte au lieu de 2 inégalités strictes ?
#4 15-06-2011 10:25:34
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Re : Vérifier continuellement une condition
Re,
Quel est le langage de programmation ?
Matlab
Lorsque ça bloque sur somme1=0, quelle est la valeur de somme2 ?
J'ai pas la possibilité de savoir puisque le programme se bloque.
As-tu essayé de mettre une inégalité large et une inégalité stricte au lieu de 2 inégalités strictes ?
Je suis obligé suivant l'objectif de mon travail d'utiliser des inégalités strictes.
Hors ligne
#5 15-06-2011 12:05:09
- dartagnan
- Invité
Re : Vérifier continuellement une condition
Quel est l'objectif de ton travail ?
Quelque chose comme ça peut-être :
if(somme1==0)
break;
end
#6 15-06-2011 12:34:34
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Re : Vérifier continuellement une condition
Quel est l'objectif de ton travail ?
L'objectif de mon programme est de construire un masque binaire et cela à travers des mises de zéros si et seulement si somme1(2) est strictement supérieure ou inférieure à zéro.
Quelque chose comme ça peut-être :
if(somme1==0)
break;
end
Oui,j'ai déjà essayé cette solution,je me trouve toujours devant le même problème.
end
if(somme1==0),break,end
end
Dernière modification par stormin (15-06-2011 12:35:10)
Hors ligne
#7 16-06-2011 10:49:26
- dartagnan
- Invité
Re : Vérifier continuellement une condition
Où est-ce que tu insère le break ? Est-ce que ceci fonctionne ?
epsilon=0.01;
contpos=0;
contneg=0;
MASQUE1=ones(256,256);
MASQUE2=ones(256,256);
Matrice1=abs(TF4).*cos(angle(TF4) - angle(TF1))-epse*abs(TF1);
Matrice2=abs(TF5).*cos(angle(TF5) - angle(TF1))-epse*abs(TF1);
somme1 = sum(Matrice1(:));
somme2 = sum(Matrice2(:));
while abs(somme2-somme1)>epsilon
while abs(somme1)>abs(somme2)
if(somme1>0)
[maximum1 indice1] = max(Matrice1(:));
Matrice1(indice1) = 0;
MASQUE1(indice1) = 0;
contpos=contpos+1;
end%if
if(somme1<0)
[minimum1 indice1] = min(Matrice1(:));
Matrice1(indice1) = 0;
MASQUE1(indice1) = 0;
contneg=contneg+1;
end%if
if(somme1==0)
break;
end%if
somme1 = sum(Matrice1(:))
end%while1
while abs(somme1)<abs(somme2)
if(somme2>0)
[maximum2 indice2] = max(Matrice2(:));
Matrice2(indice2) = 0;
MASQUE2(indice2) = 0;
contpos=contpos+1;
end%if
if(somme2<0)
[minimum2 indice2] = min(Matrice2(:));
Matrice2(indice2) = 0;
MASQUE2(indice2) = 0;
contneg=contneg+1;
end%if
if(somme2==0)
break;
end%if
somme2 = sum(Matrice2(:))
end%while2
end%while_glob
end
#8 16-06-2011 13:22:02
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Re : Vérifier continuellement une condition
Re,
Merci pour la réponse,maintenant il fonctionne correctement,et je pouvais sortir de la boucle,mais juste après la boucle,il faut que je calcule une capacité de discrimination:
Q=fftshift(ifft2(CC.*MASQUE));
G=abs(Q).^2;
cont=contpos+contneg
Q1=fftshift(ifft2(AAuto_Cor.*MASQUE));
G1=abs(Q1).^2;
Q2=fftshift(ifft2(X_XCor1.*MASQUE));
G2=abs(Q2).^2;
Q3=fftshift(ifft2(X_XCor2.*MASQUE));
G3=abs(Q3).^2;
[M11 idx1] = max(G1(:));
[M12 idx2] = max(G2(:));
[M13 idx3] = max(G3(:));
DC1=M12/M11
DC2=M13/M11
En variant epse de 0 à 1,je dois trouver par exemple pour epse=1,une des deux DC qui est égale à 1,mais avec ce programme,j'ai trouvé 0.2.
Je pense que ce problème est du à l'utilisation de abs(somme1)<abs(somme2) au lieu de somme1<somme2,et avec cette dernière condition sans abs,je reviens au problème de somme1=0.
Merci
Hors ligne
#9 29-06-2011 17:53:11
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
Re : Vérifier continuellement une condition
Bonsoir,
Yoshi,j'ai besoin de votre aide à trouver un livre (de Jean-Louis Tribillon dont le titre est:Traitement optique de l'information et reconnaissance des formes par voie optique) sous format pdf ou word ,pour bien comprendre mes programmes.
Merci
Hors ligne
Pages : 1