Trigonometric functions¶
- class sage.functions.trig.Function_arccos[source]¶
Bases:
GinacFunction
The arccosine function.
EXAMPLES:
sage: arccos(0.5) # needs sage.rings.real_mpfr 1.04719755119660 sage: arccos(1/2) # needs sage.symbolic 1/3*pi sage: arccos(1 + 1.0*I) # needs sage.symbolic 0.904556894302381 - 1.06127506190504*I sage: arccos(3/4).n(100) # needs sage.symbolic 0.72273424781341561117837735264
>>> from sage.all import * >>> arccos(RealNumber('0.5')) # needs sage.rings.real_mpfr 1.04719755119660 >>> arccos(Integer(1)/Integer(2)) # needs sage.symbolic 1/3*pi >>> arccos(Integer(1) + RealNumber('1.0')*I) # needs sage.symbolic 0.904556894302381 - 1.06127506190504*I >>> arccos(Integer(3)/Integer(4)).n(Integer(100)) # needs sage.symbolic 0.72273424781341561117837735264
We can delay evaluation using the
hold
parameter:sage: arccos(0, hold=True) # needs sage.symbolic arccos(0)
>>> from sage.all import * >>> arccos(Integer(0), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1/2*pi
>>> from sage.all import * >>> a = arccos(Integer(0), hold=True); a.simplify() # needs sage.symbolic 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: # needs sage.symbolic 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))
>>> from sage.all import * >>> # needs sage.symbolic >>> conjugate(arccos(x)) conjugate(arccos(x)) >>> var('y', domain='positive') y >>> conjugate(arccos(y)) conjugate(arccos(y)) >>> conjugate(arccos(y+I)) conjugate(arccos(y + I)) >>> conjugate(arccos(Integer(1)/Integer(16))) arccos(1/16) >>> conjugate(arccos(Integer(2))) conjugate(arccos(2)) >>> conjugate(arccos(-Integer(2))) pi - conjugate(arccos(2))
- class sage.functions.trig.Function_arccot[source]¶
Bases:
GinacFunction
The arccotangent function.
EXAMPLES:
sage: # needs sage.symbolic sage: arccot(1/2) arccot(1/2) sage: RDF(arccot(1/2)) # abs tol 2e-16 1.1071487177940906 sage: arccot(1 + I) arccot(I + 1) sage: arccot(1/2).n(100) 1.1071487177940905030170654602 sage: float(arccot(1/2)) # abs tol 2e-16 1.1071487177940906 sage: bool(diff(acot(x), x) == -diff(atan(x), x)) True sage: diff(acot(x), x) -1/(x^2 + 1)
>>> from sage.all import * >>> # needs sage.symbolic >>> arccot(Integer(1)/Integer(2)) arccot(1/2) >>> RDF(arccot(Integer(1)/Integer(2))) # abs tol 2e-16 1.1071487177940906 >>> arccot(Integer(1) + I) arccot(I + 1) >>> arccot(Integer(1)/Integer(2)).n(Integer(100)) 1.1071487177940905030170654602 >>> float(arccot(Integer(1)/Integer(2))) # abs tol 2e-16 1.1071487177940906 >>> bool(diff(acot(x), x) == -diff(atan(x), x)) True >>> diff(acot(x), x) -1/(x^2 + 1)
We can delay evaluation using the
hold
parameter:sage: arccot(1, hold=True) # needs sage.symbolic arccot(1)
>>> from sage.all import * >>> arccot(Integer(1), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1/4*pi
>>> from sage.all import * >>> a = arccot(Integer(1), hold=True); a.simplify() # needs sage.symbolic 1/4*pi
- class sage.functions.trig.Function_arccsc[source]¶
Bases:
GinacFunction
The arccosecant function.
EXAMPLES:
sage: # needs sage.symbolic sage: arccsc(2) arccsc(2) sage: RDF(arccsc(2)) # rel tol 1e-15 0.5235987755982988 sage: arccsc(2).n(100) 0.52359877559829887307710723055 sage: float(arccsc(2)) 0.52359877559829... sage: arccsc(1 + I) arccsc(I + 1) sage: diff(acsc(x), x) -1/(sqrt(x^2 - 1)*x) sage: arccsc(x)._sympy_() # needs sympy acsc(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> arccsc(Integer(2)) arccsc(2) >>> RDF(arccsc(Integer(2))) # rel tol 1e-15 0.5235987755982988 >>> arccsc(Integer(2)).n(Integer(100)) 0.52359877559829887307710723055 >>> float(arccsc(Integer(2))) 0.52359877559829... >>> arccsc(Integer(1) + I) arccsc(I + 1) >>> diff(acsc(x), x) -1/(sqrt(x^2 - 1)*x) >>> arccsc(x)._sympy_() # needs sympy acsc(x)
We can delay evaluation using the
hold
parameter:sage: arccsc(1, hold=True) # needs sage.symbolic arccsc(1)
>>> from sage.all import * >>> arccsc(Integer(1), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1/2*pi
>>> from sage.all import * >>> a = arccsc(Integer(1), hold=True); a.simplify() # needs sage.symbolic 1/2*pi
- class sage.functions.trig.Function_arcsec[source]¶
Bases:
GinacFunction
The arcsecant function.
EXAMPLES:
sage: # needs sage.symbolic sage: arcsec(2) arcsec(2) sage: arcsec(2.0) 1.04719755119660 sage: arcsec(2).n(100) 1.0471975511965977461542144611 sage: arcsec(1/2).n(100) 1.3169578969248167086250463473*I sage: RDF(arcsec(2)) # abs tol 1e-15 1.0471975511965976 sage: arcsec(1 + I) arcsec(I + 1) sage: diff(asec(x), x) 1/(sqrt(x^2 - 1)*x) sage: arcsec(x)._sympy_() # needs sympy asec(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> arcsec(Integer(2)) arcsec(2) >>> arcsec(RealNumber('2.0')) 1.04719755119660 >>> arcsec(Integer(2)).n(Integer(100)) 1.0471975511965977461542144611 >>> arcsec(Integer(1)/Integer(2)).n(Integer(100)) 1.3169578969248167086250463473*I >>> RDF(arcsec(Integer(2))) # abs tol 1e-15 1.0471975511965976 >>> arcsec(Integer(1) + I) arcsec(I + 1) >>> diff(asec(x), x) 1/(sqrt(x^2 - 1)*x) >>> arcsec(x)._sympy_() # needs sympy asec(x)
We can delay evaluation using the
hold
parameter:sage: arcsec(1, hold=True) # needs sage.symbolic arcsec(1)
>>> from sage.all import * >>> arcsec(Integer(1), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 0
>>> from sage.all import * >>> a = arcsec(Integer(1), hold=True); a.simplify() # needs sage.symbolic 0
- class sage.functions.trig.Function_arcsin[source]¶
Bases:
GinacFunction
The arcsine function.
EXAMPLES:
sage: arcsin(0.5) # needs sage.rings.real_mpfr 0.523598775598299 sage: arcsin(1/2) # needs sage.symbolic 1/6*pi sage: arcsin(1 + 1.0*I) # needs sage.symbolic 0.666239432492515 + 1.06127506190504*I
>>> from sage.all import * >>> arcsin(RealNumber('0.5')) # needs sage.rings.real_mpfr 0.523598775598299 >>> arcsin(Integer(1)/Integer(2)) # needs sage.symbolic 1/6*pi >>> arcsin(Integer(1) + RealNumber('1.0')*I) # needs sage.symbolic 0.666239432492515 + 1.06127506190504*I
We can delay evaluation using the
hold
parameter:sage: arcsin(0, hold=True) # needs sage.symbolic arcsin(0)
>>> from sage.all import * >>> arcsin(Integer(0), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 0
>>> from sage.all import * >>> a = arcsin(Integer(0), hold=True); a.simplify() # needs sage.symbolic 0
conjugate(arcsin(x))==arcsin(conjugate(x))
, unless on the branch cuts which run along the real axis outside the interval [-1, +1].:sage: # needs sage.symbolic 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))
>>> from sage.all import * >>> # needs sage.symbolic >>> conjugate(arcsin(x)) conjugate(arcsin(x)) >>> var('y', domain='positive') y >>> conjugate(arcsin(y)) conjugate(arcsin(y)) >>> conjugate(arcsin(y+I)) conjugate(arcsin(y + I)) >>> conjugate(arcsin(Integer(1)/Integer(16))) arcsin(1/16) >>> conjugate(arcsin(Integer(2))) conjugate(arcsin(2)) >>> conjugate(arcsin(-Integer(2))) -conjugate(arcsin(2))
- class sage.functions.trig.Function_arctan[source]¶
Bases:
GinacFunction
The arctangent function.
EXAMPLES:
sage: # needs sage.symbolic 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
>>> from sage.all import * >>> # needs sage.symbolic >>> arctan(Integer(1)/Integer(2)) arctan(1/2) >>> RDF(arctan(Integer(1)/Integer(2))) # rel tol 1e-15 0.46364760900080615 >>> arctan(Integer(1) + I) arctan(I + 1) >>> arctan(Integer(1)/Integer(2)).n(Integer(100)) 0.46364760900080611621425623146
We can delay evaluation using the
hold
parameter:sage: arctan(0, hold=True) # needs sage.symbolic arctan(0)
>>> from sage.all import * >>> arctan(Integer(0), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 0
>>> from sage.all import * >>> a = arctan(Integer(0), hold=True); a.simplify() # needs sage.symbolic 0
conjugate(arctan(x))==arctan(conjugate(x))
, unless on the branch cuts which run along the imaginary axis outside the interval [-I, +I].:sage: # needs sage.symbolic 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)
>>> from sage.all import * >>> # needs sage.symbolic >>> conjugate(arctan(x)) conjugate(arctan(x)) >>> var('y', domain='positive') y >>> conjugate(arctan(y)) arctan(y) >>> conjugate(arctan(y+I)) conjugate(arctan(y + I)) >>> conjugate(arctan(Integer(1)/Integer(16))) arctan(1/16) >>> conjugate(arctan(-Integer(2)*I)) conjugate(arctan(-2*I)) >>> conjugate(arctan(Integer(2)*I)) conjugate(arctan(2*I)) >>> conjugate(arctan(I/Integer(2))) arctan(-1/2*I)
- class sage.functions.trig.Function_arctan2[source]¶
Bases:
GinacFunction
The modified arctangent function.
Returns the arc tangent (measured in radians) of \(y/x\), where unlike
arctan(y/x)
, the signs of bothx
andy
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) # needs sage.symbolic 3/4*pi sage: arctan(1/-1) # needs sage.symbolic -1/4*pi
>>> from sage.all import * >>> arctan2(Integer(1), -Integer(1)) # needs sage.symbolic 3/4*pi >>> arctan(Integer(1)/-Integer(1)) # needs sage.symbolic -1/4*pi
This is consistent with Python and Maxima:
sage: maxima.atan2(1, -1) # needs sage.symbolic (3*%pi)/4 sage: math.atan2(1, -1) 2.356194490192345
>>> from sage.all import * >>> maxima.atan2(Integer(1), -Integer(1)) # needs sage.symbolic (3*%pi)/4 >>> math.atan2(Integer(1), -Integer(1)) 2.356194490192345
More examples:
sage: arctan2(1, 0) # needs sage.symbolic 1/2*pi sage: arctan2(2, 3) # needs sage.symbolic arctan(2/3) sage: arctan2(-1, -1) # needs sage.symbolic -3/4*pi
>>> from sage.all import * >>> arctan2(Integer(1), Integer(0)) # needs sage.symbolic 1/2*pi >>> arctan2(Integer(2), Integer(3)) # needs sage.symbolic arctan(2/3) >>> arctan2(-Integer(1), -Integer(1)) # needs sage.symbolic -3/4*pi
Of course we can approximate as well:
sage: arctan2(-1/2, 1).n(100) # needs sage.symbolic -0.46364760900080611621425623146 sage: arctan2(2, 3).n(100) # needs sage.symbolic 0.58800260354756755124561108063
>>> from sage.all import * >>> arctan2(-Integer(1)/Integer(2), Integer(1)).n(Integer(100)) # needs sage.symbolic -0.46364760900080611621425623146 >>> arctan2(Integer(2), Integer(3)).n(Integer(100)) # needs sage.symbolic 0.58800260354756755124561108063
We can delay evaluation using the
hold
parameter:sage: arctan2(-1/2, 1, hold=True) # needs sage.symbolic arctan2(-1/2, 1)
>>> from sage.all import * >>> arctan2(-Integer(1)/Integer(2), Integer(1), hold=True) # needs sage.symbolic 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() # needs sage.symbolic -arctan(1/2)
>>> from sage.all import * >>> arctan2(-Integer(1)/Integer(2), Integer(1), hold=True).simplify() # needs sage.symbolic -arctan(1/2)
The function also works with numpy arrays as input:
sage: # needs numpy 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) # needs numpy array([0.78539816, 0.46364761, 0.32175055]) sage: atan2(a, 1) # needs numpy array([0.78539816, 1.10714872, 1.24904577])
>>> from sage.all import * >>> # needs numpy >>> import numpy >>> a = numpy.linspace(Integer(1), Integer(3), Integer(3)) >>> b = numpy.linspace(Integer(3), Integer(6), Integer(3)) >>> atan2(a, b) array([0.32175055, 0.41822433, 0.46364761]) >>> atan2(Integer(1),a) # needs numpy array([0.78539816, 0.46364761, 0.32175055]) >>> atan2(a, Integer(1)) # needs numpy array([0.78539816, 1.10714872, 1.24904577])
- class sage.functions.trig.Function_cos[source]¶
Bases:
GinacFunction
The cosine function.
EXAMPLES:
sage: # needs sage.symbolic sage: cos(pi) -1 sage: cos(x).subs(x==pi) -1 sage: cos(2).n(100) -0.41614683654714238699756822950 sage: cos(x)._sympy_() # needs sympy cos(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> cos(pi) -1 >>> cos(x).subs(x==pi) -1 >>> cos(Integer(2)).n(Integer(100)) -0.41614683654714238699756822950 >>> cos(x)._sympy_() # needs sympy cos(x)
We can prevent evaluation using the
hold
parameter:sage: cos(0, hold=True) # needs sage.symbolic cos(0)
>>> from sage.all import * >>> cos(Integer(0), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1
>>> from sage.all import * >>> a = cos(Integer(0), hold=True); a.simplify() # needs sage.symbolic 1
If possible, the argument is also reduced modulo the period length \(2\pi\), and well-known identities are directly evaluated:
sage: # needs sage.symbolic sage: k = var('k', domain='integer') sage: cos(1 + 2*k*pi) cos(1) sage: cos(k*pi) cos(pi*k) sage: cos(pi/3 + 2*k*pi) 1/2
>>> from sage.all import * >>> # needs sage.symbolic >>> k = var('k', domain='integer') >>> cos(Integer(1) + Integer(2)*k*pi) cos(1) >>> cos(k*pi) cos(pi*k) >>> cos(pi/Integer(3) + Integer(2)*k*pi) 1/2
- class sage.functions.trig.Function_cot[source]¶
Bases:
GinacFunction
The cotangent function.
EXAMPLES:
sage: # needs sage.symbolic 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)) # needs sage.symbolic \cot\left(x\right) sage: cot(x)._sympy_() # needs sympy sage.symbolic cot(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> cot(pi/Integer(4)) 1 >>> RR(cot(pi/Integer(4))) 1.00000000000000 >>> cot(Integer(1)/Integer(2)) cot(1/2) >>> cot(RealNumber('0.5')) 1.83048772171245 >>> latex(cot(x)) # needs sage.symbolic \cot\left(x\right) >>> cot(x)._sympy_() # needs sympy sage.symbolic cot(x)
We can prevent evaluation using the
hold
parameter:sage: cot(pi/4, hold=True) # needs sage.symbolic cot(1/4*pi)
>>> from sage.all import * >>> cot(pi/Integer(4), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1
>>> from sage.all import * >>> a = cot(pi/Integer(4), hold=True); a.simplify() # needs sage.symbolic 1
EXAMPLES:
sage: # needs sage.symbolic sage: cot(pi/4) 1 sage: cot(x).subs(x==pi/4) 1 sage: cot(pi/7) cot(1/7*pi) sage: cot(x) cot(x) sage: # needs sage.symbolic sage: n(cot(pi/4), 100) 1.0000000000000000000000000000 sage: float(cot(1)) 0.64209261593433... sage: bool(diff(cot(x), x) == diff(1/tan(x), x)) True sage: diff(cot(x), x) -cot(x)^2 - 1
>>> from sage.all import * >>> # needs sage.symbolic >>> cot(pi/Integer(4)) 1 >>> cot(x).subs(x==pi/Integer(4)) 1 >>> cot(pi/Integer(7)) cot(1/7*pi) >>> cot(x) cot(x) >>> # needs sage.symbolic >>> n(cot(pi/Integer(4)), Integer(100)) 1.0000000000000000000000000000 >>> float(cot(Integer(1))) 0.64209261593433... >>> bool(diff(cot(x), x) == diff(Integer(1)/tan(x), x)) True >>> diff(cot(x), x) -cot(x)^2 - 1
- class sage.functions.trig.Function_csc[source]¶
Bases:
GinacFunction
The cosecant function.
EXAMPLES:
sage: # needs sage.symbolic sage: csc(pi/4) sqrt(2) sage: csc(x).subs(x==pi/4) sqrt(2) sage: csc(pi/7) csc(1/7*pi) sage: csc(x) csc(x) sage: RR(csc(pi/4)) 1.41421356237310 sage: n(csc(pi/4), 100) 1.4142135623730950488016887242 sage: float(csc(pi/4)) 1.4142135623730951 sage: csc(1/2) csc(1/2) sage: csc(0.5) 2.08582964293349 sage: # needs sage.symbolic sage: bool(diff(csc(x), x) == diff(1/sin(x), x)) True sage: diff(csc(x), x) -cot(x)*csc(x) sage: latex(csc(x)) \csc\left(x\right) sage: csc(x)._sympy_() # needs sympy csc(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> csc(pi/Integer(4)) sqrt(2) >>> csc(x).subs(x==pi/Integer(4)) sqrt(2) >>> csc(pi/Integer(7)) csc(1/7*pi) >>> csc(x) csc(x) >>> RR(csc(pi/Integer(4))) 1.41421356237310 >>> n(csc(pi/Integer(4)), Integer(100)) 1.4142135623730950488016887242 >>> float(csc(pi/Integer(4))) 1.4142135623730951 >>> csc(Integer(1)/Integer(2)) csc(1/2) >>> csc(RealNumber('0.5')) 2.08582964293349 >>> # needs sage.symbolic >>> bool(diff(csc(x), x) == diff(Integer(1)/sin(x), x)) True >>> diff(csc(x), x) -cot(x)*csc(x) >>> latex(csc(x)) \csc\left(x\right) >>> csc(x)._sympy_() # needs sympy csc(x)
We can prevent evaluation using the
hold
parameter:sage: csc(pi/4, hold=True) # needs sage.symbolic csc(1/4*pi)
>>> from sage.all import * >>> csc(pi/Integer(4), hold=True) # needs sage.symbolic 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() # needs sage.symbolic sqrt(2)
>>> from sage.all import * >>> a = csc(pi/Integer(4),hold=True); a.simplify() # needs sage.symbolic sqrt(2)
- class sage.functions.trig.Function_sec[source]¶
Bases:
GinacFunction
The secant function.
EXAMPLES:
sage: # needs sage.symbolic sage: sec(pi/4) sqrt(2) sage: sec(x).subs(x==pi/4) sqrt(2) sage: sec(pi/7) sec(1/7*pi) sage: sec(x) sec(x) sage: RR(sec(pi/4)) 1.41421356237310 sage: n(sec(pi/4),100) 1.4142135623730950488016887242 sage: float(sec(pi/4)) 1.4142135623730951 sage: sec(1/2) sec(1/2) sage: sec(0.5) 1.13949392732455 sage: # needs sage.symbolic sage: bool(diff(sec(x), x) == diff(1/cos(x), x)) True sage: diff(sec(x), x) sec(x)*tan(x) sage: latex(sec(x)) \sec\left(x\right) sage: sec(x)._sympy_() # needs sympy sec(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> sec(pi/Integer(4)) sqrt(2) >>> sec(x).subs(x==pi/Integer(4)) sqrt(2) >>> sec(pi/Integer(7)) sec(1/7*pi) >>> sec(x) sec(x) >>> RR(sec(pi/Integer(4))) 1.41421356237310 >>> n(sec(pi/Integer(4)),Integer(100)) 1.4142135623730950488016887242 >>> float(sec(pi/Integer(4))) 1.4142135623730951 >>> sec(Integer(1)/Integer(2)) sec(1/2) >>> sec(RealNumber('0.5')) 1.13949392732455 >>> # needs sage.symbolic >>> bool(diff(sec(x), x) == diff(Integer(1)/cos(x), x)) True >>> diff(sec(x), x) sec(x)*tan(x) >>> latex(sec(x)) \sec\left(x\right) >>> sec(x)._sympy_() # needs sympy sec(x)
We can prevent evaluation using the
hold
parameter:sage: sec(pi/4, hold=True) # needs sage.symbolic sec(1/4*pi)
>>> from sage.all import * >>> sec(pi/Integer(4), hold=True) # needs sage.symbolic 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() # needs sage.symbolic sqrt(2)
>>> from sage.all import * >>> a = sec(pi/Integer(4), hold=True); a.simplify() # needs sage.symbolic sqrt(2)
- class sage.functions.trig.Function_sin[source]¶
Bases:
GinacFunction
The sine function.
EXAMPLES:
sage: # needs sage.symbolic sage: sin(0) 0 sage: sin(x).subs(x==0) 0 sage: sin(2).n(100) 0.90929742682568169539601986591 sage: sin(x)._sympy_() # needs sympy sin(x)
>>> from sage.all import * >>> # needs sage.symbolic >>> sin(Integer(0)) 0 >>> sin(x).subs(x==Integer(0)) 0 >>> sin(Integer(2)).n(Integer(100)) 0.90929742682568169539601986591 >>> sin(x)._sympy_() # needs sympy sin(x)
We can prevent evaluation using the
hold
parameter:sage: sin(0, hold=True) # needs sage.symbolic sin(0)
>>> from sage.all import * >>> sin(Integer(0), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 0
>>> from sage.all import * >>> a = sin(Integer(0), hold=True); a.simplify() # needs sage.symbolic 0
If possible, the argument is also reduced modulo the period length \(2\pi\), and well-known identities are directly evaluated:
sage: k = var('k', domain='integer') # needs sage.symbolic sage: sin(1 + 2*k*pi) # needs sage.symbolic sin(1) sage: sin(k*pi) # needs sage.symbolic 0
>>> from sage.all import * >>> k = var('k', domain='integer') # needs sage.symbolic >>> sin(Integer(1) + Integer(2)*k*pi) # needs sage.symbolic sin(1) >>> sin(k*pi) # needs sage.symbolic 0
- class sage.functions.trig.Function_tan[source]¶
Bases:
GinacFunction
The tangent function.
EXAMPLES:
sage: # needs sage.rings.real_mpfr sage: tan(3.1415) -0.0000926535900581913 sage: tan(3.1415/4) 0.999953674278156 sage: # needs sage.symbolic sage: tan(pi) 0 sage: tan(pi/4) 1 sage: tan(1/2) tan(1/2) sage: RR(tan(1/2)) 0.546302489843790
>>> from sage.all import * >>> # needs sage.rings.real_mpfr >>> tan(RealNumber('3.1415')) -0.0000926535900581913 >>> tan(RealNumber('3.1415')/Integer(4)) 0.999953674278156 >>> # needs sage.symbolic >>> tan(pi) 0 >>> tan(pi/Integer(4)) 1 >>> tan(Integer(1)/Integer(2)) tan(1/2) >>> RR(tan(Integer(1)/Integer(2))) 0.546302489843790
We can prevent evaluation using the
hold
parameter:sage: tan(pi/4, hold=True) # needs sage.symbolic tan(1/4*pi)
>>> from sage.all import * >>> tan(pi/Integer(4), hold=True) # needs sage.symbolic 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() # needs sage.symbolic 1
>>> from sage.all import * >>> a = tan(pi/Integer(4), hold=True); a.simplify() # needs sage.symbolic 1
If possible, the argument is also reduced modulo the period length \(\pi\), and well-known identities are directly evaluated:
sage: k = var('k', domain='integer') # needs sage.symbolic sage: tan(1 + 2*k*pi) # needs sage.symbolic tan(1) sage: tan(k*pi) # needs sage.symbolic 0
>>> from sage.all import * >>> k = var('k', domain='integer') # needs sage.symbolic >>> tan(Integer(1) + Integer(2)*k*pi) # needs sage.symbolic tan(1) >>> tan(k*pi) # needs sage.symbolic 0