Re: NDSolve and NumericQ

*To*: mathgroup at smc.vnet.net*Subject*: [mg116335] Re: NDSolve and NumericQ*From*: DrMajorBob <btreat1 at austin.rr.com>*Date*: Fri, 11 Feb 2011 04:16:05 -0500 (EST)

Here's a start: aa[y_, s_] = Sin[y[s]] + y'[s]/s; Off[Solve::ifun] DSolve[{aa[y, s] == 0, y[0] == 1}, y, s] {{y -> Function[{s}, 2 ArcCot[E^(s^2/2) Cot[1/2]]]}} Bobby On Thu, 10 Feb 2011 04:24:34 -0600, Simon Pearce <Simon.Pearce at nottingham.ac.uk> wrote: > Hi Mathgroup, > > I have a differential equation in terms of y[S] which contains several > complicated piecewise functions inside the ODE. I currently then use > NDSolve in order to find a solution for y. This works, but takes about > 10 seconds to solve. > I'd like to speed this up, and I'm wondering if NDSolve is trying to > differentiate the piecewise function explicitly, as has been mentioned > before in the group > (http://forums.wolfram.com/mathgroup/archive/2008/Sep/msg00458.html). > The solution given there is to use ?NumericQ to prevent evaluation > without supplying the value, common enough (and an entirely separate > issue on the group - can't we have an option in FindRoot and related > functions so we can turn this off?). But I'm having trouble in doing > this and using NDSolve, the method I'm trying to use currently . > > So a test problem: > > AA[y_, S_?NumericQ] := Sin[y[S]] + y'[S]/S > NDSolve[{AA[y, S] == 0, y[0] == 1}, y, {S, 0, 1}] > > Giving the error "NDSolve::dvnoarg: The function y appears with no > arguments", as it tries to evaluate for a general S. It works if I take > the ?NumericQ out of the definition, but that isn't what I'm trying to > do. > > As an example of a function which doesn't work if we take the ?NumericQ > out of the definition: > > BB[y_, S_?NumericQ] := Sin[y[S]] + y'[S]/S + NIntegrate[(Sqrt[t] + > Sin[t]), {t, 0, S}] > NDSolve[{BB[y, S] == 0, y[0] == 1},y, {S, 0, 1}] > Same error again. > > CC[y_, S_] := Sin[y[S]] + y'[S]/S + NIntegrate[(Sqrt[t] + Sin[t]), {t, > 0, S}] > NDSolve[{CC[y, S] == 0, y[0] == 1},y, {S, 0, 1}] > This gives errors on the NIntegrate which suggest to me that NDSolve is > doing something to the equation before putting values in for S. The > result is correct, but isn't immediate. > > Anyone have any idea how to do this? > > Thanks, > Simon Pearce > University of Nottingham > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please send it back to me, and immediately delete > it. Please do not use, copy or disclose the information contained in > this message or in any attachment. Any views or opinions expressed by > the author of this email do not necessarily reflect the views of the > University of Nottingham. This message has been checked for viruses but > the contents of an attachment may still contain software viruses which > could damage your computer system: you are advised to perform your own > checks. Email communications with the University of Nottingham may be > monitored as permitted by UK legislation. > -- DrMajorBob at yahoo.com