# SystemODESolver(F, LO)ΒΆ

SystemODESolver provides tools for triangulating and solving some systems of linear ordinary differential equations.

- solve: (Matrix F, List Vector F, (LO, List F) -> Record(particular: List Record(ratpart: F, coeffs: Vector F), basis: List F)) -> Record(particular: List Record(ratpart: Vector F, coeffs: Vector F), basis: List Vector F)
`solve(m, lv, solve)`

is a parametric version of solve(`m`

,`v`

, solve)

- solve: (Matrix F, Vector F, (LO, F) -> Union(Record(particular: F, basis: List F), failed)) -> Union(Record(particular: Vector F, basis: Matrix F), failed)
`solve(m, v, solve)`

returns`[v_p, bm]`

such that the solutions in`F`

of the system`D x = m x + v`

are`v_p + c_1 v_1 + ... + c_m v_m`

where the`c_i's`

are constants, and the`v_i's`

are columns of`bm`

and form a basis for the solutions of`D x = m x`

. Argument`solve`

is a function for solving a single linear ordinary differential equation in`F`

.

- solveInField: (Matrix LO, List Vector F, (LO, List F) -> Record(particular: List Record(ratpart: F, coeffs: Vector F), basis: List F)) -> Record(particular: List Record(ratpart: Vector F, coeffs: Vector F), basis: List Vector F)
`solveInField(m, lv, solve)`

is a parametric version of solveInField(`m`

,`v`

, solve)

- solveInField: (Matrix LO, Vector F, (LO, F) -> Record(particular: Union(F, failed), basis: List F)) -> Record(particular: Union(Vector F, failed), basis: List Vector F)
`solveInField(m, v, solve)`

returns`[[v_1, ..., v_m], v_p]`

such that the solutions in`F`

of the system`m x = v`

are`v_p + c_1 v_1 + ... + c_m v_m`

where the`c_i's`

are constants, and the`v_i's`

form a basis for the solutions of`m x = 0`

. Argument`solve`

is a function for solving a single linear ordinary differential equation in`F`

.

- triangulate: (Matrix F, List Vector F) -> Record(A: Matrix F, eqs: List Record(C: Matrix F, lg: List Vector F, eq: LO, lrh: List F))
`triangulate(A, lv)`

is a parametric version of triangulate(A,`v`

).

- triangulate: (Matrix F, Vector F) -> Record(A: Matrix F, eqs: List Record(C: Matrix F, g: Vector F, eq: LO, rh: F))
`triangulate(M, v)`

returns`A, [[C_1, g_1, L_1, h_1], ..., [C_k, g_k, L_k, h_k]]`

such that under the change of variable`y = A z`

, the first order linear system`D y = M y + v`

is uncoupled as`D z_i = C_i z_i + g_i`

and each`C_i`

is a companion matrix corresponding to the scalar equation`L_i z_j = h_i`

.