Documentation Center |
Domain of linear ordinary differential operators
Dom::LinearOrdinaryDifferentialOperator(<Var, <DVar, <Ring>>>)
Dom::LinearOrdinaryDifferentialOperator(Var, DVar, Ring)(p)
Dom::LinearOrdinaryDifferentialOperator(Var, DVar, Ring)(l)
Dom::LinearOrdinaryDifferentialOperator(Var, DVar, Ring)(eq, yx)
Dom::LinearOrdinaryDifferentialOperator(Var, DVar, Ring) creates the domain of linear ordinary differential operators with coefficients in the differential ring Ring and with derivation Var where DVar is the differential indeterminate. Elements of this domain are also called Ore polynomials and the multiplication of two elements is completely determined by the prescribed rule for every element r in Ring. And so Dom::LinearOrdinaryDifferentialOperator is a noncommutative ring.
Note: Nevertheless, for some reasons, for every element r in Ring, Var*r is automatically rewritten as r*Var. See Example 1. |
If Dom::LinearOrdinaryDifferentialOperator is called without any argument, a domain with coefficients in Dom::ExpressionField(normal) with derivation Df and differential indeterminate x is created.
Note: Only commutative differential rings of type DOM_DOMAIN are allowed which inherit from Dom::BaseDomain. If Ring is of type DOM_DOMAIN but does not inherit from Dom::BaseDomain, the domain Dom::ExpressionField(normal) will be used instead. |
First we create the domain of linear ordinary differential operators:
lodo := Dom::LinearOrdinaryDifferentialOperator()
by default the above domain has coefficients in the field Dom::ExpressionField(normal) with derivation Df and differential indeterminate x.
We can create elements of lodo in 3 ways: polynomials in Df, list of elements of Dom::ExpressionField and with a linear ordinary homogeneous differential equation:
lodo(Df^2 + (x + 1)*Df + 2*x), lodo([2*x, x + 1, 1]), lodo(diff(y(x),x,x) + (x + 1)*diff(y(x),x) + 2*x*y(x), y(x))
It's easy to obtain the linear differential equation associated to a linear differential operator:
L := lodo((x + x^3)*Df^3 + (6*x^2 + 3)*Df^2 - 12): L(y(x))
and one can also evaluates a differential operator at an expression:
L(2*x^2 + 1), L(ln(x)), L(ln(x), Unsimplified)
Multiplication of elements of lodo is noncommutative but for every element r of the coefficients ring one has Df*r = r*Df:
lodo(x^2*Df), lodo(Df*x^2), lodo(Df)*lodo(x^2)
Dom::LinearOrdinaryDifferentialOperator is a domain where the Euclidean division exists but one has to precise if the multiplication of 2 elements of this domain is made on the right or on the left side:
L1 := lodo(x*Df^3 + (x^2 - 3)*Df^2 + 4*x*Df + 2): lodo::leftDivide(L1,lodo(x*Df + 1))
lodo(x*Df + 1) * %[quotient] = L1
Hence one has the notions of greatest common divisor, least common multiple on the right and on the left, and a modified version of the extended Euclidean algorithm:
L2 := lodo(x*Df + 1): ree := lodo::rightExtendedEuclid(L1,L2)
The right greatest common divisor and the left least common multiple can be read from the above list:
iszero(lodo::rightGcd(L1,L2) - ree[1][1]), iszero(ree[1][1] - (ree[1][2]*L1 + ree[1][3]*L2)), iszero(lodo::leftLcm(L1,L2) - (-ree[2][1]*L1)), iszero(-ree[2][1]*L1 - ree[2][2]*L2)
One can compute polynomial, rational and exponential zeros of linear differential operators of any degree provided the ring Ring is the field of rational functions of x
L3 := lodo((x^2 + 1)*x*Df^3 + 3*(2*x^2 + 1)*Df^2 - 12): lodo::rationalZeros(L3), lodo::exponentialZeros(L3)
even when the operator contains some parameters rationally:
lodo::exponentialZeros( lodo(Df^4 + (b*l - 2*a^2 - a*l*x)*Df^2 + a^4-a^2*b*l + a^3*l*x))
One can factorize linear differential operators into irreducible factors when the ring Ring is the field of rational functions of x. Nevertheless, the algorithm is complete only for operators of degree at most 3; for higher degree only left and right factors of degree 1 are found:
factor(lodo((x^2 + 1)*x*Df^3 + 3*(2*x^2 + 1)*Df^2 - 12)), factor(lodo(Df^3 + a*x*Df + a + b^3 + a*b*x))
Here the operator factors into two factors of degree 2 which cannot be found by MuPAD^{®}:
factor(lodo(Df^2 + x^3 + 1/x^3) * lodo(Df^2 + x^2 - 1/x^3))
Solving linear differential operators using the command solve is also possible:
solve(lodo(Df^2 + (3 - x)/(16*x^2)))
For certain cases, where the groups associated to the dfferential operators are finite primitive groups of degree 2, a polynomial is returned corresponding to the minimal polynomial of all zeros of the differential operator (they are algebraic over the base field):
solve(lodo(Df^2 + (-27*x + 32*x^2 + 27)/(144*x^2 - 288*x^3 + 144*x^4)))
For linear differential operators of degree greater than 3 only exponential zeros will be found:
solve(lodo(x*Df^4 + (-x + 4)*Df^3 - 3*Df^2 - x^2*Df - x + x^2))
Certain second degree linear differential operator can be solved in terms of some special functions (nonliouvillian functions) such as airyAi, besselI and whittakerM:
solve(lodo(Df^2 - (x + 1)/(x - 1)^5))
solve(lodo(Df^2 - (243 + 4*x^8 + 162*x^2 + 19*x^4)/ 36/x^2/(x^2 + 3)^2))
Var |
An indeterminate of type DOM_IDENT. Default is Df. |
DVar |
A differential indeterminate of type DOM_IDENT. Default is x. |
Ring |
An arbitrary commutative differential ring of characteristic zero. Default is Dom::ExpressionField(normal). |
p |
A polynomial expression in Var. |
l |
A list corresponding to the coefficients of the differential operator. If n is the length of l then the result returned is l[1] + l[2]*Var + ... + l[n]*Var^(n-1). |
eq |
A linear homogeneous differential equation. |
yx |
A function of DVar representing the dependent variable of the above linear differential equation. |