SystemODESolver(F, LO)

odeef.spad line 1 [edit on github]

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

solve : (Matrix(F), List(Vector(F)), Mapping(Record(particular : List(Record(ratpart : F, coeffs : Vector(F))), basis : List(F)), LO, 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), Mapping(Union(Record(particular : F, basis : List(F)), "failed"), LO, F)) -> 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)), Mapping(Record(particular : List(Record(ratpart : F, coeffs : Vector(F))), basis : List(F)), LO, 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), Mapping(Record(particular : Union(F, "failed"), basis : List(F)), LO, 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), 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(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(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.

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