MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

Change of variable in ODE's

  • To: mathgroup at
  • Subject: [mg585] Change of variable in ODE's
  • From: Jack Goldberg <Jack.Goldberg at>
  • Date: Tue, 21 Mar 1995 11:08:08 -0500 (EST)

Hi MathGroup!
	Thanks to all of you who were so thoughtful in helping me 
understand  Function[x,Function[x,body]].  I hope I am not pushing 
my luck by posing yet another problem.
	Changes of variable in linear ODE's are used to convert an ODE 
into one of many normal or canonical forms.  I thought it would be a 
simple task to get Mma to do the job for me.  Well, yes and no.
Consider the following two Mma versions of a particular
Cauchy-Euler operator: 

(1) 	g = x^2 D[y[x],{x,2}] + 4 x D[y[x],x] + 2 y[x]

and the more "natural" form

(2)	h = x^2 y''[x] + 4 x y'[x] + 2 y[x]

The change of dependent variable  y[x] = u[x]/x^2  (when appropriately
effected) reduces (1) or (2) to the normal form  u''[x].  The change of 
independent variable  x = Log[t] reduces (1) or (2) to a constant 
coefficient 2nd order ODE.  The catch is "appropriately effected".
The following works for  g. 

In:  	Hold[g]/.y[x_]->u[x]/x^2//ReleaseHold


In:	Hold[g]/.y[x_]->y[Log[x]]//ReleaseHold

It does not work for (2).  After much labor I found an extremely 
awkward solution.  Briefly:

In:	h/.Derivative[n_][y_][x]->Derivative[n][u[#]/#^2&][x]


In:	h/.Derivative[n_][y_][x]->Derivative[n][y[Log[#]]&]][x]

Actually, these don't quite work.  These rules do not transform y[x] 
so a separate rule must be appended to change y[x] to u[x]/x^2  and 
y[x] to y[Log[x]].  I am particularly unhappy with this solution for 
these reasons: (1) They are awkward in the extreme. (2) They require 
the user to know the FullForm of  y'  and understand pure functions.
Although I can't say that the method used on  g  is the best possible,
it is easily understood by a student with a rudimentary knowledge of Mma.
This is surely not the case with the rules used for  h.  

Q1:  	Is there a way to effect the changes on h which requires less
	skill with Mma? 
Q2:	Are there alternative ways to handle g?

One last thought.  I suppose one could write a package which contains
the functions  ChangeDependentVariable  and  ChangeIndependentVariable
which would have the differential operator and the change of variable 
as arguments.  Then all would be hidden from the user who would only 
need to call either of these commands.

Q3:	Is this the way to go?	



  • Prev by Date: Re(best answer)
  • Next by Date: Re: passing options to a new graphics function
  • Previous by thread: Re: Re(best answer)
  • Next by thread: Re: Change of variable in ODE's