### Navigation

- index
- modules |
- next |
- previous |
- Functions »

# Trigonometric Functions

class `sage.functions.trig.``Function_arccos`

  Bases: `sage.symbolic.function.GinacFunction`

  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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  The arcsecant function.

  EXAMPLES:

      sage: arcsec(2)
      arcsec(2)
      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`

  Bases: `sage.symbolic.function.GinacFunction`

  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`

  Bases: `sage.symbolic.function.GinacFunction`

  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`

  Bases: `sage.symbolic.function.GinacFunction`

  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`

  Bases: `sage.symbolic.function.GinacFunction`

  The cosine function.

  EXAMPLES:

      sage: cos(pi)
      -1
      sage: cos(x).subs(x==pi)
      -1
      sage: cos(2).n(100)
      -0.41614683654714238699756822950
      sage: loads(dumps(cos))
      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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  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`

  Bases: `sage.symbolic.function.BuiltinFunction`

  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`

  Bases: `sage.symbolic.function.GinacFunction`

  The sine function.

  EXAMPLES:

      sage: sin(0)
      0
      sage: sin(x).subs(x==0)
      0
      sage: sin(2).n(100)
      0.90929742682568169539601986591
      sage: loads(dumps(sin))
      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`

  Bases: `sage.symbolic.function.GinacFunction`

  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)

### Navigation

- index
- modules |
- next |
- previous |
- Functions »