Changing the atan function so that it ranges from 0 to 2*pi
406 visualizzazioni (ultimi 30 giorni)
I know that the matlab atan function returns values in the range of -pi/2 to pi/2. How do i change it so that it goes over the full range 0 to 2*pi?
My first attempt was using a while loop, but it was incorrect.
I need to write a function mfile to set the built-in matlab function atan in the range of 0 to 2*pi without using atan2. im new to matlab so im unsure of what to do.
Più risposte (4)
Paulo Silva il 12 Giu 2011
The Wikipedia got all explained, you just need to do the code, it's very simple.
if nargin==1 %just in case the user only gives the value of y myatan(y)
if y>=0 & x<0
if y<0 & x<0
if y>0 & x==0
if y<0 & x==0
Kent Leung il 21 Mar 2018
Modificato: Kent Leung il 21 Mar 2018
Better late than never. (Also posting as a future reference to myself.) The function below accepts y & x as vectors in Matlab. Rather than using 'if' statements, the below might be faster if there is some parallelization implemented in the built-in index searching.
Note: I have a slight disagreement with the above for the x>0 & y<0 case, as well as the for x=0 & y<0 case. The code below gives 0 to 2pi.
%---returns an angle in radians between 0 and 2*pi for atan
v(x>0 & y>=0) = atan( y(x>0 & y>=0) ./ x(x>0 & y>=0) );
v(x>0 & y<0) = 2*pi+atan( y(x>0 & y<0) ./ x(x>0 & y<0) );
v(x<0 & y>=0) = pi+atan( y(x<0 & y>=0) ./ x(x<0 & y>=0) );
v(x<0 & y<0) = pi+atan( y(x<0 & y<0) ./ x(x<0 & y<0) );
v(x==0 & y>=0) = pi/2;
v(x==0 & y<0) = 3/2*pi;