[Date Index]
[Thread Index]
[Author Index]
Re: Changing variables within a differential equation
*To*: mathgroup at smc.vnet.net
*Subject*: [mg105223] Re: Changing variables within a differential equation
*From*: schochet123 <schochet123 at gmail.com>
*Date*: Wed, 25 Nov 2009 02:30:10 -0500 (EST)
*References*: <hdttaa$h4h$1@smc.vnet.net>
On Nov 17, 12:18 pm, riccardo benini <riccardo.ben... at gmail.com>
wrote:
> given a (partial) differential equation F(y''[x], y'[x], y[x], x)==0 (where
> y and x may be though as multidimensional),
> how can I correctly set up achangeofvariablesy -> y[g], x -> x[t],
> and get an equation in g[t]: F2(g''[t], g'[t], g[t], t)==0?
The first step is to express first derivatives of new variables with
respect to old ones
in terms of first derivatives of old variables with respect to new
ones. To do this define
dsub[oldvars_List,
newvars_List] := (dsub[oldvars, newvars] =
With[{newofold = Through[newvars[Sequence @@ oldvars]],
oldofnew = Through[oldvars[Sequence @@ newvars]]},
First[Solve[
Flatten[Table[
0 == D[(newofold /. Thread[oldvars -> oldofnew]) - newvars,
var], {var, newvars}] /. Thread[oldofnew -> oldvars]],
Flatten[Table[D[newofold, var], {var, oldvars}]]]]]) /;
Length[newvars] == Length[oldvars]
The second step is to express the first derivative of an arbitrary
function with respect to an old variable
in terms of derivatives with respect to new variables, which can be
done by
transD[f_, oldvars_List, newvars_List, oldvar_] :=
With[{newofold = Through[newvars[Sequence @@ oldvars]],
tmpvars = Table[Unique[], {Length[oldvars]}]},
D[f /. Thread[oldvars -> tmpvars] /. Thread[newvars -> newofold],
oldvar] /. Thread[tmpvars -> oldvars] /.
Thread[newofold -> newvars] /. dsub[oldvars, newvars]] /;
Length[oldvars] == Length[newvars]
Now define your partial differential equation using transD. For
example, the Laplacian is
laplacian[f_, oldvars_, newvars_] :=
Plus @@ Table[
transD[transD[f, oldvars, newvars, var], oldvars, newvars,
var], {var, oldvars}]
To check, calculate
Expand[FullSimplify[
laplacian[
f[r, theta, phi], {x, y, z}, {r, theta,
phi}] /. {x -> (#1 Cos[#2] Sin[#3] &),
y -> (#1 Sin[#2] Sin[#3] &), z -> (#1 Cos[#3] &)}]]
and compare to the known formula for the Laplacian in spherical
coordinates, which may be found at
http://mathworld.wolfram.com/SphericalCoordinates.html
Steve
Prev by Date:
**Re: Bug associated with Graphics3D???**
Next by Date:
**Re: Delay Differential Equations**
Previous by thread:
**Re: Changing variables within a differential equation**
Next by thread:
**Sound Functions Crash Kernel**
| |