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 commentaires

Mathieu NOE
Mathieu NOE le 21 Avr 2021
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
Léana TACKUY
Léana TACKUY le 23 Avr 2021
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

Connectez-vous pour commenter.

 Réponse acceptée

Mathieu NOE
Mathieu NOE le 23 Avr 2021

0 votes

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

4 commentaires

Léana TACKUY
Léana TACKUY le 28 Avr 2021
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 ?
Mathieu NOE
Mathieu NOE le 28 Avr 2021
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
Léana TACKUY
Léana TACKUY le 29 Avr 2021
Super ! Merci beaucoup !
Mathieu NOE
Mathieu NOE le 29 Avr 2021
Au plaisir et bonne continuation !

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!