# Trigonometric Functions¶

class sage.functions.trig.Function_arccos

The arccosine function.

EXAMPLES:

sage: arccos(0.5)
1.04719755119660
sage: arccos(1/2)
1/3*pi
sage: arccos(1 + 1.0*I)
0.904556894302381 - 1.06127506190504*I
sage: arccos(3/4).n(100)
0.72273424781341561117837735264


We can delay evaluation using the hold parameter:

sage: arccos(0,hold=True)
arccos(0)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arccos(0,hold=True); a.simplify()
1/2*pi


conjugate(arccos(x))==arccos(conjugate(x)), unless on the branch cuts, which run along the real axis outside the interval [-1, +1].:

sage: conjugate(arccos(x))
conjugate(arccos(x))
sage: var('y', domain='positive')
y
sage: conjugate(arccos(y))
conjugate(arccos(y))
sage: conjugate(arccos(y+I))
conjugate(arccos(y + I))
sage: conjugate(arccos(1/16))
arccos(1/16)
sage: conjugate(arccos(2))
conjugate(arccos(2))
sage: conjugate(arccos(-2))
pi - conjugate(arccos(2))


TESTS:

sage: arccos(x).operator()
arccos

class sage.functions.trig.Function_arccot

The arccotangent function.

EXAMPLES:

sage: arccot(1/2)
arccot(1/2)
sage: RDF(arccot(1/2))
1.1071487177940904
sage: arccot(1 + I)
arccot(I + 1)


We can delay evaluation using the hold parameter:

sage: arccot(1,hold=True)
arccot(1)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arccot(1,hold=True); a.simplify()
1/4*pi

class sage.functions.trig.Function_arccsc

The arccosecant function.

EXAMPLES:

sage: arccsc(2)
arccsc(2)
sage: RDF(arccsc(2))  # rel tol 1e-15
0.5235987755982988
sage: arccsc(1 + I)
arccsc(I + 1)


We can delay evaluation using the hold parameter:

sage: arccsc(1,hold=True)
arccsc(1)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arccsc(1,hold=True); a.simplify()
1/2*pi

class sage.functions.trig.Function_arcsec

The arcsecant function.

EXAMPLES:

sage: arcsec(2)
arcsec(2)
sage: arcsec(2.0)
1.04719755119660
sage: RDF(arcsec(2))  # abs tol 1e-15
1.0471975511965976
sage: arcsec(1 + I)
arcsec(I + 1)


We can delay evaluation using the hold parameter:

sage: arcsec(1,hold=True)
arcsec(1)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arcsec(1,hold=True); a.simplify()
0

class sage.functions.trig.Function_arcsin

The arcsine function.

EXAMPLES:

sage: arcsin(0.5)
0.523598775598299
sage: arcsin(1/2)
1/6*pi
sage: arcsin(1 + 1.0*I)
0.666239432492515 + 1.06127506190504*I


We can delay evaluation using the hold parameter:

sage: arcsin(0,hold=True)
arcsin(0)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arcsin(0,hold=True); a.simplify()
0


conjugate(arcsin(x))==arcsin(conjugate(x)), unless on the branch cuts which run along the real axis outside the interval [-1, +1].:

sage: conjugate(arcsin(x))
conjugate(arcsin(x))
sage: var('y', domain='positive')
y
sage: conjugate(arcsin(y))
conjugate(arcsin(y))
sage: conjugate(arcsin(y+I))
conjugate(arcsin(y + I))
sage: conjugate(arcsin(1/16))
arcsin(1/16)
sage: conjugate(arcsin(2))
conjugate(arcsin(2))
sage: conjugate(arcsin(-2))
-conjugate(arcsin(2))


TESTS:

sage: arcsin(x).operator()
arcsin

class sage.functions.trig.Function_arctan

The arctangent function.

EXAMPLES:

