REDUCE Development Version, Wed Sep 13 20:40:41 2000 ...







ODESolve 1.065

% Miscellaneous ODESolve 1+ tests

% Check for a problem in 1.03, spotted by David Hartley
% <DHartley@physics.adelaide.edu.au>, caused by the reval in
% `get_k_list' with caching enabled.  The following should all give
% the same result:

odesolve(df(u,x,x)=df(u,x));


*** Dependent var(s) assumed to be u 

*** Independent var assumed to be x 

*** depend u , x

    x
{u=e *arbconst(2) + arbconst(1)}

odesolve(df(u,x,2)=df(u,x));


*** Dependent var(s) assumed to be u 

*** Independent var assumed to be x 

    x
{u=e *arbconst(4) + arbconst(3)}

odesolve(df(u,x,x)=df(u,x), u, x);


    x
{u=e *arbconst(6) + arbconst(5)}



% Linear first-order ODE:
odesolve(df(y,t) = -w*y*tan(w*t - d));


*** Dependent var(s) assumed to be y 

*** Independent var assumed to be t 

*** depend y , t

{y=arbconst(7)*cos(d - t*w)}

% The solution, by inspection, is y = A cos(w t - d)


% Variation of parameters:
depend y, x;



ode := df(y,x,2) + y - csc(x)$


odesolve(ode, y, x);


{y=arbconst(9)*sin(x) + arbconst(8)*cos(x) - cos(x)*x + log(sin(x))*sin(x)}

sub(ws, ode);


       2                         2
 cos(x)  - csc(x)*sin(x) + sin(x)
-----------------------------------
              sin(x)

trigsimp ws;


0


ode := 2*df(y,x,2) + y - csc(x)$


odesolve(ode, y, x);


                           x                               x
{y=(2*arbconst(11)*sin(---------) + 2*arbconst(10)*cos(---------)
                        sqrt(2)                         sqrt(2)

                                           x
                                   sin(---------)
                       x                sqrt(2)
     - sqrt(2)*cos(---------)*int(----------------,x)
                    sqrt(2)            sin(x)

                            x
                    cos(---------)
                         sqrt(2)               x
     + sqrt(2)*int(----------------,x)*sin(---------))/2}
                        sin(x)              sqrt(2)

sub(ws, ode);


         x     2                           x     2
 cos(---------)  - csc(x)*sin(x) + sin(---------)
      sqrt(2)                           sqrt(2)
---------------------------------------------------
                      sin(x)

trigsimp ws;


0



% Bernoulli:
ode := df(y,x)*y*x^2 - y^2*x - x^3 + 1;


                2      3      2
ode := df(y,x)*x *y - x  - x*y  + 1

odesolve(ode, y, x, explicit);


                         3             3
    sqrt(3*arbconst(13)*x  + 6*log(x)*x  + 2)*plus_or_minus(tag_1)
{y=----------------------------------------------------------------}
                           sqrt(x)*sqrt(3)

sub(ws, ode);


0



% Implicit dependence:

% (NB: Wierd constants need to be mopped up by the arbconst
% simplification code!)

% These should all behave equivalently:
operator f, g;


depend {y, ff}, x, {gg}, y;



odesolve(df(y,x) = f(x), y, x);


{y=arbconst(14) + int(f(x),x)}

odesolve(df(y,x) = ff, y, x);


{y=arbconst(15) + int(ff,x)}

odesolve(df(y,x) = g(y), y, x);


                      1
{arbconst(16) + int(------,y) - x=0}
                     g(y)

odesolve(df(y,x) = gg, y, x);


                     1
{arbconst(17) + int(----,y) - x=0}
                     gg

odesolve(df(y,x) = f(x)*g(y), y, x);


                                         1
{arbconst(18)*f(0) - int(f(x),x) + int(------,y)=0}
                                        g(y)

odesolve(df(y,x) = ff*gg, y, x);


                         1
{arbconst(19)*ff! + int(----,y) - int(ff,x)=0}
                         gg

odesolve(df(y,x) = 1/f(x)*g(y), y, x);


                           1                    1
{arbconst(20) - f(0)*int(------,x) + f(0)*int(------,y)=0}
                          f(x)                 g(y)

odesolve(df(y,x) = 1/ff*gg, y, x);


                     1                 1
{arbconst(21) - int(----,x)*ff! + int(----,y)*ff!=0}
                     ff                gg

odesolve(df(y,x) = f(x)/g(y), y, x);


{arbconst(22)*f(0) - int(f(x),x) + int(g(y),y)=0}

odesolve(df(y,x) = ff/gg, y, x);


{arbconst(23)*ff! - int(ff,x) + int(gg,y)=0}


% These should all fail (they are too implicit):
depend {ff}, y, {gg}, x;



odesolve(df(y,x) = ff, y, x);


{df(y,x) - ff=0}

odesolve(df(y,x) = gg, y, x);


{df(y,x) - gg=0}

odesolve(df(y,x) = ff*gg, y, x);


{df(y,x) - ff*gg=0}

odesolve(df(y,x) = 1/ff*gg, y, x);


{df(y,x)*ff - gg=0}

odesolve(df(y,x) = ff/gg, y, x);


{df(y,x)*gg - ff=0}



% NONlinear ODEs:
odesolve(df(y,x) + y**(5/3)*arbconst(-1)=0);


*** Dependent var(s) assumed to be y 

*** Independent var assumed to be x 

    2/3                                2/3
{2*y   *arbconst(24)*arbconst(-1) - 2*y   *arbconst(-1)*x + 3=0}


% Do not re-evaluate the solution without turning the algint switch on!
odesolve(df(y,x,2) + c/(y^2 + k^2)^(3/2) = 0, y, x, algint);


{2*arbconst(26)*plus_or_minus(tag_2)*c + sqrt(k)*sqrt(c)*sqrt(2)*arbconst(25)*

                         2                 2         2    2             2    2
      sqrt(arbconst(25)*k  + arbconst(25)*y  - sqrt(k  + y )*k*y)*sqrt(k  + y )
 int(---------------------------------------------------------------------------
                                 2  2               2  2    2  2
                     arbconst(25) *k  + arbconst(25) *y  - k *y

     ,y)*k + sqrt(k)*sqrt(c)*sqrt(2)

                          2                 2         2    2
       sqrt(arbconst(25)*k  + arbconst(25)*y  - sqrt(k  + y )*k*y)*y      2
 *int(---------------------------------------------------------------,y)*k
                            2  2               2  2    2  2
                arbconst(25) *k  + arbconst(25) *y  - k *y

  - 2*plus_or_minus(tag_2)*c*x=0}


% Good test of ODESolve!-Alg!-Solve.  Takes forever with fullroots on,
% but with fullroots off ODESolve solves it.  (Slightly tidier with
% algint, but not necessary.  However, the explicit option misses the
% non-trivial solution that can fairly easily be found by hand!)
odesolve(df(y,x,3) = 6*df(y,x)*df(y,x,2)/y - 6*df(y,x)^3/(y^2), y, x, algint);


{sqrt(y)*arbconst(30)*arbconst(29)*arbconst(28)

  - sqrt(y)*arbconst(29)*arbconst(28)*x - 2*sqrt(arbconst(28) + y)=0,

 y=arbconst(31)}


% Hangs with algint option!
% off odesolve_plus_or_minus;
odesolve(a*tan(asin((df(y,x) - y)/(2*y))/2)^2 + a -
   2*sqrt(3)*tan(asin((df(y,x) - y)/(2*y))/2)*y + 4*sqrt(3)*y +
   tan(asin((df(y,x) - y)/(2*y))/2)^2*y -
   4*tan(asin((df(y,x) - y)/(2*y))/2)*y + 7*y, y, x);


     x
{ - e *arbconst(32) - sqrt( - 4*sqrt(3)*y - a - 8*y) - sqrt(a)*sqrt(3)=0,

     x
  - e *arbconst(33) - sqrt( - 4*sqrt(3)*y - a - 8*y) + sqrt(a)*sqrt(3)=0}

% on odesolve_plus_or_minus;

% From: K Sudhakar <ks@maths.qmw.ac.uk>
odesolve(2*df(f,x,3)*df(f,x)*f^2*x^2 - 3*df(f,x,2)^2*x^2*f^2 +
   df(f,x)^4*x^2 - df(f,x)^2*f^2, f, x);


*** depend f , x

{arbconst(37)*arbconst(36)*arbconst(35)*log(f) + arbconst(37)*arbconst(36)

  - arbconst(36)*arbconst(35)*log(f)*log(x) - arbconst(36)*log(x) + log(f)=0,

 f=arbconst(38)}


% Related intermediate problem:
odesolve(2*df(y,x)*x*y + x^2 - 2*x*y - y^2, y, x, explicit);


             - (2*x)/(x - y_)               2      2              2
{y=root_of(e                 *arbconst(39)*e *x + x  - 2*x*y_ + y_ ,y_,tag_19)}



% Anharmonic oscillator problem (which apparently Maple V R5.1 solves
% in terms of a root of an expression involving unevaluated integrals
% but Maple 6 cannot!).

% General solution:
odesolve(M*L*df(phi(tt),tt,2) = -M*g*sin(phi(tt)));


*** phi declared operator 

*** Dependent var(s) assumed to be phi(tt) 

*** Independent var assumed to be tt 

{2*arbconst(41)*plus_or_minus(tag_20)*g + sqrt(l)*sqrt(g)*sqrt(2)

       sqrt(arbconst(40)*sin(1) + cos(phi(tt)))
 *int(------------------------------------------,phi(tt))
          arbconst(40)*sin(1) + cos(phi(tt))

  - 2*plus_or_minus(tag_20)*g*tt=0}


% Use of `t' as independent variable:
odesolve(M*L*df(phi(t),t,2) = -M*g*sin(phi(t)));


*** Dependent var(s) assumed to be phi(t) 

*** Independent var assumed to be t 

{2*arbconst(43)*plus_or_minus(tag_21)*g + sqrt(l)*sqrt(g)*sqrt(2)

       sqrt(arbconst(42)*sin(1) + cos(phi(t)))
 *int(-----------------------------------------,phi(t))
          arbconst(42)*sin(1) + cos(phi(t))

  - 2*plus_or_minus(tag_21)*g*t=0}


% Conditional (eigenvalue) solution:
%% odesolve(M*L*df(phi(t),t,2) = -M*g*sin(phi(t)),
%%    {t=0, phi(t)=0, df(phi(t),t)=Pi});
%%
%% Conditional solutions need more work!  This fails with
%% ***** 0 invalid as kernel

% Try setting
%% L:=1;  g:=10;  ws;

end;



Time for test: 24198 ms, plus GC time: 1520 ms

