/usr/share/axiom-20170501/src/algebra/ODERED.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | )abbrev package ODERED ReduceLODE
++ Author: Manuel Bronstein
++ Date Created: 19 August 1991
++ Date Last Updated: 11 April 1994
++ References:
++ Bron92 Linear Ordinary Differential Equations: Breaking Through the
++ Order 2 Barrier
++ Description:
++ Elimination of an algebraic from the coefficentss
++ of a linear ordinary differential equation.
ReduceLODE(F, L, UP, A, LO) : SIG == CODE where
F : Field
L : LinearOrdinaryDifferentialOperatorCategory F
UP: UnivariatePolynomialCategory F
A : MonogenicAlgebra(F, UP)
LO: LinearOrdinaryDifferentialOperatorCategory A
V ==> Vector F
M ==> Matrix L
SIG ==> with
reduceLODE : (LO, A) -> Record(mat:M, vec:V)
++ reduceLODE(op, g) returns \spad{[m, v]} such that
++ any solution in \spad{A} of \spad{op z = g}
++ is of the form \spad{z = (z_1,...,z_m) . (b_1,...,b_m)} where
++ the \spad{b_i's} are the basis of \spad{A} over \spad{F} returned
++ by \spadfun{basis}() from \spad{A}, and the \spad{z_i's} satisfy the
++ differential system \spad{M.z = v}.
CODE ==> add
matF2L: Matrix F -> M
diff := D()$L
-- coerces a matrix of elements of F into a matrix of (order 0) L.O.D.O's
matF2L m ==
map((f1:F):L+->f1::L, m)$MatrixCategoryFunctions2(F, V, V, Matrix F,
L, Vector L, Vector L, M)
-- This follows the algorithm and notation of
-- "The Risch Differential Equation on an Algebraic Curve", M. Bronstein,
-- in 'Proceedings of ISSAC '91', Bonn, BRD, ACM Press,
-- pp.241-246, July 1991.
reduceLODE(l, g) ==
n := rank()$A
-- md is the basic differential matrix (D x I + Dy)
md := matF2L transpose derivationCoordinates(basis(), (f1:F):F+->diff f1)
for i in minRowIndex md .. maxRowIndex md
for j in minColIndex md .. maxColIndex md repeat
md(i, j) := diff + md(i, j)
-- mdi will go through the successive powers of md
mdi := copy md
sys := matF2L(transpose regularRepresentation coefficient(l, 0))
for i in 1..degree l repeat
sys := sys +
matF2L(transpose regularRepresentation coefficient(l, i)) * mdi
mdi := md * mdi
[sys, coordinates g]
|