Artifact 1e2be817e45b23dcda774708940323c2380d58e4a6fed05c538e06ccb2d30936:
- Executable file
r38/packages/odesolve/extend.rlg
— 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: 3611) [annotate] [blame] [check-ins using] [more...]
REDUCE Development Version, Wed Sep 13 20:40:41 2000 ... ODESolve 1.065 % Test and demonstration of the ODESolve extension interface % F.J.Wright@Maths.QMW.ac.uk, Time-stamp: <17 July 2000> % Load odesolve before inputting this file if not using test interface: % load_package odesolve; % Hook into the general ODE solver: algebraic procedure ODESolve_Hook_Demo (ode, y, x); %% For any ODE, if the dependent variable is z then this hook %% procedure returns a solution corresponding to ODESolve failing %% to find any solution; otherwise it returns nil (nothing) and so %% is ignored. if y=z then {ode=0}; odesolve_hook_demo % Set the hook: symbolic(ODESolve_Before_Hook := '(ODESolve_Hook_Demo)); (odesolve_hook_demo) % Hook into the nonlinear ODE solver: algebraic procedure ODESolve_Non_Hook_Demo (ode, y, x, n); %% If the ODE is nontrivially nonlinear and the order is 3 then %% this hook procedure returns a solution corresponding to ODESolve %% failing to find any solution; otherwise it returns nil (nothing) %% and so is ignored. if n=3 then {ode=0}; odesolve_non_hook_demo % Set the hook: symbolic(ODESolve_Before_Non_Hook := '(ODESolve_Non_Hook_Demo)); (odesolve_non_hook_demo) % Hook into the general linear ODE solver: algebraic procedure ODESolve_Lin_Hook_Demo (odecoeffs, driver, y, x, n, m); %% If the ODE is linear and the order is 3 then this hook procedure %% returns a solution corresponding to ODESolve failing to find any %% solution; otherwise it returns nil (nothing) and so is ignored. %% (NB: Algebraic-mode lists are indexed from 1 in REDUCE!) if n=3 then {(for i := m : n sum part(odecoeffs,i+1)*df(y,x,i)) = driver}; odesolve_lin_hook_demo % Set the hook: symbolic(ODESolve_Before_Lin_Hook := '(ODESolve_Lin_Hook_Demo)); (odesolve_lin_hook_demo) % Test all the hooks: % The general ODE solver: odesolve(df(y,x)); *** Dependent var(s) assumed to be y *** Independent var assumed to be x *** depend y , x {y=arbconst(1)} % hook ignored odesolve(df(z,x)); *** Dependent var(s) assumed to be z *** Independent var assumed to be x *** depend z , x {df(z,x)=0} % hook operates % The nonlinear ODE solver: odesolve(y*df(y,x,2)+1); *** Dependent var(s) assumed to be y *** Independent var assumed to be x {2*arbconst(3)*plus_or_minus(tag_1) sqrt(arbconst(2) - log(y)) + sqrt(2)*int(----------------------------,y) - 2*plus_or_minus(tag_1)*x=0} arbconst(2) - log(y) % hook ignored odesolve(y*df(y,x,3)+1); *** Dependent var(s) assumed to be y *** Independent var assumed to be x {df(y,x,3)*y + 1=0} % hook operates % The general linear ODE solver: odesolve(df(y,x,2)+1); *** Dependent var(s) assumed to be y *** Independent var assumed to be x 2 2*arbconst(5) + 2*arbconst(4)*x - x {y=--------------------------------------} 2 % hook ignored odesolve(df(y,x,3)+1); *** Dependent var(s) assumed to be y *** Independent var assumed to be x {df(y,x,3)=-1} % hook operates % Clear the hooks: symbolic(ODESolve_Before_Hook := nil); symbolic(ODESolve_Before_Non_Hook := nil); symbolic(ODESolve_Before_Lin_Hook := nil); end; Time for test: 690 ms, plus GC time: 109 ms