Linear differential systems

function:formal_reduce

FUNCTION: formal_reduce - compute the formal reduction of a system of linear
differential equations with power series coefficients

CALLING SEQUENCE:
formal_reduce(M, x)

PARAMETERS:
M - a symbol representing a formal power series matrix in the variable x
x - a name

SYNOPSIS:
This function computes the formal reduction of the system Y'=MY. The input
is a symbol M which stands for a formal power series matrix. Use the
mat_convert function in order to convert a given matrix over the rational
functions into a local matrix series at a given point.

The output is a list of pairs [w, Ai] where w is an exponential part of
the system and Ai stands for a formal power series matrix having at most
a simple pole.

Occuring ramifications are not immediately visible in the output, they can
be retrieved using the mat_get_ramification primitive.

EXAMPLES:


A:=
array(1 .. 4, 1 .. 4,[(1, 1)=2/x/(x-1),(3, 3)=6/(x-1)^2,(2, 2)=-5/x,(1, 4)=-2
/(x-1)^2,(1, 2)=3/x/(x-1)^2,(2, 4)=2,(4, 1)=-6/(x-1),(1, 3)=3/(x-1)^2,(2,
3)=(-
2+5*x)/x^2/(x-1)^2,(4, 3)=5/x,(3, 4)=(2*x-3)/x/(x-1)^2,(4, 2)=-2/(x-1),(3,
1)=-
5,(4, 4)=-4/(x-1)^2,(3, 2)=-3/(x-1),(2, 1)=5/x^2]);

[ 2 3 3 2 ]
[---------- ----------- --------- - ---------]
[x (-1 + x) 2 2 2]
[ x (-1 + x) (-1 + x) (-1 + x) ]
[ ]
[ 5 -2 + 5 x ]
[ ---- - 5/x ------------ 2 ]
[ 2 2 2 ]
[ x x (-1 + x) ]
A := [ ]
[ 3 6 2 x - 3 ]
[ -5 - ------ --------- -----------]
[ -1 + x 2 2]
[ (-1 + x) x (-1 + x) ]
[ ]
[ 6 2 4 ]
[ - ------ - ------ 5/x - ---------]
[ -1 + x -1 + x 2]
[ (-1 + x) ]


> M := mat_convert(A, x, 1);
M := A8

> formal_reduce(M,x);

6 19 1 83 1 4 219
[[---- - -- 1/x, A14], [- 4/9 ---- - -- ----, A27], [- ---- - --- 1/x, A31]]
2 20 3 72 2 2 80
x x x x


> mat_get_ramification(A27,x);
2
- 9/4 x

> mat_eval(A14,x,0,5);

[ 185699 250025137 2347897163 2 1229792043348121 3
[- ------ + --------- x - ---------- x + ---------------- x
[ 36000 64800000 186624000 52488000000000

23942788853967124373 4 54225495852826945043411 5]
- -------------------- x + ----------------------- x ]
377913600000000000 340122240000000000000 ]


> M := mat_convert(A, x, 0);
M := A32

> formal_reduce(M,x);

2
1 17 1 RootOf(_Z + 15)
[[1/15 ---- - -- ----, A46], [----------------, A51]]
3 60 2 x
x x