restart:We load our package:with(IntegrableConnections);The library linalg is also needed. with(linalg):We load OreModules in order to use the procedure to write a D-finite partial differential system as an integrable connection.with(OreModules):
BrycLetac system in dimension 2
We define the OreAlgebra (needed for OreModules):Alg2:=DefineOreAlgebra(diff=[d1,x1],diff=[d2,x2],polynom=[x1,x2],comm=[d]):We give the equations of the system:R2 := matrix(2,1,[-(1/2)*d*d2+d1^2-x2*d2^2,2*d1*d2+x1*d2^2]);We write the system as an integrable connection:C2:=OreModules[Connection](R2,Alg2);If we want to know the basis of the associated module in which the connection is written, we can use the procedure KBasis of OreModules:OreModules[KBasis](R2,Alg2);We use our procedure for computing hyperexponential solutions of the integrable connection: HyperexpSols:=HyperexponentialSolutions(C2,[x1,x2],['param',[d]]);The system admits thus three rational solutions and on extra hyperexponential solution given by (x1^2-4*x2)^(1/2-1/2*d).
BrycLetac system in dimension 3
We define the OreAlgebra (needed for OreModules):Alg3:=DefineOreAlgebra(diff=[d1,x1],diff=[d2,x2],diff=[d3,x3],polynom=[x1,x2,x3],comm=[d]):We give the equations of the system:R3 := matrix(3,1,[-d*d2+d1^2-x2*d2^2-2*x3*d2*d3,-(1/2)*d*d3+2*d1*d2+x1*d2^2-x3*d3^2,2*d1*d3+d2^2+2*x1*d2*d3+x2*d3^2]);We write the system as an integrable connection:C3:=OreModules[Connection](R3,Alg3):If we want to know the basis of the associated module in which the connection is written, we can use the procedure KBasis of OreModules:OreModules[KBasis](R3,Alg3);We use our procedure for computing hyperexponential solutions of the integrable connection: HyperexpSols:=HyperexponentialSolutions(C3,[x1,x2,x3],['param',[d]]);Therefore the original system admits four linearly independent rational solutions but no more hyperexponential solutions.The computation took some time (around 190 seconds). If we want to do this in a more efficient way, then an idea is to use the rational solutions to reduce the size of the connection before searching for non-rational extra hyperexponential solutions. This can be done as below:R:=RationalSolutions(C3,[x1,x2,x3],['param',[d]]);we complete the rational solutions into an invertible matrix:P:=augment(R,stackmatrix(diag(0$4),diag(1$4)));
invP:=inverse(P);We perform the change of variable and look at the structure of the resulting matrices:for i from 1 to 3 do B||i:= map( factor@normal, evalm( invP&*(C3[i]&*P-map(diff,P,x||i)) )) od:zerotest:=proc(X) if X=0 then 0 else if X=1 then 1 else x fi; fi; end:seq(map(zerotest,B||i),i=1..3);Then, we only have to search for hyperexponential solutions of the following 4*4 blocks: C11:=submatrix(B||1,5..8,5..8):
C21:=submatrix(B||2,5..8,5..8):
C31:=submatrix(B||3,5..8,5..8):HyperexponentialSolutions([C11,C21,C31],[x1,x2,x3]);Our algorithm outputs that there are no extra hyperexponential solutions so that we find the same result that by running directly the procedure HyperexponentialSolutions but in a faster way!JSFH