Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

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: [mg123976] Re: Rule replacement doesn't work after NDSolve?
  • From: A Retey <awnl at gmx-topmail.de>
  • Date: Tue, 3 Jan 2012 05:28:44 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jdrnpb$93i$1@smc.vnet.net>

Hi,

> 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

That's the order of evaluation, the LHS of the rules in sol just don't 
match the expressions you try to replace. You need e.g.:

y[z, t] /. sol /. {z -> 0.5, t -> 1}

> 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],}}]

to avoid such problems, I usually find it much better to define the 
dependent variables in NDSolve without arguments, like here:

sol = NDSolve[eqns, Head /@ vars, {t, 0, tf}, {z, 0, 10},
    MaxStepSize -> 0.01, MaxSteps -> 10^5,
    Method -> "ExplicitRungeKutta"][[1]]

then the rest of your original code will work just fine. Is there a 
special reason why you use DependentVariables here? It seems to make no 
sense when you do return all of them anyway...

hth,

albert




  • Prev by Date: Re: problem calculating a square simplex IFS triangularization
  • Next by Date: Re: How can I rasterize the selection in a notebook, preserving In/Out labels when appropriate?
  • Previous by thread: Re: Rule replacement doesn't work after NDSolve?
  • Next by thread: Re: Rule replacement doesn't work after NDSolve?