Artifact d31013220ee6e251b075db9b961b9ed478d504f3501fb9ab323ffcb1c287806d:
- Executable file
r37/packages/odesolve/odesolve.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 5569) [annotate] [blame] [check-ins using] [more...]
module odesolve; % Top level ordinary differential equation solver. comment on this package: a) Title: ODESOLVE b) Main Author: Malcolm MacCallum [Prof. M.A.H. MacCallum, School of Mathematical Sciences, Queen Mary and Westfield College, University of London, Mile End Road, LONDON E1 4NS, U.K. E-mail: on JANET (U.K. national network) mm@uk.ac.qmw.maths (Arpa/Internet form: mm@maths.qmw.ac.uk) Relays: ARPA: nsfnet-relay.ac.uk EARN/BITNET: UKACRL uucp/Usenet: ....!mcsun!ukc!maths.qmw.ac.uk!mm Telex: 893750 QMCUOL G Fax: +44 81 981 9587 Tel: +44 71 975 5445 or 975 5555 extension 5445] Other authors: Alan Barnes, Department of Computer Science, University of Aston, Aston triangle, Birmingham, U.K. Francis Wright: address as for Malcolm MacCallum c) Date: November 1990 d) Abstract: This is a solver for simple ordinary differential equations. The present version solves some well-known simple types of first-order equations and higher order linear equations with constant coefficients and Euler equations: a full list is in the accompanying documentation file. Very much more extensive and sophisticated versions are planned. e) REDUCE version required: 3.4. f) Relevant publications: M.A.H. MacCallum, `An ordinary differential solver for REDUCE', Lecture Notes in Computer Science, vol. 358 [Symbolic and algebraic computation (International symposium ISSAC '88], ed. P. Gianni, Springer-Verlag, Berlin and Heidelberg pp. 196-205 (1989). g) Appropriate keywords: Ordinary differential equations This is the source code file odesolve.red. There are also files of documentation, test examples and a log of a run of the test with extensions .doc .tst and .log; % If you are not compiling using a module system, comment out all % 'module' and 'endmodule' statements % This package has modules odesolve, ode1, testdf, linearn and lccode % at present. Note that testdf ends with extensions or variations on % REDUCE functions which may not be required in all implementations or % REDUCE versions create!-package('(odesolve ode1 testdf linearn lccode),'(solve)); % Note the following become reserved identifiers used as if they were % global variables (and there are also the function names of course) % In a later version this will be redone in functional programming style % % odeorder, odedegree, odelinearity, highestderiv, in testdf % odecoeffs, !!arbconst, arbconst in ode1 and linearn % numfacs!*, denfacs!*, numfactors, denfactors in ode1 % wronskian (a matrix) in lccode % and the reserved variables associated with solve and coeff will % be reset by certain of the routines % Note that no attempt is made to extend the integrator i.e. to solve % in any improved way the problems discussed by Davenport et al. It % should extend this solver's capabilities if the Reduce 3.3 algint % module is used. % Changes history % Jan 1990 Enabled input in the form of an equation % Changed output format to list of equation (in future, % equations?) (calling solve on these was abandoned as it % fails in nasty ways) % Added trode switch and message function. % Altered messages. Removed typing errors. Removed % setoperator. % Put in check for the factorizer bug (factorize(1) -> {}) % Declared arbconst algebraic. Changed method of finding % argument. % Made sortoutode return ode. % Removed an argument from lccode % % Planned changes % Rewrite in more functional style and remove use of global % variables % Add extra algorithms (see in the individual module headers) % Convert more from algebraic to symbolic mode % Other possible changes marked by lines starting % *** % Tracing switch and function fluid '(!*evallhseqp !*precise); fluid '(!*trode); switch trode; % The following two statements are needed in case SOLVE has not been % loaded before compiling this package. global '(multiplicities!*); flag('(multiplicities!*),'share); symbolic operator traceode; symbolic procedure traceode u; if !*trode then write u; % The arbitrary constants in solutions algebraic operator arbconst; algebraic (!!arbconst := 0); algebraic procedure newarbconst(); <<!!arbconst := !!arbconst +1; arbconst(!!arbconst)>>; % The entry point function % The procedures called are defined in the appropriate following modules algebraic procedure odesolve(ode, y, x); begin scalar var1,!*evallhseqp,!*precise; symbolic(!*evallhseqp := t); % Since we wish to evaluation % LHS of equations. var1 := sortoutode(ode, y, x); % returns ode as an expression if odeorder > 1 and odelinearity neq 1 then return odefailure(var1); return if odelinearity = 1 then <<if odeorder = 1 then linear1(var1, y, x) else linearn(var1,y,x) >> else if odeorder = 1 then odesolve1(var1, y, x); % *** Add entry points for extra methods here end; algebraic procedure odefailure(ode); <<traceode "This version of ODESOLVE cannot solve equations of the type given"; {ode=0}>>; endmodule; % odesolve end;