Définition d'une série formelle en Sage

Définition d'une série formelle en Sage

25 septembre 2012 | Catégories: sage | View Comments

Question :

Comment fait-on en sage pour avoir le terme général d'une serie formelle en \(x\) comme \(1/(1-q^2x)\) par exemple, où \(q\) est un paramètre (il faudrait obtenir \(q^{2k} x^k\) ) ?

Quelques exemples se trouvent dans la documentation sur les espèces en Sage, mais il faut faire quand même quelques essais et combiner quelques idées pour y parvenir. Une façon de procéder est définir une espèce récursive en assignant un poids pour le paramètre (voir Weighted Species).

Sous une forme récursive, la série s'écrit :

\[ L = 1 + q^2 \cdot x \cdot L \]

Alors, en sage, on écrira:

sage: q = QQ['q'].gen()
sage: E = species.EmptySetSpecies()
sage: X = species.SingletonSpecies(weight=q^2)
sage: L = CombinatorialSpecies()
sage: L.define(E+X*L)
sage: L.generating_series().coefficients(10)
[1, q^2, q^4, q^6, q^8, q^10, q^12, q^14, q^16, q^18]

Aussi:

sage: X.generating_series().coefficients(5)
[0, q^2, 0, 0, 0]
sage: E.generating_series().coefficients(5)
[1, 0, 0, 0, 0]

On peut faire le produit de deux espèces:

sage: A = X * X
sage: A.generating_series().coefficients(5)
[0, 0, q^4, 0, 0]

On peut faire la somme de deux espèces:

sage: B = X + X
sage: B.generating_series().coefficients(5)
[0, 2*q^2, 0, 0, 0]

mais pas la différence:

sage: E - X
Traceback (most recent call last) :
...
TypeError: unsupported operand type(s) for -: 'EmptySetSpecies_class'
and 'SingletonSpecies_class'

ni le quotient:

sage: E / X
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for /: 'EmptySetSpecies_class'
and 'SingletonSpecies_class'

Encore moins une combinaison des deux:

sage: E/(E-X)
Traceback (most recent call last) :
...
TypeError: unsupported operand type(s) for -: 'EmptySetSpecies_class'
and 'SingletonSpecies_class'

et je ne sais pas pourquoi...

blog comments powered by Disqus