Artifact 151b9c684702c6dcdb01e01dd617f5a415379c25de915bd02861537b95a0095e:
- Executable file
r38/packages/odesolve/odesolve.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: 8455) [annotate] [blame] [check-ins using] [more...]
Tue Feb 10 12:26:51 2004 run on Linux % Tests and demonstrations for the ODESolve 1+ package -- % an updated version of the original odesolve test file. % Original Author: M. A. H. MacCallum % Maintainer: F.J.Wright@Maths.QMW.ac.uk ODESolve_version; ODESolve 1.065 on trode, combinelogs; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % First-order differential equations % (using automatic variable and dependence declaration). % First-order quadrature case: odesolve(df(y,x) - x^2 - e^x); *** Dependent var(s) assumed to be y *** Independent var assumed to be x *** depend y , x This is a linear ODE of order 1. It is solved by quadrature. x 3 3*arbconst(1) + 3*e + x {y=---------------------------} 3 % First-order linear equation, with initial condition y = 1 at x = 0: odesolve(df(y,x) + y * tan x - sec x, y, x, {x=0, y=1}); This is a linear ODE of order 1. It is solved by the integrating factor method. General solution is {y=arbconst(2)*cos(x) + sin(x)} Applying conditions {{x=0,y=1}} {y=cos(x) + sin(x)} odesolve(cos x * df(y,x) + y * sin x - 1, y, x, {x=0, y=1}); This is a linear ODE of order 1. It is solved by the integrating factor method. General solution is {y=arbconst(3)*cos(x) + sin(x)} Applying conditions {{x=0,y=1}} {y=cos(x) + sin(x)} % A simple separable case: odesolve(df(y,x) - y^2, y, x, explicit); This is a nonlinear ODE of order 1. It is separable. Solution before trying to solve for dependent variable is arbconst(4)*y - x*y - 1=0 1 {y=-----------------} arbconst(4) - x % A separable case, in different variables, with the initial condition % z = 2 at w = 1/2: odesolve((1-z^2)*w*df(z,w)+(1+w^2)*z, z, w, {w=1/2, z=2}); *** depend z , w This is a nonlinear ODE of order 1. It is separable. 2 2 General solution is {4*arbconst(5) - 2*log(w*z) - w + z =0} 1 Applying conditions {{w=---,z=2}} 2 2 2 { - 8*log(w*z) - 4*w + 4*z - 15=0} % Now a homogeneous one: odesolve(df(y,x) - (x-y)/(x+y), y, x); This is a nonlinear ODE of order 1. It is of algebraically homogeneous type solved by a change of variables of the form `y = vx'. 2 2 {arbconst(6) + sqrt( - x + 2*x*y + y )=0} % Reducible to homogeneous: % (Note this is the previous example with origin shifted.) odesolve(df(y,x) - (x-y-3)/(x+y-1), y, x); This is a nonlinear ODE of order 1. It is quasi-homogeneous if the result of shifting the origin is homogeneous ... It is of algebraically homogeneous type solved by a change of variables of the form `y = vx'. 2 2 {arbconst(7) + sqrt( - x + 2*x*y + 6*x + y - 2*y - 7)=0} % and the special case of reducible to homogeneous: odesolve(df(y,x) - (2x+3y+1)/(4x+6y+1), y, x); This is a nonlinear ODE of order 1. 2 It is separable after letting y + ---*x => y 3 {49*arbconst(8) - 3*log(14*x + 21*y + 5) - 21*x + 42*y=0} % A Bernoulli equation: odesolve(x*(1-x^2)*df(y,x) + (2x^2 -1)*y - x^3*y^3, y, x); This is a nonlinear ODE of order 1. It is of Bernoulli type. 5 1 5*arbconst(9) + 2*x {----=----------------------} 2 4 2 y 5*x - 5*x % and finally, in this set, an exact case: odesolve((2x^3 - 6x*y + 6x*y^2) + (-3x^2 + 6x^2*y - y^3)*df(y,x), y, x); This is a nonlinear ODE of order 1. It is exact and is solved by quadrature. 4 2 2 2 4 {4*arbconst(10) + 2*x + 12*x *y - 12*x *y - y =0} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Now for higher-order linear equations with constant coefficients % First, examples without driving terms % A simple one to start: odesolve(6df(y,x,2) + df(y,x) - 2y, y, x); This is a linear ODE of order 2. It has constant coefficients. (7*x)/6 e *arbconst(12) + arbconst(11) {y=--------------------------------------} (2*x)/3 e % An example with repeated and complex roots: odesolve(ode := df(y,x,4) + 2df(y,x,2) + y, y, x); This is a linear ODE of order 4. It has constant coefficients. {y=arbconst(16)*sin(x) + arbconst(15)*cos(x) + arbconst(14)*sin(x)*x + arbconst(13)*cos(x)*x} % A simple right-hand-side using the above example: odesolve(ode = exp(x), y, x); This is a linear ODE of order 4. It has constant coefficients. Constructing particular integral using `D-operator method'. {y=(4*arbconst(20)*sin(x) + 4*arbconst(19)*cos(x) + 4*arbconst(18)*sin(x)*x x + 4*arbconst(17)*cos(x)*x + e )/4} ode := df(y,x,2) + 4df(y,x) + 4y - x*exp(x); x ode := df(y,x,2) + 4*df(y,x) - e *x + 4*y % At x=1 let y=0 and df(y,x)=1: odesolve(ode, y, x, {x=1, y=0, df(y,x)=1}); This is a linear ODE of order 2. It has constant coefficients. Constructing particular integral using `D-operator method'. 3*x 3*x 27*arbconst(22) + 27*arbconst(21)*x + 3*e *x - 2*e General solution is {y=--------------------------------------------------------- 2*x 27*e } Applying conditions {{x=1,y=0,df(y,x)=1}} 3*x 3*x 3 3 2 2 3*e *x - 2*e - 6*e *x + 5*e + 27*e *x - 27*e {y=-----------------------------------------------------} 2*x 27*e % For simultaneous equations you can use the machine, e.g. as follows: depend z,x; ode1 := df(y,x,2) + 5y - 4z + 36cos(7x); ode1 := 36*cos(7*x) + df(y,x,2) + 5*y - 4*z ode2 := y + df(z,x,2) - 99cos(7x); ode2 := - 99*cos(7*x) + df(z,x,2) + y ode := df(ode1,x,2) + 4ode2; ode := - 2160*cos(7*x) + df(y,x,4) + 5*df(y,x,2) + 4*y y := rhs first odesolve(ode, y, x); This is a linear ODE of order 4. It has constant coefficients. Constructing particular integral using `D-operator method'. y := arbconst(26)*sin(x) + arbconst(25)*cos(x) + arbconst(24)*sin(2*x) + arbconst(23)*cos(2*x) + cos(7*x) z := rhs first solve(ode1,z); z := (4*arbconst(26)*sin(x) + 4*arbconst(25)*cos(x) + arbconst(24)*sin(2*x) + arbconst(23)*cos(2*x) - 8*cos(7*x))/4 clear ode1, ode2, ode, y, z; nodepend z,x; % A "homogeneous" n-th order (Euler) equation: odesolve(x*df(y,x,2) + df(y, x) + y/x + (log x)^3, y, x); This is a linear ODE of order 2. It has non-constant coefficients. It is of the homogeneous (Euler) type and is reducible to a simpler ODE ... It has constant coefficients. Constructing particular integral using `D-operator method'. 3 {y=(2*arbconst(28)*sin(log(x)) + 2*arbconst(27)*cos(log(x)) - log(x) *x 2 + 3*log(x) *x - 3*log(x)*x)/2} % The solution here remains symbolic (because neither REDUCE nor Maple % can evaluate the resulting integral): odesolve(6df(y,x,2) + df(y,x) - 2y + tan x, y, x); This is a linear ODE of order 2. It has constant coefficients. Constructing particular integral using `D-operator method'. But cannot evaluate the integrals, so ... Constructing particular integral using `variation of parameters'. 7 The Wronskian is -------- x/6 6*e (7*x)/6 (7*x)/6 sin(x) {y=(7*e *arbconst(30) + 7*arbconst(29) - e *int(-------------,x) x/2 e *cos(x) (2*x)/3 e *sin(x) (2*x)/3 + int(-----------------,x))/(7*e )} cos(x) end; Time for test: 510 ms, plus GC time: 40 ms