LinearFunctionalSystems - Maple Programming Help

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : Mathematics : Factorization and Solving Equations : LinearFunctionalSystems : LinearFunctionalSystems/RationalSolution





return the rational solution of a linear functional system of equations


Calling Sequence






Calling Sequence

RationalSolution(sys, vars, opts)

RationalSolution(A, b, x, case, opts)

RationalSolution(A, x, case, opts)




list of equations; linear functional system



list of function variables such as [y1(x), y2(x), ...]; variables to solve for



Matrix with rational elements



Vector with rational elements



independent variable



name indicating the case of the system; one of 'differential', 'difference', or 'qdifference'



optional arguments of the form 'keyword'=value where keyword is one of method, denom, numdegree, hybrid, or use_constraints



The RationalSolution command returns the rational solutions of the given linear functional system of equations with polynomial coefficients. If such a solution does not exist, then the empty list  is returned. If either the denominator or the degree of numerator of rational solutions cannot be bound then FAIL is returned. In this case the problem could be further specified by providing additional equations or by fixing the degree and/or denominator bound in advance using numdegree and denom options.


The system parameter is entered either in list form (a list of equations sys and a list of function variables vars to solve for), or in matrix form (matrix A, vector b, and the independent variable x, where the vector b is optional).


The matrix form specifies the system Lyx=Ayx+b, where L is the operator (either differential, difference, or q-difference), yx is the vector of the functions to solve for, A is a rational matrix, and b is a rational vector (right-hand side).


For the matrix from of the calling sequence, the case of the system must be specified as one of 'differential', 'difference', or 'qdifference'. If b is not specified, the system is assumed to be homogeneous.


This function computes the universal denominator of the given system by using LinearFunctionalSystems[UniversalDenominator]. Then, by substituting this denominator, it forms the new system of equations to solve for the numerator of the rational solution of the given system. This system is solved using LinearFunctionalSystems[PolynomialSolution] and, consequently, the rational solution of the given system is constructed.


If the option 'use_constraints'='true' is used, then the additional constraints on derivatives are added to the system. Additional constraints are consequences of the given system. They have the form ⅆⅆxyix=pizix, where pi is a polynomial and zix is a new unknown function. Using the constraints may speed up the solving of the system in some cases.


The solution is the list of rational functions in x, corresponding to vars. This solution involves arbitrary constants of the form _c1, _c2, etc.


If the number of linear independent equations of the system is less than the number of the function variables then the denominator and the degree of numerator of rational solutions cannot be bound and FAIL is returned. In this case it is possible either to specify the bounds using options of the form 'numdegree'=n and 'denom'=u or to extend the system by additional equations, in particular giving the desirable value of some of the function variables (see example).


The error conditions associated with RationalSolution are the same as those which are generated by LinearFunctionalSystems[Properties] and LinearFunctionalSystems[CanonicalSystem].


This function is part of the LinearFunctionalSystems package, and so it can be used in the form RationalSolution(..) only after executing the command with(LinearFunctionalSystems). However, it can always be accessed through the long form of the command by using the form LinearFunctionalSystems[RationalSolution](..).



The optional arguments are method, denom, numdegree, hybrid, and use_constraints.


method='quasimodular' or 'ordinary'


Indicates the version of EG-eliminations to use.  The default is 'ordinary'.




Specifies the polynomial u bounding the denominator of rational solutions to be found




Sets the upper bound of the degree of the numerator of the polynomial solutions to be found (in respect to the specified denominator).


hybrid=true or false


Specifies whether to use the hybrid method.  true (default) should be used for LinearFunctionalSystems[UniversalDenominator] (see below), false otherwise (applicable only to differential systems).


use_constraints=true or false 


Specifies whether RationalSolution function should use additional constraints on derivatives. The default is false. (applicable only to differential systems)



sys := [(x+3)*(x + 6)*(x + 1)*(x + 5)*x*y1(x + 1) -
(x - 1)*(x + 2)*(x + 3)*(x + 6)*(x + 1)*y1(x) -
x*(x^6 + 11*x^5 + 41*x^4 + 65*x^3 + 50*x^2-36)*y2(x) +
6*(x + 2)*(x + 3)*(x + 6)*(x + 1)*x*y4(x),
(x + 6)*(x + 2)*y2(x + 1) - x^2*y2(x),
(x + 6)*(x + 1)*(x + 5)*x*y3(x + 1) +
(x + 6)*(x + 1)*(x - 1)*y1(x) - x*(x^5 + 7*x^4 + 11*x^3 +
4*x^2 - 5*x + 6)*y2(x) - y3(x)*(x + 6)*(x + 1)*(x + 5)*x +
(x + 6)*(x + 1)*x*3*(x + 3)*y4(x),
(x + 6)*y4(x + 1) + x^2*y2(x) - (x + 6)*y4(x)]:

vars := [y1(x), y2(x), y3(x), y4(x)]:

RationalSolution(sys, vars);



B:=Matrix(1 .. 4, 1 .. 4,{(1, 1)=(x^2+3*x+1)*(x-1)/(x+2)/(x+5)/x,
(1, 4)=-(x-1)*(x^3+7*x^2+14*x+9)/(x+2)/(x+5),(4, 3)=1,(2, 3)=0,
(2, 1)=(x-1)/(x+1)/(x+5)/x,(4, 4)=(x-1)*(x+4)/(x+5),(4, 2)=-(x-1)/(x+1)/(x+5),
(4, 1)=-(x-1)/x/(x+5),(2, 4)=(x-1)/(x+1)/(x+5),(3, 2)=(x-1)*x/(x+1)/(x+5),
(3, 1)=(x-1)/(x+5),(1, 2)=(26*x^3+29*x^2+8*x-1+x^5+9*x^4)/(x+2)/(x+5)/(x+1),
(2, 2)=(x-1)/(x+1)^2/(x+5),(3, 4)=-(x^3+3*x^2-5*x-5)/(x+5),(1, 3)=-x-1,
(3, 3)=-x}):




sys := [x*diff(y1(x),x)-2*y1(x)-y2(x)]:

vars :=[y1(x),y2(x)]:

The number of variables is bigger than the number of equations

sol := RationalSolution(sys, vars);



specify options 'denom' and 'numdegree'

RationalSolution(sys, vars, 'denom'=(x^2+3)^2,'numdegree'=2);



or extend the system

sys := [op(sys),y2(x)=1/x^3]:

RationalSolution(sys, vars);





Abramov, S. A., and Polyakov, S.P. "Improved universal denominators" Programming and Computer Software 33, N. 3 (2007): 132-138.


Abramov, S. A., Bronstein M., Khmelnov D.E. "On regular and logarithmic solutions of ordinary linear differential systems" Proc. of CASC'2005, (2005): 1-12.


Abramov, S. A., Bronstein M. "On solutions of linear functional systems" Proc. of ISAAC'2001, (2001): 1-6.


Abramov, S. A. "EG-Eliminations." Journal of Difference Equations and Applications, (1999): 393-433.

See Also