Loop and Conditional Statements
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Paulo Eduardo Beiral
le 24 Juin 2021
Commenté : Paulo Eduardo Beiral
le 24 Juin 2021
I've got two vectors 1x366 u and v, and I have to make a new 1x366 vector of the arctg of u and v.
But I've got a few conditions depending if the respective value of u and v are negative or positive.
Here's some of the code which I started writing, but I am stuck.
Thank you for any help.
for n = 1:length(u)
if u(n) <0 && v(n) < 0
atan(v./u);
elseif u(n) > 0 && v(n) < 0
atan(u./v) + 4.712;
elseif u(n) < 0 && v(n) > 0
atan(u./v) + 1.571;
elseif u(n) > 0 && v(n) > 0
atan(v./u) + 3.142;
end
end
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/663915/image.png)
2 commentaires
Scott MacKenzie
le 24 Juin 2021
Have you looked at atan2? This is the four-quadrant version of atan -- might be what you need.
Réponse acceptée
Steven Lord
le 24 Juin 2021
As written your code calls atan at most once per element of u but then throws that result away. You also have magic numbers that look like approximations to multiples of pi.
Instead I recommend using logical indexing.
base1 = atan(v./u);
base2 = atan(u./v);
result = NaN(size(u)); % determine what you want result to be if none of the cases hold
case1 = (u < 0) & (v < 0);
result(case1) = base1(case1);
case2 = (u > 0) & (v < 0);
result(case2) = base2(case2) + (3*pi/2);
% and similar for case3 and case4
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!