Problème avec une boucle if

Bonjour,
J’ai un petit problème avec une boucle if, car mes conditions ne sont pas prises en compte. Je souhaite calculer la direction de courants à partir des composantes Nord et Est de la vitesse du courant. J’ai donc 4 conditions pour calculer cette direction suivant le signe de vitesse nord et vitesse Est. Le soucis avec ma boucle c’est que toutes les directions sont calculées avec ma première instruction, donc c’est faux, et je ne comprends pas pourquoi...
Si l’un de vous pouvait me dire ce qui ne va pas dans ma boucle, ce serait vraiment cool !
for r=1:1:433
for c=1:1:20
if Vx_space(r,c)>0 && Vy_space(r,c)>0
tangente_a=Vx_space./Vy_space;
alpha=atand(tangente_a);
direction_Vr=alpha;
elseif Vx_space(r,c)>0 && Vy_space(r,c)<0
tangente_b=Vy_space./Vx_space;
alpha=atand(tangente_b);
direction_Vr=90+abs(alpha);
elseif Vx_space(r,c)<0 && Vy_space(r,c)<0
tangente_c=Vx_space./Vy_space;
alpha=atand(tangente_c);
direction_Vr=alpha+180;
elseif Vx_space(r,c)<0 && Vy_space(r,c)>0
tangente_d=Vy_space./Vx_space;
alpha=atand(tangente_d);
direction_Vr=270+abs(alpha);
end
end
end

2 Comments

Bonjour Léana
je ne vois pas d'erreur dans le code.
J'ai fais un test basique en entrant des données aléatoires (négatif et positif) et on passe bien dans les 4 conditions
es tu sûre que tu as des données Vx_space ou Vy_space < 0 dans tes données ?
Mon test :
Vx_space = randn(10,12);
Vy_space = randn(10,12);
for r=1:1:10%433
for c=1:1:12%20
if Vx_space(r,c)>0 && Vy_space(r,c)>0
tangente_a=Vx_space./Vy_space;
alpha=atand(tangente_a);
direction_Vr=alpha;
a = 1
elseif Vx_space(r,c)>0 && Vy_space(r,c)<0
tangente_b=Vy_space./Vx_space;
alpha=atand(tangente_b);
direction_Vr=90+abs(alpha);
a = 2
elseif Vx_space(r,c)<0 && Vy_space(r,c)<0
tangente_c=Vx_space./Vy_space;
alpha=atand(tangente_c);
direction_Vr=alpha+180;
a = 3
elseif Vx_space(r,c)<0 && Vy_space(r,c)>0
tangente_d=Vy_space./Vx_space;
alpha=atand(tangente_d);
direction_Vr=270+abs(alpha);
a = 4
end
end
end
donne les résultats suivants :
a =
4
a =
2
a =
4
a =
4
a =
1
a =
3
a =
2
a =
1
a =
4
a =
4
a =
1
a =
1
a =
4
a =
2
a =
2
a =
2
a =
2
a =
1
a =
3
a =
1
a =
1
a =
3
a =
3
a =
1
a =
2
a =
2
a =
1
a =
1
a =
4
a =
4
a =
3
a =
2
a =
2
a =
1
a =
1
a =
1
a =
3
a =
3
a =
1
a =
2
a =
1
a =
4
a =
2
a =
1
a =
4
a =
3
a =
3
a =
2
a =
2
a =
4
a =
4
a =
2
a =
1
a =
4
a =
3
a =
3
a =
4
a =
3
a =
4
a =
1
a =
1
a =
2
a =
3
a =
2
a =
2
a =
2
a =
1
a =
4
a =
2
a =
3
a =
2
a =
4
a =
3
a =
2
a =
4
a =
3
a =
2
a =
2
a =
2
a =
1
a =
4
a =
4
a =
1
a =
4
a =
1
a =
4
a =
2
a =
2
a =
2
a =
1
a =
1
a =
3
a =
2
a =
3
a =
3
a =
1
a =
4
a =
3
a =
4
a =
3
a =
1
a =
4
a =
4
a =
3
a =
1
a =
3
a =
2
a =
4
a =
3
a =
2
a =
1
a =
3
a =
4
a =
3
a =
1
a =
3
a =
3
a =
2
a =
3
a =
2
Bonjour Mathieu,
Je te remercie ! Mais du coup je ne comprends pas pourquoi ça ne marche pas avec mes variables parce qu'il y a bien des valeurs négatives dans mes 2 matrices

Sign in to comment.

 Accepted Answer

Mathieu NOE
Mathieu NOE on 23 Apr 2021

0 votes

Bonjour Léana
est ce que tu peux partager l'ensemble du code + données d'entrée ?

4 Comments

Bonjour Mathieu,
J’ai constitué mes 2 matrices de vitesses à partir de 2 fichiers, un au format .v1 (vitesse x) et l’autre au format .v2 (vitesse y). Ces 2 formats ne sont pas acceptés sur ce site du coup je mets mes 2 variables au format Matlab. Le script complet est celui que j’ai publié. Le problème pourrait donc venir de la conversion des fichiers .v1 et .v2 en .mat ?
le problème était devant mes yeux et je ne l'ai pas identifié au premier coup d'oeil, je baisse !
en fait dans les 4 conditions , tu ne considère pas les cas ou l'une ou les deux variables soient exactement égale à zéro
pour corriger cela , il faut que certaines condition soient en >= ou <= au lieu de < ou > strict
testé et validé : dans cette version du code on passe bien une et une seule fois et à chaque itérationdans l'une des conditions
tu pourras enlever toutes les lignes marquées : % for debug
load Vx_space.mat
load Vy_space.mat
k = 0; % for debug
for r=1:433
for c=1:20
k = k+1; % for debug
a(1:4,k) = [0 0 0 0]; % for debug
if Vx_space(r,c)>=0 && Vy_space(r,c)>=0
tangente_a=Vx_space./Vy_space;
alpha=atand(tangente_a);
direction_Vr=alpha;
a(1,k) = 1; % for debug
elseif Vx_space(r,c)>=0 && Vy_space(r,c)<0
tangente_b=Vy_space./Vx_space;
alpha=atand(tangente_b);
direction_Vr=90+abs(alpha);
a(2,k) = 1; % for debug
elseif Vx_space(r,c)<0 && Vy_space(r,c)<=0
tangente_c=Vx_space./Vy_space;
alpha=atand(tangente_c);
direction_Vr=alpha+180;
a(3,k) = 1; % for debug
elseif Vx_space(r,c)<0 && Vy_space(r,c)>0
tangente_d=Vy_space./Vx_space;
alpha=atand(tangente_d);
direction_Vr=270+abs(alpha);
a(4,k) = 1; % for debug
end
end
end
figure(1),imagesc(a); % for debug
figure(2),plot(sum(a,1),'d-'); % for debug
Super ! Merci beaucoup !
Au plaisir et bonne continuation !

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!