Sequences

A sequence is a finite or infinite lazily evaluated list.

sympy.series.sequences.sequence(seq, limits=None)[source]

Returns appropriate sequence object.

If seq is a sympy sequence, returns SeqPer object otherwise returns SeqFormula object.

Examples

>>> from sympy import sequence, SeqPer, SeqFormula
>>> from sympy.abc import n
>>> sequence(n**2, (n, 0, 5))
SeqFormula(n**2, (n, 0, 5))
>>> sequence((1, 2, 3), (n, 0, 5))
SeqPer((1, 2, 3), (n, 0, 5))

Sequences Base

class sympy.series.sequences.SeqBase[source]

Base class for sequences

coeff(pt)[source]

Returns the coefficient at point pt

coeff_mul(other)[source]

Should be used when other is not a sequence. Should be defined to define custom behaviour.

Notes

‘*’ defines multiplication of sequences with sequences only.

Examples

>>> from sympy import S, oo, SeqFormula
>>> from sympy.abc import n
>>> SeqFormula(n**2).coeff_mul(2)
SeqFormula(2*n**2, (n, 0, oo))
find_linear_recurrence(n, d=None, gfvar=None)[source]

Finds the shortest linear recurrence that satisfies the first n terms of sequence of order \(\leq\) n/2 if possible. If d is specified, find shortest linear recurrence of order \(\leq\) min(d, n/2) if possible. Returns list of coefficients [b(1), b(2), ...] corresponding to the recurrence relation x(n) = b(1)*x(n-1) + b(2)*x(n-2) + ... Returns [] if no recurrence is found. If gfvar is specified, also returns ordinary generating function as a function of gfvar.

Examples

>>> from sympy import sequence, sqrt, oo, lucas
>>> from sympy.abc import n, x, y
>>> sequence(n**2).find_linear_recurrence(10, 2)
[]
>>> sequence(n**2).find_linear_recurrence(10)
[3, -3, 1]
>>> sequence(2**n).find_linear_recurrence(10)
[2]
>>> sequence(23*n**4+91*n**2).find_linear_recurrence(10)
[5, -10, 10, -5, 1]
>>> sequence(sqrt(5)*(((1 + sqrt(5))/2)**n - (-(1 + sqrt(5))/2)**(-n))/5).find_linear_recurrence(10)
[1, 1]
>>> sequence(x+y*(-2)**(-n), (n, 0, oo)).find_linear_recurrence(30)
[1/2, 1/2]
>>> sequence(3*5**n + 12).find_linear_recurrence(20,gfvar=x)
([6, -5], 3*(-21*x + 5)/((x - 1)*(5*x - 1)))
>>> sequence(lucas(n)).find_linear_recurrence(15,gfvar=x)
([1, 1], (x - 2)/(x**2 + x - 1))
free_symbols

This method returns the symbols in the object, excluding those that take on a specific value (i.e. the dummy symbols).

Examples

>>> from sympy import SeqFormula
>>> from sympy.abc import n, m
>>> SeqFormula(m*n**2, (n, 0, 5)).free_symbols
{m}
gen

Returns the generator for the sequence

interval

The interval on which the sequence is defined

length

Length of the sequence

start

The starting point of the sequence. This point is included

stop

The ending point of the sequence. This point is included

variables

Returns a tuple of variables that are bounded

Elementary Sequences

class sympy.series.sequences.SeqFormula[source]

Represents sequence based on a formula.

Elements are generated using a formula.

Examples

>>> from sympy import SeqFormula, oo, Symbol
>>> n = Symbol('n')
>>> s = SeqFormula(n**2, (n, 0, 5))
>>> s.formula
n**2

For value at a particular point

>>> s.coeff(3)
9

supports slicing

>>> s[:]
[0, 1, 4, 9, 16, 25]

iterable

>>> list(s)
[0, 1, 4, 9, 16, 25]

sequence starts from negative infinity

>>> SeqFormula(n**2, (-oo, 0))[0:6]
[0, 1, 4, 9, 16, 25]
coeff_mul(coeff)[source]

See docstring of SeqBase.coeff_mul

class sympy.series.sequences.SeqPer[source]

Represents a periodic sequence.

The elements are repeated after a given period.

