HP Forums

Full Version: Calculating ATAN2
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi all. I’ve developed a method to decompose complex numbers for Casio fx-115 Plus 1st & 2nd, 991ES 2nd and the 991EX Classwiz.

Since they all have the ARG function, I don’t need to write an ARG equivalent.

Sharp, on the other hand: the EL-W516T has the ARG function, but not the EL-W516X.

So, what would be the formula for ARG on the W516X?
Hello!

(12-02-2022 08:41 PM)Matt Agajanian Wrote: [ -> ]So, what would be the formula for ARG on the W516X?

I don't think there is a simple formula because one needs to take care of different cases separately. A matter of if...then...else. I don't know if the EL-W516X can handle that on it's own.
Wikipedia has an entire article about ATAN2: https://en.wikipedia.org/wiki/Atan2

Regards
Max
(12-02-2022 08:41 PM)Matt Agajanian Wrote: [ -> ]So, what would be the formula for ARG on the W516X?

I'm not familiar with that calculator but with Python you could use the following:
Code:
from math import pi, sqrt, atan

def arg(x, y):
    r = sqrt(x**2 + y**2)
    return pi if r + x == 0 else 2 * atan(y / (r + x))

It is based on the tangent half-angle formula:

\(
\begin{align}
\tan \tfrac{1}{2}\theta = \frac{\sin \theta}{1+\cos \theta}
\end{align}
\)
(12-02-2022 09:48 PM)Maximilian Hohmann Wrote: [ -> ]Hello!

(12-02-2022 08:41 PM)Matt Agajanian Wrote: [ -> ]So, what would be the formula for ARG on the W516X?

I don't think there is a simple formula because one needs to take care of different cases separately. A matter of if...then...else. I don't know if the EL-W516X can handle that on it's own.
Wikipedia has an entire article about ATAN2: https://en.wikipedia.org/wiki/Atan2

Regards
Max

Beat you to it. That Wkipedia, they have everything. Looks like I need to employ that piecewise function approach.

The Python script looks like it could do the trick. Maybe a good alternative.
(12-02-2022 08:41 PM)Matt Agajanian Wrote: [ -> ]So, what would be the formula for ARG on the W516X?

Why don't you use polar/rectangular conversion then RCL the value of theta from variable y?!?

Cs.
(12-02-2022 10:13 PM)Csaba Tizedes Wrote: [ -> ]
(12-02-2022 08:41 PM)Matt Agajanian Wrote: [ -> ]So, what would be the formula for ARG on the W516X?

Why don't you use polar/rectangular conversion then RCL the value of theta from variable y?!?

Cs.

Good Q.

Both P→R and R→P (→rθ, →xy) are disabled in COMPLEX mode). Second, I want preserve the quadrant value. Also, it looks like the registers don’t operate. Thus, I cannot recall the real component from X nor the imaginary component from Y.
How about using acos for atan2(y,x) ?
This covered edges cases, except for (y,x) == (0,0)

Code:
function sign(y) return signbit(y) and -1 or 1 end
function myatan2(y,x) return acos(x/hypot(x,y)) * sign(y) end

lua> function test(y,x) return atan2(y,x), myatan2(y,x) end

lua> test(4,3) --> 0.9272952180016122      0.9272952180016123
lua> test(4,-3) --> 2.214297435588181      2.214297435588181
lua> test(-4,3) --> -0.9272952180016122      -0.9272952180016123
lua> test(-4,-3) --> -2.214297435588181      -2.214297435588181

X axis:

lua> test(0, 1) --> 0      0
lua> test(0,-1) --> 3.141592653589793      3.141592653589793

Y axis:

lua> test(1, 0) --> 1.5707963267948966      1.5707963267948968
lua> test(-1,0) --> -1.5707963267948966      -1.5707963267948968
(12-03-2022 03:43 AM)Albert Chan Wrote: [ -> ]How about using acos for atan2(y,x) ?
This covered edges cases, except for (y,x) == (0,0)

Code:
function sign(y) return signbit(y) and -1 or 1 end
function myatan2(y,x) return acos(x/hypot(x,y)) * sign(y) end

lua> function test(y,x) return atan2(y,x), myatan2(y,x) end

lua> test(4,3) --> 0.9272952180016122      0.9272952180016123
lua> test(4,-3) --> 2.214297435588181      2.214297435588181
lua> test(-4,3) --> -0.9272952180016122      -0.9272952180016123
lua> test(-4,-3) --> -2.214297435588181      -2.214297435588181

X axis:

lua> test(0, 1) --> 0      0
lua> test(0,-1) --> 3.141592653589793      3.141592653589793

Y axis:

lua> test(1, 0) --> 1.5707963267948966      1.5707963267948968
lua> test(-1,0) --> -1.5707963267948966      -1.5707963267948968

Interesting! I worked out another formula, coincidentally with x=+/-3 and y=+/-4. I tested it with variations of (+/-3,+/-4) and received results which reflected the correct quadrant.
There is no need to use COMPLEX mode. Just add/substract like vectors in STAT mode, then store (sumX, sumY) into (X, Y) and you can do polar conversion. The complex mode is very limited, I guess all operations can be done without it in STAT+NORMAL mode.



(12-02-2022 11:21 PM)Matt Agajanian Wrote: [ -> ]
(12-02-2022 10:13 PM)Csaba Tizedes Wrote: [ -> ]Why don't you use polar/rectangular conversion then RCL the value of theta from variable y?!?

Cs.

Good Q.

Both P→R and R→P (→rθ, →xy) are disabled in COMPLEX mode). Second, I want preserve the quadrant value. Also, it looks like the registers don’t operate. Thus, I cannot recall the real component from X nor the imaginary component from Y.
(12-03-2022 07:10 AM)Csaba Tizedes Wrote: [ -> ]There is no need to use COMPLEX mode. Just add/substract like vectors in STAT mode, then store (sumX, sumY) into (X, Y) and you can do polar conversion. The complex mode is very limited, I guess all operations can be done without it in STAT+NORMAL mode.

Aha (not the 80s band).

That was my second thought--adapt the Vector Arithmetic conversion, summation, recall, and conversion routine introduced in the HP-21 manual. Yes. That is the definitive option.

My intention was that:

Since polar/rectangular representation and complex numbers kinda go together, to me, it made sense that P/R conversion and representation would be functional in complex mode.

On another note, I agree and find it odd that complex mode is quite limiting about the functions allowed in that mode. Just a thought: perhaps because these Casio, Sharp, and TI models are targeted and priced for students, hence, the limited complex mode functionality.

I guess we're spoiled because since the 15C, a whole range of functions were operational in complex mode.
Reference URL's