restartD-Algebraic FunctionsThis worksheet accompagnies the paper "D-Algebraic Functions" by Rida Ait El Manssour, Anna-Laura Sattelberger, and Bertrand Teguia Tabuguia. Our Maple package NLDE uses the Maple packages
- PolynomialIdeals- Groebner
for elimination with Gr\303\266bner bases. The source file of the package can be found here or here. Those interested in trying the computations of this file in a Jupyter notebook should download the notebook attached to the MathRepo webpage at https://mathrepo.mis.mpg.de/DAlgebraicFunctions
In order to be able to use NLDE, one can just put the file NLDE.mla in the same directory with the notebook or the Maple worksheet.
We start by setting the (current) working directory as a directory for libraries.libname:=currentdir(),libname:Then we load the NLDE package. It has 4 procedures, and we present some examples for each of them. with(NLDE) Example 2.4
From the linear ODE of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEkc2luRicvJSVzaXplR1EjMTRGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkobWZlbmNlZEdGJDYlLUYjNiYtRiw2JlEieEYnRi8vRjNRJXRydWVGJy9GNlEnaXRhbGljRidGLy8lK2V4ZWN1dGFibGVHRjRGNUYvRjVGL0ZERjU= one derives an ADE satisfied by its reciprocal using unaryDalg as below.
The equation for LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEkc2luRicvJSVzaXplR1EjMTRGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkobWZlbmNlZEdGJDYlLUYjNiYtRiw2JlEieEYnRi8vRjNRJXRydWVGJy9GNlEnaXRhbGljRidGLy8lK2V4ZWN1dGFibGVHRjRGNUYvRjVGL0ZERjU=can be computed using DEtools:-FindODE.ODE:=DEtools:-FindODE(sin(x),y(x))Syntax of unaryDalg: unaryDalg(ADEin,y(x),z=r(x,y)),
where ADEin is an algebraic differential equation (so contains "="), y(x) is its dependent variable, and x is its independent variable. z is the name of dependent variable for the output (like y for y(x)), and r is a rational expression in x and y. The output is an ADE satisfies by all r(x,f(x)), where f(x) satisfies the ADEin.
Hence the ADE for the reciprocal LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEkc2luRicvJSVzaXplR1EjMTRGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkobWZlbmNlZEdGJDYlLUYjNiYtRiw2JlEieEYnRi8vRjNRJXRydWVGJy9GNlEnaXRhbGljRidGLy8lK2V4ZWN1dGFibGVHRjRGNUYvRjVGL0ZERjU=unaryDalg(ODE=0,y(x),z=1/y)Example 2.9
We now consider the Painlev\303\251 transcendent of type I that fullfils the ADE:
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYxLUkmbWZyYWNHRiQ2KC1JJW1zdXBHRiQ2JS1JI21pR0YkNiZRImRGJy8lJXNpemVHUSMxNEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYmLUkjbW5HRiQ2JVEiMkYnRjUvRjxRJ25vcm1hbEYnRjVGOEY7LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GIzYmLUYvNiUtRjI2JlEjZHhGJ0Y1RjhGO0Y+RkZGNUY4RjsvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRlUvJSliZXZlbGxlZEdRJmZhbHNlRictRjI2JlEieUYnRjVGOEY7LUkobWZlbmNlZEdGJDYlLUYjNiYtRjI2JlEieEYnRjVGOEY7RjUvJStleGVjdXRhYmxlR0ZaRkRGNUZELUkjbW9HRiQ2LlEifkYnRjVGRC8lJmZlbmNlR0ZaLyUqc2VwYXJhdG9yR0ZaLyUpc3RyZXRjaHlHRlovJSpzeW1tZXRyaWNHRlovJShsYXJnZW9wR0ZaLyUubW92YWJsZWxpbWl0c0dGWi8lJ2FjY2VudEdGWi8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRmZwLUZjbzYuUSI9RidGNUZERmZvRmhvRmpvRlxwRl5wRmBwRmJwL0ZlcFEsMC4yNzc3Nzc4ZW1GJy9GaHBGXXFGYm8tRkE2JVEiNkYnRjVGREZib0Zlbi1GLzYlRmhuRj5GRi1GY282LlEiK0YnRjVGREZmb0Zob0Zqb0ZccEZecEZgcEZicC9GZXBRLDAuMjIyMjIyMmVtRicvRmhwRmhxRl1vRjVGYG9GRA==
All squares of solutions to that ADE satisfy the following ADEunaryDalg(diff(y(x),x,x)=6*y(x)^2+x,y(x),z=y^2)Example 4.3
Syntax of composeDalg: composeDalg([ADE1,ADE2],[y(x),z(x)],w(x)),
where ADE1 and ADE2 are two algebraic differential equations of the dependent variableLUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbW9HRiQ2LlEifkYnLyUlc2l6ZUdRIzE0RicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y3LyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkZGLy8lK2V4ZWN1dGFibGVHRjdGMg==y(x) and z(x), resp. w(x) is the dependent variable for the output. The latter is an ADE satisfies by all f(g(x)) where f(x) satisfies ADE1, and g(x) satisfies ADE2.ADE1:=diff(y(x),x)-y(x)=0ADE2:=z(x)^2+2*diff(z(x),x)=0composeDalg([ADE1,ADE2],[y(x),z(x)],w(x))Example 4.4ADE1:=diff(y(x),x,x)+y(x)=0ADE2:=diff(z(x),x)-x*z(x)=0composeDalg([ADE1,ADE2],[y(x),z(x)],w(x))Example 5.1
Syntax of arithmeticDalg: arithmeticDalg([ADE1,...,ADEn],[y1(x),...,yn(x)],w=r(x,y1,...,yn)),
to be understood as for unaryDalg, but here we can deal with n-ary (n operands) operations with D-algebraic functions.ADE1:=diff(y(x),x)^3+y(x)+1=0ADE2:=diff(z(x),x)^2-z(x)-1=0arithmeticDalg([ADE1,ADE2],[y(x),z(x)],w=y+z)Remark 5.3 and Remark 5.4ADE1:=diff(y(x),x,x)*y(x)-diff(y(x),x)^2=0ADE2:=diff(z(x),x)^2+z(x)^2+1=0arithmeticDalg([ADE1,ADE2],[y(x),z(x)],w=y+z)One can verify that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JlEiZkYnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LlElJnBtO0YnRi8vRjZRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZALyUpc3RyZXRjaHlHRkAvJSpzeW1tZXRyaWNHRkAvJShsYXJnZW9wR0ZALyUubW92YWJsZWxpbWl0c0dGQC8lJ2FjY2VudEdGQC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRk8tRiw2JlEiSUYnRi9GMkY1Ri8vJStleGVjdXRhYmxlR0ZARjw= is not a solution of the previous output ADE, where LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JlEiZkYnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnRi8vJStleGVjdXRhYmxlR1EmZmFsc2VGJy9GNlEnbm9ybWFsRic= is a solution of ADE1, eg: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JlEiZkYnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYlLUYjNiYtRiw2JlEieEYnRi9GMkY1Ri8vJStleGVjdXRhYmxlR1EmZmFsc2VGJy9GNlEnbm9ybWFsRidGL0ZDLUkjbW9HRiQ2LlEiPUYnRi9GQy8lJmZlbmNlR0ZCLyUqc2VwYXJhdG9yR0ZCLyUpc3RyZXRjaHlHRkIvJSpzeW1tZXRyaWNHRkIvJShsYXJnZW9wR0ZCLyUubW92YWJsZWxpbWl0c0dGQi8lJ2FjY2VudEdGQi8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRlktRiw2JlEkZXhwRidGLy9GM0ZCRkNGOEYvRkBGQw==, and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JlEiSUYnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnRi8vJStleGVjdXRhYmxlR1EmZmFsc2VGJy9GNlEnbm9ybWFsRic= is the imaginary number, which is a constant solution of ADE2.
This special case can be treated separately as shown below.unaryDalg(ADE1,y(x),w=y+I)An algebraic equation is seen as a zeroth-order differential equation.arithmeticDalg([ADE1,z(x)^2+1=0],[y(x),z(x)],w=y+z)Example 5.6 (SIR model)
Syntax of SystoMinDiffPoly: SystoMinDiffPoly([dy1,...,dyn],r(x,y1,...yn),[y1,...yn],w(x)),
where dy1,...,dyn, are the derivatives of y1,...yn, in terms of y1,...,yn, given rationally. x is the independent variable, and w is the name of the dependent variable for the output differential equation. This is also called input-output equation.timing,p:=CodeTools:-CPUTime(SystoMinDiffPoly([-beta*S*T-delta*S + mu, beta*S*
T - gamma*T + nu, delta*S+gamma*T],R,[S,T,R],w(t))):timingPDEtools:-difforder(p,t)Bonus material: checking the validity of the outputs
Composition, addition, multiplication, division, exponentiation.
We here demonstrate how one can verify the correctness of the outputs when the solutions of the input ADEs can be found. Given two algebraic differential equations ADE1 and ADE2, such that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JlEiZkYnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnRi8vJStleGVjdXRhYmxlR1EmZmFsc2VGJy9GNlEnbm9ybWFsRic= fulfils ADE1 and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JlEiZ0YnLyUlc2l6ZUdRIzE0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnRi8vJStleGVjdXRhYmxlR1EmZmFsc2VGJy9GNlEnbm9ybWFsRic= fulfills ADE2, the output ADE is valid if it vanishes at LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkjbWlHRiQ2J1EnJiM5NDU7RicvJSVzaXplR1EjMTRGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JKG1mZW5jZWRHRiQ2JS1GIzYoLUYsNiZRImZGJ0YvL0YzUSV0cnVlRicvRjlRJ2l0YWxpY0YnLUkjbW9HRiQ2LlEiLEYnRi9GOC8lJmZlbmNlR0Y0LyUqc2VwYXJhdG9yR0ZELyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiZRImdGJ0YvRkNGRUYvLyUrZXhlY3V0YWJsZUdGNEY4Ri9GOC1GSDYvUSI9RidGL0Y1RjhGSy9GTkY0Rk9GUUZTRlVGVy9GWlEsMC4yNzc3Nzc4ZW1GJy9GZ25GY28tRiw2J0ZCRi9GQ0Y1RkUtRkg2L1EifkYnRi9GNUY4RktGYW9GT0ZRRlNGVUZXRlkvRmduRmVuRitGZ28tRiw2J0Zbb0YvRkNGNUZFRmdvRi9GXG9GOA==, where LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JlEmYWxwaGFGJy8lJXNpemVHUSMxNEYnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRidGLy8lK2V4ZWN1dGFibGVHRjRGNQ== (e.g.: LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbW9HRiQ2LlEiK0YnLyUlc2l6ZUdRIzE0RicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y3LyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkYtRiw2LlEiLEYnRi9GMkY1L0Y5USV0cnVlRidGOkY8Rj5GQEZCL0ZFUSYwLjBlbUYnL0ZIUSwwLjMzMzMzMzNlbUYnLUYsNi5RJyZzZG90O0YnRi9GMkY1RjhGOkY8Rj5GQEZCRk4vRkhGT0ZJLUYsNi5RIn5GJ0YvRjJGNUY4RjpGPEY+RkBGQkZORlVGLy8lK2V4ZWN1dGFibGVHRjdGMg==/, \342\210\230) is the operation used to compute the output ADE.ADE1:=(1 + x)*diff(y(x), x)=1 We solve ADEs using Maple's dsolve command.dsolve(ADE1,y(x))ADE2:=-z(x)^2 - 2*diff(z(x), x)^2 + diff(z(x), x, x)*z(x) = 0dsolve(ADE2,z(x))We will verify our result with LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiVRIjFGJy8lJXNpemVHUSMxNEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1GIzYnLUkjbWlHRiQ2JlEkc2luRidGMi8lJ2l0YWxpY0dRJmZhbHNlRidGNS1JKG1mZW5jZWRHRiQ2JS1GIzYmLUY7NiZRInhGJ0YyL0Y/USV0cnVlRicvRjZRJ2l0YWxpY0YnRjJGSUZLRjJGNUYyRklGSy8lLmxpbmV0aGlja25lc3NHRjEvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGUS8lKWJldmVsbGVkR0ZARjIvJStleGVjdXRhYmxlR0ZARjU= from the solutions of ADE2 and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JlEkbG9nRicvJSVzaXplR1EjMTRGJy8lJ2l0YWxpY0dRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkobWZlbmNlZEdGJDYlLUYjNigtSSNtbkdGJDYlUSIxRidGL0Y1LUkjbW9HRiQ2LlEiK0YnRi9GNS8lJmZlbmNlR0Y0LyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRlUtRiw2JlEieEYnRi8vRjNRJXRydWVGJy9GNlEnaXRhbGljRidGLy8lK2V4ZWN1dGFibGVHRjRGNUYvRjVGL0ZpbkY1 from those of ADE1ADE3:=composeDalg([ADE1,ADE2],[y(x),z(x)],w(x))simplify(eval(ADE3,w(x)=log(1+1/sin(x))))ADE4:=arithmeticDalg([ADE1,ADE2],[y(x),z(x)],w=y+z)simplify(eval(ADE4,w(x)=1/sin(x)+log(1+x)))ADE5:=arithmeticDalg([ADE1,ADE2],[y(x),z(x)],w=y*z)simplify(eval(ADE5,w(x)=1/sin(x)*log(1+x)))ADE6:=arithmeticDalg([ADE1,ADE2],[y(x),z(x)],w=y/z)simplify(eval(ADE6,w(x)=sin(x)*log(1+x)))ADE7:=unaryDalg(ADE1,y(x),w=(y+1)^3)simplify(eval(ADE7,w(x)=(log(1+x)^3)))Conclusion
The package is useful for practical computations with D-algebraic functions, i.e., solutions to algebraic differential equations. However, we point out that sometimes the running time can be very high due to elimination computations happening internally.