MATLAB Answers

how to have the final vector?

1 view (last 30 days)
Lola SE
Lola SE on 29 Mar 2020
Commented: Lola SE on 29 Mar 2020
Hi all,
I've written the following script to calculate the wind direction from u and v components, taking into consideration the quadrants.
The problem is that I should have the final vector for the plot.
Where am I mistaken?
Note: U10 and V10 have a dimension of (1*120).
Thanks for the help.
for i = 1:length (U10);
if(V10 > 0)
kk = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 180);
elseif (U10 < 0 & V10 < 0) ;
kk = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 0);
elseif (U10 > 0 & V10 < 0);
kk = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 360);
end
end

  2 Comments

David Hill
David Hill on 29 Mar 2020
You should look at the atan2() or atan2d() functions.
Lola SE
Lola SE on 29 Mar 2020
Will check them, thanks a lot

Sign in to comment.

Accepted Answer

Daemonic
Daemonic on 29 Mar 2020
Is the purpose of your loop to compare the values of V10 and U10 element-wise? If so, you would need to modify slightly:
if V10(i) > 0 %compares the i'th element of V10 to 0
Secondly is kk the vector you're trying to create? If so, you'd need to make a similar adjustment (also, with a small vector it doesn't matter so much, but for larger ones, you'll speed things up if you pre-populate kk). Example:
kk = nan(size(U10)); %creates empty vector for kk
for i = 1:length (U10);
if(V10(i) > 0) %compares the i'th element of V10 to 0
kk(i) = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 180);
elseif (U10(i) < 0 & V10(i) < 0) ;
kk(i) = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 0);
elseif (U10(i) > 0 & V10(i) < 0);
kk(i) = ((180 / pi) * atan(U10(:,i)/V10(:,i)) + 360);
end
end
Sorry if I misunderstan your question...

  1 Comment

Lola SE
Lola SE on 29 Mar 2020
Thank you very much!!

Sign in to comment.

More Answers (1)

Ameer Hamza
Ameer Hamza on 29 Mar 2020
Edited: Ameer Hamza on 29 Mar 2020
Use atan2, it takes care of the quadrants
result = atan2(U10, V10)

  1 Comment

Lola SE
Lola SE on 29 Mar 2020
much appreciated, will look at that now

Sign in to comment.


Translated by