sage: arctan(1/2)
arctan(1/2)
sage: RDF(arctan(1/2))  # rel tol 1e-15
0.46364760900080615
sage: arctan(1 + I)
arctan(I + 1)
sage: arctan(1/2).n(100)
0.46364760900080611621425623146


We can delay evaluation using the hold parameter:

sage: arctan(0,hold=True)
arctan(0)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = arctan(0,hold=True); a.simplify()
0


conjugate(arctan(x))==arctan(conjugate(x)), unless on the branch cuts which run along the imaginary axis outside the interval [-I, +I].:

sage: conjugate(arctan(x))
conjugate(arctan(x))
sage: var('y', domain='positive')
y
sage: conjugate(arctan(y))
arctan(y)
sage: conjugate(arctan(y+I))
conjugate(arctan(y + I))
sage: conjugate(arctan(1/16))
arctan(1/16)
sage: conjugate(arctan(-2*I))
conjugate(arctan(-2*I))
sage: conjugate(arctan(2*I))
conjugate(arctan(2*I))
sage: conjugate(arctan(I/2))
arctan(-1/2*I)


TESTS:

sage: arctan(x).operator()
arctan

class sage.functions.trig.Function_arctan2

The modified arctangent function.

Returns the arc tangent (measured in radians) of $$y/x$$, where unlike arctan(y/x), the signs of both x and y are considered. In particular, this function measures the angle of a ray through the origin and $$(x,y)$$, with the positive $$x$$-axis the zero mark, and with output angle $$\theta$$ being between $$-\pi<\theta<=\pi$$.

Hence, arctan2(y,x) = arctan(y/x) only for $$x>0$$. One may consider the usual arctan to measure angles of lines through the origin, while the modified function measures rays through the origin.

Note that the $$y$$-coordinate is by convention the first input.

EXAMPLES:

Note the difference between the two functions:

sage: arctan2(1,-1)
3/4*pi
sage: arctan(1/-1)
-1/4*pi


This is consistent with Python and Maxima:

sage: maxima.atan2(1,-1)
3*%pi/4
sage: math.atan2(1,-1)
2.356194490192345


More examples:

sage: arctan2(1,0)
1/2*pi
sage: arctan2(2,3)
arctan(2/3)
sage: arctan2(-1,-1)
-3/4*pi


Of course we can approximate as well:

sage: arctan2(-1/2,1).n(100)
-0.46364760900080611621425623146
sage: arctan2(2,3).n(100)
0.58800260354756755124561108063


We can delay evaluation using the hold parameter:

sage: arctan2(-1/2,1,hold=True)
arctan2(-1/2, 1)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: arctan2(-1/2,1,hold=True).simplify()
-arctan(1/2)


The function also works with numpy arrays as input:

sage: import numpy
sage: a = numpy.linspace(1, 3, 3)
sage: b = numpy.linspace(3, 6, 3)
sage: atan2(a, b)
array([ 0.32175055,  0.41822433,  0.46364761])

sage: atan2(1,a)
array([ 0.78539816,  0.46364761,  0.32175055])

sage: atan2(a, 1)
array([ 0.78539816,  1.10714872,  1.24904577])


TESTS:

sage: x,y = var('x,y')
sage: arctan2(y,x).operator()
arctan2


Check if trac ticket #8565 is fixed:

sage: atan2(-pi,0)
-1/2*pi


Check if trac ticket #8564 is fixed:

sage: arctan2(x,x)._sympy_()
atan2(x, x)


Check if numerical evaluation works trac ticket #9913:

sage: arctan2(0, -log(2)).n()
3.14159265358979


Check if atan2(0,0) throws error of trac ticket #11423:

sage: atan2(0,0)
Traceback (most recent call last):
...
RuntimeError: arctan2_eval(): arctan2(0,0) encountered

sage: atan2(0,0,hold=True)
arctan2(0, 0)

sage: atan2(0,0,hold=True).n()
Traceback (most recent call last):
...
ValueError: arctan2(0,0) undefined


