I wrote a while back about the function
f(t) = arctan(k tan(t)).
I keep running into this function. Has anybody given this function a name or studied it?
The direct implementation has a discontinuity at π/2 but I needed to extend it continuously. Using the two-argument version of inverse tangent fixes this. In Python, the implementation is
arctan2(k*sin(t), cos(t))
Here are plots of the direct and improved version.
Mathematica does not have a function ArcTan2
. Instead, it overloads the ArcTan
function to take either one or two arguments. But beware: the two-argument version of ArcTan
in Mathematica takes its arguments in the opposite order of functions like atan2
in C.
This extends the continuous range from [0, π/2] to [0, π], but there’s still a discontinuity at π. The trick to extending further is to reduce the argument mod π, subtract off the reduced argument, then add the original argument back in. In Python:
arctan2(k*sin(t%pi), cos(t%pi)) - t%pi + t
This plot shows the extension works.
Now the function extends smoothly to the entire real line.
Here’s a Mathematica implementation of the smooth extension.
g[x_, k_] := Module[{y = Mod[x, Pi]}, ArcTan[Cos[y], k Sin[y]] - y + x]
The function g(x, k) is an increasing function of x for fixed k ≠ 0, and its inverse is the same function replacing k with 1/k:
g( g(x, 1/k), k ) = x.
Here’s a plot of the function g with the linear trend subtracted, letting k vary from 1 to 10.
This was made with the following code.
Plot[Table[g[x, n] - x, {n, 1, 10}], {x, 0, Pi}]
As k increases, the amplitude increases, and the peaks move away from the center. You can confirm this by taking the derivative. The maximum occurs at arccos(√(k/(k+1))) and so the maxima locations converge to 0 as k → ∞. By symmetry the minima locations converge to π.You can also verify that the maximum value is arctan(√k), and so the maxima converge to π/2, and by symmetry the minima converge to -π/2;.
This plot looks similar to the plot of true anomaly for a highly elliptical orbit. I’m sure they’re related, but I haven’t worked out exactly how.
If we add back in the linear trend that we’d subtracted off, we see that for large k, g(x, k) is a smooth approximation to a stairstep function, analogous to the soft maximum function.
You could just add the appropriate “staircase” function to get the continuous extension:
g[x_, k_] := ArcTan[k Tan[x]] + Pi Floor[x/Pi + 1/2]