# 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.
triangulate: (Matrix LO, List Vector F) -> Record(mat: Matrix LO, vecs: List Vector F)
triangulate(m, [v1, ..., vn]) returns [m_0, [w1, ..., wn]] such that for any constant c1, ..., cn the system m_0 x = c1*w1 + ... + cn*wn is equivalent to to m x = c1*v1 + ... + cn*vn
triangulate: (Matrix LO, Vector F) -> Record(mat: Matrix LO, vec: Vector F)
triangulate(m, v) returns [m_0, v_0] such that m_0 is upper triangular and the system m_0 x = v_0 is equivalent to m x = v.