Check if trac ticket #10062 is fixed, this was caused by (I*I).is_positive() returning True:

sage: arctan2(0, I*I)
pi

class sage.functions.trig.Function_cos

The cosine function.

EXAMPLES:

sage: cos(pi)
-1
sage: cos(x).subs(x==pi)
-1
sage: cos(2).n(100)
-0.41614683654714238699756822950
cos


We can prevent evaluation using the hold parameter:

sage: cos(0,hold=True)
cos(0)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = cos(0,hold=True); a.simplify()
1


TESTS:

sage: conjugate(cos(x))
cos(conjugate(x))
sage: cos(complex(1,1))     # rel tol 1e-15
(0.8337300251311491-0.9888977057628651j)

class sage.functions.trig.Function_cot

The cotangent function.

EXAMPLES:

sage: cot(pi/4)
1
sage: RR(cot(pi/4))
1.00000000000000
sage: cot(1/2)
cot(1/2)
sage: cot(0.5)
1.83048772171245

sage: latex(cot(x))
\cot\left(x\right)


We can prevent evaluation using the hold parameter:

sage: cot(pi/4,hold=True)
cot(1/4*pi)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = cot(pi/4,hold=True); a.simplify()
1

class sage.functions.trig.Function_csc

The cosecant function.

EXAMPLES:

sage: csc(pi/4)
sqrt(2)
sage: RR(csc(pi/4))
1.41421356237310
sage: n(csc(pi/4),100)
1.4142135623730950488016887242
sage: csc(1/2)
csc(1/2)
sage: csc(0.5)
2.08582964293349

sage: latex(csc(x))
\csc\left(x\right)


We can prevent evaluation using the hold parameter:

sage: csc(pi/4,hold=True)
csc(1/4*pi)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = csc(pi/4,hold=True); a.simplify()
sqrt(2)

class sage.functions.trig.Function_sec

The secant function.

EXAMPLES:

sage: sec(pi/4)
sqrt(2)
sage: RR(sec(pi/4))
1.41421356237310
sage: n(sec(pi/4),100)
1.4142135623730950488016887242
sage: sec(1/2)
sec(1/2)
sage: sec(0.5)
1.13949392732455

sage: latex(sec(x))
\sec\left(x\right)


We can prevent evaluation using the hold parameter:

sage: sec(pi/4,hold=True)
sec(1/4*pi)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = sec(pi/4,hold=True); a.simplify()
sqrt(2)

class sage.functions.trig.Function_sin

The sine function.

EXAMPLES:

sage: sin(0)
0
sage: sin(x).subs(x==0)
0
sage: sin(2).n(100)
0.90929742682568169539601986591
sin


We can prevent evaluation using the hold parameter:

sage: sin(0,hold=True)
sin(0)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = sin(0,hold=True); a.simplify()
0


TESTS:

sage: conjugate(sin(x))
sin(conjugate(x))
sage: sin(complex(1,1))     # rel tol 1e-15
(1.2984575814159773+0.6349639147847361j)

class sage.functions.trig.Function_tan

The tangent function.

EXAMPLES:

sage: tan(pi)
0
sage: tan(3.1415)
-0.0000926535900581913
sage: tan(3.1415/4)
0.999953674278156
sage: tan(pi/4)
1
sage: tan(1/2)
tan(1/2)
sage: RR(tan(1/2))
0.546302489843790


We can prevent evaluation using the hold parameter:

sage: tan(pi/4,hold=True)
tan(1/4*pi)


To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = tan(pi/4,hold=True); a.simplify()
1


TESTS:

sage: conjugate(tan(x))
tan(conjugate(x))
sage: tan(complex(1,1))     # rel tol 1e-15
(0.2717525853195118+1.0839233273386946j)


#### Previous topic

Logarithmic functions

#### Next topic

Hyperbolic Functions