You can download a copy of my solver for second order linear DEs from
http://www.unk.edu/acad/math/people/willisb/home.html
Look for odelin19.tar.gz.
Notes:
(0) The solver uses a method due to Bronstein and Lafaille --- google
'bronstein' to find the article.
Additionally, it tries a method based on factoring a differential
operator.
(1) There is no user documentation.
(2) You'll need to use a version of Maxima that orders the Bessel function
arguments
as (order, main argument). Some Maxima versions (maybe even 5.9.0?) use
(main argument, order).
(3) The file odelin19.tar.gz should expand into a directory odelin19 that
contains 11 files.
(4) To use the solver, you'll need to install nset; the version of nset
that is currently distributed with Maxima
should work (but I haven't tried). You can also get the new nset version
off my webpage.
(5) To use the solver, you'll need to append 'odelin19' to
'file_search_lisp' and load
odelin. Here is how I do it under windows: (you'll need to change the
paths)
(%i1) file_search_lisp : cons("l:/nset-1.2.03/###.{x86f,o,lisp,cl}",
file_search_lisp)$
(%i2) file_search_lisp : cons("l:/odelin19/###.{x86f,o,lisp,cl}",
file_search_lisp)$
(%i3) load("odelin")$
(%i4) display2d : false$
(%i5) de : -'diff(y,x,2) + (x^2 - e^2) * y = 0$
(%i6) odelin(de,y,x);
...trying factor method
...solving 3 equations in 2 variables
...trying the Bessel solver
...solving 10 equations in 4 variables
...solving 10 equations in 4 variables
...solving 10 equations in 4 variables
...trying the F01 solver
...solving 10 equations in 5 variables
(%o6) SET(KUMMER_M((e^2+1)/4,1/2,-x^2)*%E^(x^2/2),
KUMMER_U((e^2+1)/4,1/2,-x^2)*%E^(x^2/2))
Maxima returns a FSS (fundamental solution set). You can turn off the
chatter
(%i7) de_solver_is_loquacious : false$
(%i8) aalgsys_is_loquacious : false$
(%i9) de : 'diff(y,x,2) + x * y$
(%i10) odelin(de,y,x);
(%o10) SET(BESSEL_J(1/3,2*x^(3/2)/3)*SQRT(x),
BESSEL_Y(1/3,2*x^(3/2)/3)*SQRT(x))
(6) Maxima doesn't "know" anything about the functions kummer_m,
kummer_u, gauss_a, gauss_b,
spheroidalwave_a, or spheroidalwave_b. If you are looking for a project,
...
(7) Every time the solver applies a method, the list 'genvars' grows.
After solving a few dozen
DEs, genvars can be so large that Maxima slows to a crawl. I haven't
tried to fix this (the testing code
uses kill(all) after every DE it solves); maybe something like
(defun $rerat (dirtyrat)
(let ((varlist nil) (genvar nil))
($rat ($ratdisrep dirtyrat))))
would clean up this stuff ---- I don't know.
(8) The solver checks each solution---I know of a few (obscure) cases
where the solution is (I think) correct, but
the check fails. The solver doesn't return a solution when the check
fails.
(9) The solver _only_ handles second order linear homogeneous DEs that
have rational function arguments.
Nothing else.
(10) I did have a solver that used pattern matching that solved a few
cases that don't get solved by Bronstein's
method--- out of slothfulness, I ditched it (it was bug-ridden).
(11) Expect bugs and glitches.
Barton