FunctionalEquation
Class which represents functional equations of a certain type. These are formal power series \(g(x)\) that satisfy an equation of the form
for constants \(\lambda_k\), natural numbers \(d_k\) and
polynomials \(p_k(x), p(x)\). The generating functions of \(C^2\)-finite sequences
satisfy such equations (rec_sequences.C2FiniteSequenceRing.C2FiniteSequence.functional_equation()
).
The left-hand side of the functional equation is constructed by triples
\((d_k, \lambda_k, p_k)\).
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import *
sage: R.<x> = PolynomialRing(QQ)
sage: eq = [(0, -1, 3), (1, 2, x+2)]
sage: print(FunctionalEquation(R, eq, x^2))
(3)g(-x) + (x + 2)g'(2x) = x^2
sage: from rec_sequences.C2FiniteSequenceRing import *
sage: from rec_sequences.CFiniteSequenceRing import *
sage: C = CFiniteSequenceRing(QQ)
sage: C2 = C2FiniteSequenceRing(QQ)
sage: n = var("n")
sage: c = C(2^n+1)
sage: d = C(3^n)
sage: a = C2([c, d], [1])
sage: print(a.functional_equation())
(x)g(2x) + (x)g(x) + (1/3)g(3x) = 1/3
- class rec_sequences.FunctionalEquation.FunctionalEquation(base, equation, rhs=0, name='g')
Bases:
sage.structure.sage_object.SageObject
- __init__(base, equation, rhs=0, name='g')
Constructs a functional equation of the form
\[\sum_{k=1}^m p_k(x) g^{(d_k)} (\lambda_k x) = p(x)\]for constants \(\lambda_k\), natural numbers \(d_k\) and polynomials \(p_k(x), p(x)\)
INPUT:
base
– the base ring which contains the polynomial coefficients \(p_k,p\) and the constants \(\lambda_k\)equation
– a list of triples \((d_k, \lambda_k, p_k)\)rhs
– the right-hand side \(p\), a polynomial inbase
name
(default: “g”) – a name which is displayed if the equation is displayed
OUTPUT:
A functional equation of the described form.
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import * sage: R.<x> = PolynomialRing(QQ) sage: eq = [(0, -1, 3), (1, 2, x+2)] sage: print(FunctionalEquation(R, eq, x^2)) (3)g(-x) + (x + 2)g'(2x) = x^2
- _latex_(name=None)
Creates a latex representation of the functional equation where the derivative of a function \(g(x)\) is denoted by \(g'(x)\) where \(x\) denotes the generator of the base ring.
OUTPUT:
A latex representation of the functional equation.
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import * sage: R.<x> = PolynomialRing(QQ) sage: eq = [(2, 2, x+2)] sage: print(latex(FunctionalEquation(R, eq, 0))) \left(x + 2\right)g''\left(2x\right) = 0
- _repr_(name=None)
Produces a string representation of the equation where the derivative of a function \(g(x)\) is denoted by \(g'(x)\) where \(x\) denotes the generator of the base ring.
INPUT:
name
(optional) – a string used as the name of the sequence; if not given,self.name()
is used.
OUTPUT:
A string representation of the functional equation.
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import * sage: R.<x> = PolynomialRing(QQ) sage: eq = [(0, 1, x), (1, -1, 3), (2, 2, x+2)] sage: print(FunctionalEquation(R, eq, x^2)) (x)g(x) + (3)g'(-x) + (x + 2)g''(2x) = x^2
- recurrence(ring)
Creates a recurrence with C-finite coefficients for the coefficient sequence of the function.
Note
Every coefficient sequence of a function satisfying a functional equation of the given type satisfy a linear recurrence with C-finite coefficients. However, not all of those coefficient sequences are \(C^2\)-finite.
INPUT:
ring
– arec_sequences.CFiniteSequenceRing
which contains the coefficients of the recurrences.
OUTPUT:
A list of C-finite sequences \(c_0,\dots,c_r\) such that the coefficient sequence \(a(n)\) of the function satisfies the recurrence \(\sum_{i=0}^r c_i(n) a(n+i)\) for all \(n\).
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import * sage: from rec_sequences.C2FiniteSequenceRing import * sage: from rec_sequences.CFiniteSequenceRing import * sage: R.<x> = PolynomialRing(QQ) sage: C = CFiniteSequenceRing(QQ) sage: C2 = C2FiniteSequenceRing(QQ) sage: n = var("n") sage: c = C(2^n+1) sage: d = C(3^n) sage: a = C2([c, d], [1]) sage: func_eq = a.functional_equation() sage: print(func_eq) (x)g(2x) + (x)g(x) + (1/3)g(3x) = 1/3 sage: func_eq.recurrence(C) == a.coefficients() True sage: eq = [(0, 1, x), (1, -1, 3*x), (1, 2, 2)] sage: func_eq_2 = FunctionalEquation(R, eq, x^2) sage: func_eq_2.recurrence(C) [C-finite sequence a(n)=1, C-finite sequence a(n): (1)*a(n) + (2)*a(n+1) + (1)*a(n+2) = 0 and a(0)=-3 , a(1)=6, C-finite sequence a(n): (4)*a(n) + (-4)*a(n+1) + (1)*a(n+2) = 0 and a(0)=16 , a(1)=48]
- sequence(ring, init_values)
Creates a \(C^2\)-finite sequence for the coefficient sequence of the function.
Note
Every coefficient sequence of a function satisfying a functional equation of the given type satisfy a linear recurrence with C-finite coefficients. However, not all of those coefficient sequences are \(C^2\)-finite.
INPUT:
ring
– arec_sequences.C2FiniteSequenceRing
which contains the coefficients of the recurrences.init_values
– initial values used to construct the \(C^2\)-finite sequence.
OUTPUT:
A \(C^2\)-finite sequence representing the coefficient sequence of the function.
EXAMPLES:
sage: from rec_sequences.FunctionalEquation import * sage: from rec_sequences.C2FiniteSequenceRing import * sage: from rec_sequences.CFiniteSequenceRing import * sage: R.<x> = PolynomialRing(QQ) sage: C = CFiniteSequenceRing(QQ) sage: C2 = C2FiniteSequenceRing(QQ) sage: n = var("n") sage: c = C(2^n+1) sage: d = C(3^n) sage: a = C2([c, d], [1]) sage: func_eq = a.functional_equation() sage: print(func_eq) (x)g(2x) + (x)g(x) + (1/3)g(3x) = 1/3 sage: func_eq.sequence(C2, a[:5]) == a True