Re: NDSolve

• To: mathgroup at smc.vnet.net
• Subject: [mg8591] Re: [mg8536] NDSolve
• From: David Withoff <withoff>
• Date: Sun, 7 Sep 1997 22:13:10 -0400
• Sender: owner-wri-mathgroup at wolfram.com

> I wonder why the following did not work.
>
> NDSolve[{q'[k]==If[k==kss,qprimess,kdotfun/qdotfun],q[kss]=qss},...
>                                    ***************
>                                    The trouble is here.
>
> kdotfun and qdotfun are both defined previously as functions of [k].
> The error message was like
>
>   ...does not evaluate at 34.5444 <-this is the value for kss ...
>
> When I just typed in the same function instead of using 'kdotfun/qdotfun',
> it worked. But I would rather not like to do it because the expression for
> it is sometimes quite complicated.

Probably the easiest way to get this to work is to use Evaluate
around the expression that is defined as a function of k, as in

In[1]:= kss = 1; qprimess = 1; kdotfun = k; qdotfun = 1; qss = 1;

General::spell1:
Possible spelling error: new symbol name "qdotfun"
is similar to existing symbol "kdotfun".

In[2]:= sol = NDSolve[{q'[k]==If[k==kss,qprimess,
Evaluate[kdotfun/qdotfun]],q[kss]==qss}, q, {k, 1, 2}]

Out[2]= {{q -> InterpolatingFunction[{{1., 2.}}, <>]}}

The NDSolve function does a limited form of variable localization,
which means among other things that the variable needs to appear
explicitly in the input to NDSolve.

> I have one more question.
> I Plot the InterpolatingFunction and want to mark a point of the line with
> * or else. Can I do this?

Yes, you can do this.  One method is to use a graphics primitive to
put a mark at the point that you want.  For example:

In[4]:= Show[g, Graphics[{PointSize[.02], Point[{1.6, q[1.6] /. sol[[1]]}]}]]

Out[4]= -Graphics-

Dave Withoff
Wolfram Research

• Prev by Date: Re: Sort[]
• Next by Date: Re: conics and graphics
• Previous by thread: Re: NDSolve
• Next by thread: Nesting in patterns