Examples

>>> from sympy import SeqPer, oo
>>> from sympy.abc import k
>>> s = SeqPer((1, 2, 3), (0, 5))
>>> s.periodical
(1, 2, 3)
>>> s.period
3

For value at a particular point

>>> s.coeff(3)
1

supports slicing

>>> s[:]
[1, 2, 3, 1, 2, 3]

iterable

>>> list(s)
[1, 2, 3, 1, 2, 3]

sequence starts from negative infinity

>>> SeqPer((1, 2, 3), (-oo, 0))[0:6]
[1, 2, 3, 1, 2, 3]

Periodic formulas

>>> SeqPer((k, k**2, k**3), (k, 0, oo))[0:6]
[0, 1, 8, 3, 16, 125]
coeff_mul(coeff)[source]

See docstring of SeqBase.coeff_mul

Singleton Sequences

class sympy.series.sequences.EmptySequence[source]

Represents an empty sequence.

The empty sequence is available as a singleton as S.EmptySequence.

Examples

>>> from sympy import S, SeqPer, oo
>>> from sympy.abc import x
>>> S.EmptySequence
EmptySequence()
>>> SeqPer((1, 2), (x, 0, 10)) + S.EmptySequence
SeqPer((1, 2), (x, 0, 10))
>>> SeqPer((1, 2)) * S.EmptySequence
EmptySequence()
>>> S.EmptySequence.coeff_mul(-1)
EmptySequence()
coeff_mul(coeff)[source]

See docstring of SeqBase.coeff_mul

Compound Sequences

class sympy.series.sequences.SeqAdd[source]

Represents term-wise addition of sequences.

Rules:
  • The interval on which sequence is defined is the intersection of respective intervals of sequences.
  • Anything + EmptySequence remains unchanged.
  • Other rules are defined in _add methods of sequence classes.

Examples

>>> from sympy import S, oo, SeqAdd, SeqPer, SeqFormula
>>> from sympy.abc import n
>>> SeqAdd(SeqPer((1, 2), (n, 0, oo)), S.EmptySequence)
SeqPer((1, 2), (n, 0, oo))
>>> SeqAdd(SeqPer((1, 2), (n, 0, 5)), SeqPer((1, 2), (n, 6, 10)))
EmptySequence()
>>> SeqAdd(SeqPer((1, 2), (n, 0, oo)), SeqFormula(n**2, (n, 0, oo)))
SeqAdd(SeqFormula(n**2, (n, 0, oo)), SeqPer((1, 2), (n, 0, oo)))
>>> SeqAdd(SeqFormula(n**3), SeqFormula(n**2))
SeqFormula(n**3 + n**2, (n, 0, oo))
static reduce(args)[source]

Simplify SeqAdd using known rules.

Iterates through all pairs and ask the constituent sequences if they can simplify themselves with any other constituent.

Notes

adapted from Union.reduce

class sympy.series.sequences.SeqMul[source]

Represents term-wise multiplication of sequences.

Handles multiplication of sequences only. For multiplication with other objects see SeqBase.coeff_mul().

Rules:
  • The interval on which sequence is defined is the intersection of respective intervals of sequences.
  • Anything * EmptySequence returns EmptySequence.
  • Other rules are defined in _mul methods of sequence classes.

Examples

>>> from sympy import S, oo, SeqMul, SeqPer, SeqFormula
>>> from sympy.abc import n
>>> SeqMul(SeqPer((1, 2), (n, 0, oo)), S.EmptySequence)
EmptySequence()
>>> SeqMul(SeqPer((1, 2), (n, 0, 5)), SeqPer((1, 2), (n, 6, 10)))
EmptySequence()
>>> SeqMul(SeqPer((1, 2), (n, 0, oo)), SeqFormula(n**2))
SeqMul(SeqFormula(n**2, (n, 0, oo)), SeqPer((1, 2), (n, 0, oo)))
>>> SeqMul(SeqFormula(n**3), SeqFormula(n**2))
SeqFormula(n**5, (n, 0, oo))
static reduce(args)[source]

Simplify a SeqMul using known rules.

Iterates through all pairs and ask the constituent sequences if they can simplify themselves with any other constituent.

Notes

adapted from Union.reduce