Home : Maplesoft Products : Maple 18 : New Features in Maple 18 : Q-Difference Equations

Q-Difference Equations

The QDifferenceEquations package provides tools for studying equations of the form: 

 

and their solutions y(x), where a[0], () .. (), a[n] are polynomials in the indeterminates x and q. The indeterminate q is considered to be a constant. is the associated q-difference operator of order n, where Q represents the q-shift operator Qy(x) = y(`*`(q, `*`(x))). 

For example, the solutions of the first order q-difference equation Ly = 0, where L = `+`(`*`(`+`(`*`(`^`(x, 2)), `-`(1)), `*`(Q)), `+`(`-`(`*`(`^`(q, 2), `*`(`^`(x, 2)))), 1)), are given by: 

y(x) = `*`(C, `*`(`+`(`*`(`^`(x, 2)), `-`(1)))), 

where C is an arbitrary constant that is allowed to depend on but not on x

In Maple 18, two new commands were added to this package: 

  • Closure computes the closure in the ring of linear q-difference operators with polynomial coefficients.
  • Desingularize computes a multiple of a given q-difference operator with fewer singularities. 

As an example, let's look at the operator L from above. 

> with(QDifferenceEquations)
 
[AccurateQSummation, AreSameSolution, Closure, Desingularize, ExtendSeries, IsQHypergeometricTerm, IsSolution, PolynomialSolution, QBinomial, QBrackets, QDispersion, QECreate, QEfficientRepresentation...
[AccurateQSummation, AreSameSolution, Closure, Desingularize, ExtendSeries, IsQHypergeometricTerm, IsSolution, PolynomialSolution, QBinomial, QBrackets, QDispersion, QECreate, QEfficientRepresentation...
[AccurateQSummation, AreSameSolution, Closure, Desingularize, ExtendSeries, IsQHypergeometricTerm, IsSolution, PolynomialSolution, QBinomial, QBrackets, QDispersion, QECreate, QEfficientRepresentation...
[AccurateQSummation, AreSameSolution, Closure, Desingularize, ExtendSeries, IsQHypergeometricTerm, IsSolution, PolynomialSolution, QBinomial, QBrackets, QDispersion, QECreate, QEfficientRepresentation...
 
> L := `+`(`*`(`+`(`*`(`^`(x, 2)), `-`(1)), `*`(Q)), `+`(`-`(`*`(`^`(q, 2), `*`(`^`(x, 2)))), 1)); -1
 

This operator has singularities at x = `&+-`(1), where its leading coefficient vanishes. However, the solutions y(x) = `*`(C, `*`(`+`(`*`(`^`(x, 2)), `-`(1)))) satisfying Ly = 0 are non-singular at both points, so x = `&+-`(1) are two apparent singularities. It is possible to remove such apparent singularities by finding a higher order operator M that has the same solutions as L, plus some additional ones. This is what the command Desingularize  does. 

> M := Desingularize(L, Q, x, q)
 
`+`(`*`(`^`(Q, 2)), `*`(`+`(`-`(`*`(`^`(q, 2))), `-`(1)), `*`(Q)), `*`(`^`(q, 2)))
 

Let us verify that y(x) is actually a solution of M

> with(OreTools); -1; with(Converters); -1
 
> A := SetOreRing([x, q], qshift); -1
 
> OM := FromPolyToOrePoly(M, Q)
 
OrePoly(`*`(`^`(q, 2)), `+`(`-`(`*`(`^`(q, 2))), `-`(1)), 1)
 
> Apply(OM, y(x), A); 1
 
`+`(`*`(`^`(q, 2), `*`(y(x))), `*`(`+`(`-`(`*`(`^`(q, 2))), `-`(1)), `*`(y(`*`(q, `*`(x))))), y(`*`(`^`(q, 2), `*`(x))))
 
> expand(eval(`+`(`*`(`^`(q, 2), `*`(y(x))), `*`(`+`(`-`(`*`(`^`(q, 2))), `-`(1)), `*`(y(`*`(q, `*`(x))))), y(`*`(`^`(q, 2), `*`(x)))), y = (proc (x) options operator, arrow; `*`(C, `*`(`+`(`*`(`^`(x, 2...
 
0
 

The closure of an operator L consists of all left "pseudo"-multiples of L, i.e., all operators R for which there exists an operator, P (in Q, x, q) and a polynomial f (in x, q only), such that the following torsion relation holds true: 

PL = `*`(f, `*`(R)) 

Basically, this means that PL is a genuine left multiple of L of which one can factor out the content f. Both PL and R have exactly the same solutions, which include all solutions of L. In particular, the desingularizing operator M from above is an element of the closure of L

The command Closure computes a basis of the closure. 

> C := Closure(L, Q, x, q)
 
[`+`(`*`(`+`(`*`(`^`(x, 2)), `-`(1)), `*`(Q)), `-`(`*`(`^`(q, 2), `*`(`^`(x, 2)))), 1), `+`(`*`(`+`(`-`(`*`(q, `*`(x))), `-`(1)), `*`(`^`(Q, 2))), `*`(`+`(`*`(`^`(q, 3), `*`(x)), `*`(`^`(q, 2)), `*`(q...
 

We see that, trivially, L itself belongs to its closure. In addition, the basis contains two second order operators, both of which have fewer and different singularities than L itself, namely, x = `+`(`-`(`/`(1, `*`(q)))) and x = `/`(1, `*`(q)), respectively. Since these two singularities are different, the two leading coefficients are coprime as polynomials in x, and we can find a linear combination that is monic: 

> gcdex(lcoeff(C[2], Q), lcoeff(C[3], Q), x, 's', 't'), s, t; 1
 
1, -`/`(1, 2), -`/`(1, 2)
 
> collect(`+`(`*`(s, `*`(C[2])), `*`(t, `*`(C[3]))), Q, normal)
 
`+`(`*`(`^`(Q, 2)), `*`(`+`(`-`(`*`(`^`(q, 2))), `-`(1)), `*`(Q)), `*`(`^`(q, 2)))
 

This, in fact, is exactly the desingularizing operator from above.