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

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 2021년 4월 23일
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

댓글을 달려면 로그인하십시오.

 채택된 답변

Mathieu NOE
Mathieu NOE 2021년 4월 23일

0 개 추천

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

댓글 수: 4

Léana TACKUY
Léana TACKUY 2021년 4월 28일
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
Léana TACKUY
Léana TACKUY 2021년 4월 29일
Super ! Merci beaucoup !
Mathieu NOE
Mathieu NOE 2021년 4월 29일
Au plaisir et bonne continuation !

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

질문:

2021년 4월 20일

댓글:

2021년 4월 29일

Community Treasure Hunt

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

Start Hunting!