Symbolic Series¶
Symbolic series are special kinds of symbolic expressions that are
constructed via the
Expression.series
method.
They usually have an Order()
term unless the series representation
is exact, see
is_terminating_series()
.
For series over general rings see
power series
and
Laurent series
.
EXAMPLES:
We expand a polynomial in about
, about
, and also truncate
it back to a polynomial:
sage: var('x,y')
(x, y)
sage: f = (x^3 - sin(y)*x^2 - 5*x + 3); f
x^3 - x^2*sin(y) - 5*x + 3
sage: g = f.series(x, 4); g
3 + (-5)*x + (-sin(y))*x^2 + 1*x^3
sage: g.truncate()
x^3 - x^2*sin(y) - 5*x + 3
sage: g = f.series(x==1, 4); g
(-sin(y) - 1) + (-2*sin(y) - 2)*(x - 1) + (-sin(y) + 3)*(x - 1)^2 + 1*(x - 1)^3
sage: h = g.truncate(); h
(x - 1)^3 - (x - 1)^2*(sin(y) - 3) - 2*(x - 1)*(sin(y) + 1) - sin(y) - 1
sage: h.expand()
x^3 - x^2*sin(y) - 5*x + 3
We compute another series expansion of an analytic function:
sage: f = sin(x)/x^2
sage: f.series(x,7)
1*x^(-1) + (-1/6)*x + 1/120*x^3 + (-1/5040)*x^5 + Order(x^7)
sage: f.series(x==1,3)
(sin(1)) + (cos(1) - 2*sin(1))*(x - 1) + (-2*cos(1) + 5/2*sin(1))*(x - 1)^2 + Order((x - 1)^3)
sage: f.series(x==1,3).truncate().expand()
-2*x^2*cos(1) + 5/2*x^2*sin(1) + 5*x*cos(1) - 7*x*sin(1) - 3*cos(1) + 11/2*sin(1)
Following the GiNaC tutorial, we use John Machin’s amazing
formula
to compute digits of
. We expand the arc tangent around 0 and insert
the fractions 1/5 and 1/239.
sage: x = var('x')
sage: f = atan(x).series(x, 10); f
1*x + (-1/3)*x^3 + 1/5*x^5 + (-1/7)*x^7 + 1/9*x^9 + Order(x^10)
sage: (16*f.subs(x==1/5) - 4*f.subs(x==1/239)).n()
3.14159268240440
Note: The result of an operation or function of series is not automatically expanded to a series. This must be explicitly done by the user:
sage: ex1 = sin(x).series(x, 4); ex1
1*x + (-1/6)*x^3 + Order(x^4)
sage: ex2 = cos(x).series(x, 4); ex2
1 + (-1/2)*x^2 + Order(x^4)
sage: ex1 + ex2
(1 + (-1/2)*x^2 + Order(x^4)) + (1*x + (-1/6)*x^3 + Order(x^4))
sage: (ex1 + ex2).series(x,4)
1 + 1*x + (-1/2)*x^2 + (-1/6)*x^3 + Order(x^4)
sage: x*ex1
x*(1*x + (-1/6)*x^3 + Order(x^4))
sage: (x*ex1).series(x,5)
1*x^2 + (-1/6)*x^4 + Order(x^5)
sage: sin(ex1)
sin(1*x + (-1/6)*x^3 + Order(x^4))
sage: sin(ex1).series(x,9)
1*x + (-1/3)*x^3 + 11/120*x^5 + (-53/2520)*x^7 + Order(x^9)
sage: (sin(x^2)^(-5)).series(x,3)
1*x^(-10) + 5/6*x^(-6) + 3/8*x^(-2) + 367/3024*x^2 + Order(x^3)
sage: (cot(x)^(-3)).series(x,3)
Order(x^3)
sage: (cot(x)^(-3)).series(x,4)
1*x^3 + Order(x^4)
TESTS:
Check that trac ticket #20088 is fixed:
sage: ((1+x).series(x)^pi).series(x,3)
1 + (pi)*x + (-1/2*pi + 1/2*pi^2)*x^2 + Order(x^3)
Check that trac ticket #14878 is fixed, this should take only microseconds:
sage: sin(x*sin(x*sin(x*sin(x)))).series(x,8)
1*x^4 + (-1/6)*x^6 + Order(x^8)
sage: sin(x*sin(x*sin(x*sin(x)))).series(x,12)
1*x^4 + (-1/6)*x^6 + (-19/120)*x^8 + (-421/5040)*x^10 + Order(x^12)
-
class
sage.symbolic.series.
SymbolicSeries
¶ Bases:
sage.symbolic.expression.Expression
Trivial constructor.
EXAMPLES:
sage: loads(dumps((x+x^3).series(x,2))) 1*x + Order(x^2)
-
coefficients
(x=None, sparse=True)¶ Return the coefficients of this symbolic series as a list of pairs.
INPUT:
x
– optional variable.sparse
– Boolean. IfFalse
return a list with as much- entries as the order of the series.
OUTPUT:
Depending on the value of
sparse
,- A list of pairs
(expr, n)
, whereexpr
is a symbolic expression andn
is a power (sparse=True
, default) - A list of expressions where the
n
-th element is the coefficient ofx^n
when self is seen as polynomial inx
(sparse=False
).
EXAMPLES:
sage: s=(1/(1-x)).series(x,6); s 1 + 1*x + 1*x^2 + 1*x^3 + 1*x^4 + 1*x^5 + Order(x^6) sage: s.coefficients() [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]] sage: s.coefficients(x, sparse=False) [1, 1, 1, 1, 1, 1] sage: x,y = var("x,y") sage: s=(1/(1-y*x-x)).series(x,3); s 1 + (y + 1)*x + ((y + 1)^2)*x^2 + Order(x^3) sage: s.coefficients(x, sparse=False) [1, y + 1, (y + 1)^2]
-
default_variable
()¶ Return the expansion variable of this symbolic series.
EXAMPLES:
sage: s=(1/(1-x)).series(x,3); s 1 + 1*x + 1*x^2 + Order(x^3) sage: s.default_variable() x
-
is_series
()¶ TESTS:
sage: ex = sin(x).series(x,5) sage: ex.is_series() doctest:...: DeprecationWarning: ex.is_series() is deprecated. Use isinstance(ex, sage.symbolic.series.SymbolicSeries) instead See http://trac.sagemath.org/17659 for details. True
-
is_terminating_series
()¶ Return True if the series is without order term.
A series is terminating if it can be represented exactly, without requiring an order term. You can explicitly request terminating series by setting the order to positive infinity.
OUTPUT:
Boolean.
True
if the series has no order term.EXAMPLES:
sage: (x^5+x^2+1).series(x, +oo) 1 + 1*x^2 + 1*x^5 sage: (x^5+x^2+1).series(x,+oo).is_terminating_series() True sage: SR(5).is_terminating_series() False sage: exp(x).series(x,10).is_terminating_series() False
-
power_series
(base_ring)¶ Return algebraic power series associated to this symbolic series. The coefficients must be coercible to the base ring.
EXAMPLES:
sage: ex=(gamma(1-x)).series(x,3); ex 1 + (euler_gamma)*x + (1/2*euler_gamma^2 + 1/12*pi^2)*x^2 + Order(x^3) sage: g=ex.power_series(SR); g 1 + euler_gamma*x + (1/2*euler_gamma^2 + 1/12*pi^2)*x^2 + O(x^3) sage: g.parent() Power Series Ring in x over Symbolic Ring
-
truncate
()¶ Given a power series or expression, return the corresponding expression without the big oh.
OUTPUT:
A symbolic expression.
EXAMPLES:
sage: f = sin(x)/x^2 sage: f.truncate() sin(x)/x^2 sage: f.series(x,7) 1*x^(-1) + (-1/6)*x + 1/120*x^3 + (-1/5040)*x^5 + Order(x^7) sage: f.series(x,7).truncate() -1/5040*x^5 + 1/120*x^3 - 1/6*x + 1/x sage: f.series(x==1,3).truncate().expand() -2*x^2*cos(1) + 5/2*x^2*sin(1) + 5*x*cos(1) - 7*x*sin(1) - 3*cos(1) + 11/2*sin(1)
-