       Re: Rule replacement doesn't work after NDSolve?

• To: mathgroup at smc.vnet.net
• Subject: [mg124007] Re: Rule replacement doesn't work after NDSolve?
• From: DrMajorBob <btreat1 at austin.rr.com>
• Date: Thu, 5 Jan 2012 05:57:07 -0500 (EST)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201201041003.FAA03397@smc.vnet.net>

```There's nothing mysterious going on.

For instance,

sol2 = NDSolve[{y'[t] == 1/x[t]^2, x'[t] == 1/y[t], x == 1,
y == 1}, {x, y}, {t, 0, 1}]
{x[0.5], y[0.5]}
% /. sol2

{{x->InterpolatingFunction[{{0.,1.}},<>],y->InterpolatingFunction[{{0.,1.}},<>]}}
(* sol2 *)

{x[0.5], y[0.5]} (* x and y are unknown *)

{{1.42211, 1.34557}} (* sol2's left hand sides -- x and y -- are present
in {x[0.5], y[0.5]}, so Replace can replace them *)

In your original code, what did NOT work came about when this was 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]}

and you entered

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

The left hand sides of rules in sol are NOT THERE in those statements, so
Replace doesn't do anything.

In the plots, you used y[z, t] /. sol, Subscript[x, 1][z, t] /. sol, and
Subscript[x, 2][z, t] /. sol.

You used the left hand sides of rules in "sol", and Replace replaced them

A more general rule could be used, for instance

sol = {Subscript[x, 1][z_, t_] -> one[t, z],
Subscript[x, 2][z_, t_] -> two[t, z], y[z_, t_] -> three[t, z]};
Subscript[x, 1][0.1, 3] /. sol
Subscript[x, 2][0.1, 1] /. sol
y[0.5, 1] /. sol

one[3, 0.1]

two[1, 0.1]

three[1, 0.5]

But that's not the kind of solutions given by the solvers, and Replace
can't replace what isn't there.

Bobby

On Wed, 04 Jan 2012 04:03:29 -0600, gac <g.crlsn at gmail.com> wrote:

> Thanks very much for the reply.  Your suggestion works as you say, but
> I'm still confused.  I thought that the replacement is for the function,
> not the arguments.
>
>> rules must be applied before the arguments are set
>> (as is done in the
>> plots).
>>
>
> Why, then, does this work?
>
> sol2 = NDSolve[{y'[t] == 1/x[t]^2, x'[t] == 1/y[t], x == 1, y ==
> 1}, {x, y}, {t, 0, 1}]
> y[0.5] /. sol2
> x[0.5] /. sol2
>
> One difference I see is that the output in the PDE case has the
> arguments z,t on the lhs:
>
> {Subscript[x,
> 1][z,t]->InterpolatingFunction[{{0.,20.},{0.,10.}},<>][t,z],...
>
> But the output in the ODE case does not have the argument on the lhs:
>
> {x->InterpolatingFunction[{{0.,1.}},<>],...
>
> And, if it's a matter of the order of operations, why does this
> statement also work for the ODE case:
>
> y[t] /. sol2 /. {t -> 0.5}
>
> There's an important difference between the way NDSolve returns in the
> PDE case and in the ODE case.  I'd like to better understand the
> difference.
>
> Thanks again for the solution.
>
> Regards.
>

--
DrMajorBob at yahoo.com

```

• Prev by Date: Extension to BinLists Function
• Next by Date: Re: Why does the Front End freeze when using a TCPIP-mode connection with the kernel?
• Previous by thread: Re: Rule replacement doesn't work after NDSolve?
• Next by thread: Re: Rule replacement doesn't work after NDSolve?