MathGroup Archive 2012

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

Search the Archive

Re: Rule replacement doesn't work after NDSolve?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123978] Re: Rule replacement doesn't work after NDSolve?
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Tue, 3 Jan 2012 05:29:26 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201201020748.CAA09253@smc.vnet.net>
  • Reply-to: drmajorbob at yahoo.com

sol involves replacing z and t:

sol

{Subscript[x,  
1][z,t]->InterpolatingFunction[{{0.,20.},{0.,10.}},<>][t,z],Subscript[x,  
2][z,t]->InterpolatingFunction[{{0.,20.},{0.,10.}},<>][t,z],y[z,t]->InterpolatingFunction[{{0.,20.},{0.,10.}},<>][t,z]}

The Plot arguments are Subscript[x, 1][z, t] /. sol and Subscript[x, 2][z,  
t] /. sol, as they should be, with z and t available for replacement.

But your "three rule replacement steps after NDSolve" don't have z or t:

Subscript[x, 1][0.1, 3] /. sol
Subscript[x, 2][0.1, 1] /. sol
y[0.5, 1] /. sol

so they don't do what you intend.

You could do this instead:

Subscript[x, 1][z, t] /. sol /. {z -> 0.1, t -> 3}
Subscript[x, 2][z, t] /. sol /. {z -> 0.1, t -> 3}
y[z, t] /. sol /. {z -> 0.5, t -> 1}

0.587097

0.951482

1.22233*10^-8

All becomes far simpler if you define solution functions rather than using  
replacement every time.

I eliminate Subscript, fancy PartialD, and fancy Sum as well (they're a  
needless bother), but use them if you think you MUST.

Clear[x, y, z, t]
n = 2;
tf = 20;
functions = Flatten@{Array[x, {2}], y}
eqnsx = Table[{D[x[i][z, t], t] ==
      y[z, t] Sum[(i - j) x[i][z, t], {j, n}],
         x[i][z, 0] == Sin[2 i Pi z]}, {i, n}];
eqnsy = Table[{D[y[z, t], t] == - y[z, t] +
             Exp[-(t - tf/4)^2], y[z, 0] == 0}, {j, 1, 1}];
eqns = Flatten@{eqnsx, eqnsy};
  {x[1], x[2], y} =
   functions /.
    NDSolve[eqns, vars, {t, 0, tf}, {z, 0, 10},
      DependentVariables -> vars, MaxStepSize -> 0.01,
      MaxSteps -> 10^5, Method -> "ExplicitRungeKutta"][[1]];
x[1][0.1, 3]
x[2][0.1, 1]
y[0.5, 1]

{x[1], x[2], y}

0.58736

0.951057

1.22233*10^-8

Grid[{{Plot3D[y[z, t] /. sol, {t, 0, tf}, {z, 0, 1},
     PlotLabel -> HoldForm[y[z, t]], AxesLabel -> {t, z},
     PlotRange -> All, ImageSize -> 400],
    Plot3D[x[1][z, t] /. sol, {t, 0, tf}, {z, 0, 1},
     PlotLabel -> Subscript[x, 1][z, t], AxesLabel -> {t, z},
     PlotRange -> All, ImageSize -> 400]},
   {Plot3D[x[2][z, t] /. sol, {t, 0, tf}, {z, 0, 1},
     PlotLabel -> Subscript[x, 2][z, t], AxesLabel -> {t, z},
     PlotRange -> All, ImageSize -> 400], Null}}]

I left subscripts in the Plot, but in the real world I probably wouldn't.

Bobby

On Mon, 02 Jan 2012 01:48:20 -0600, gac <g.crlsn at gmail.com> wrote:

> Can anyone explain why the three rule replacement steps after NDSolve  
> don't work, but the three Plot3D commands do?  Thanks.
>
> n = 2;
> tf = 20;
> varsx = Table[Subscript[x, i][z, t], {i, n}];
> varsy = Table[y[z, t], {i, 1, 1}];
>
> eqnsx = Table[{\!\(
> \*SubscriptBox[\(\[PartialD]\), \(t\)]\(
> \(\*SubscriptBox[\(x\), \(i\)]\)[z, t]\)\) ==  y[z, t] \!\(
> \*UnderoverscriptBox[\(\[Sum]\), \(j = 1\), \(n\)]\(\((i - j)\)\
> \(\*SubscriptBox[\(x\), \(j\)]\)[z, t]\)\),
>     Subscript[x, i][z, 0] == Sin[2 i Pi z]}, {i, n}];
>
> eqnsy = Table[{\!\(
> \*SubscriptBox[\(\[PartialD]\), \(t\)]\(y[z, t]\)\) == - y[z, t] +
>       Exp[-(t - tf/4)^2], y[z, 0] == 0}, {j, 1, 1}];
>
> vars = Join[varsx, varsy];
> eqns = Join[eqnsx, eqnsy];
>
> sol = NDSolve[eqns, vars, {t, 0, tf}, {z, 0, 10}, DependentVariables ->  
> vars, MaxStepSize -> 0.01, MaxSteps -> 10^5, Method ->  
> "ExplicitRungeKutta"][[1]]
>
> Subscript[x, 1][0.1, 3] /. sol
> Subscript[x, 2][0.1, 1] /. sol
> y[0.5, 1] /. sol
>
> Grid[{{Plot3D[y[z, t] /. sol, {t, 0, tf}, {z, 0, 1}, PlotLabel ->  
> "y[z,t]", AxesLabel -> {"t", "z"}, PlotRange -> All, ImageSize -> 400],
> Plot3D[Subscript[x, 1][z, t] /. sol, {t, 0, tf}, {z, 0, 1}, PlotLabel ->  
> "\!\(\*SubscriptBox[\(x\), \(1\)]\)[z,t]]", AxesLabel -> {"t", "z"},  
> PlotRange -> All, ImageSize -> 400]},
> {Plot3D[Subscript[x, 2][z, t] /. sol, {t, 0, tf}, {z, 0, 1}, PlotLabel  
> -> "\!\(\*SubscriptBox[\(x\), \(2\)]\)[z,t]", AxesLabel -> {"t", "z"},  
> PlotRange -> All, ImageSize -> 400],}}]
>


-- 
DrMajorBob at yahoo.com



  • Prev by Date: Re: Rule replacement doesn't work after NDSolve?
  • Next by Date: Re: how turn off camera after using CurrentImage?
  • Previous by thread: Re: Rule replacement doesn't work after NDSolve?
  • Next by thread: Re: Rule replacement doesn't work after NDSolve?