Re: Problem with order of evaluation

*To*: mathgroup at smc.vnet.net*Subject*: [mg50004] Re: Problem with order of evaluation*From*: "Peter Pein" <petsie at arcor.de>*Date*: Wed, 11 Aug 2004 05:52:58 -0400 (EDT)*References*: <cf223r$7pc$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

"Max Ulbrich" <ulbrich at biochem.mpg.de> schrieb im Newsbeitrag news:cf223r$7pc$1 at smc.vnet.net... > Hi, > > I want to find a minimum in dependence of an initial > condition of a differential eqaution. I can define a > function f[y]: > > L=3.*^-9; > g[y_]=NDSolve[{p''[x]==-1.*^9(43418E^(-38p[x])-43418E^(38p[x])),p[0]==-0.13, p'[0]==y},p[x],{x,0,L}] > f[y_]:=((p[x]/.g[y]/.x->L)[[1]])^2 > > which evaluates properly: > > f[0.22*^8] > > However, Mathematica doesn't evaluate it properly when I try > NMimimize, FindRoot or whatever: > > <<NumericalMath`NMinimize` > NMinimize[f[y],{y,0.1*^8,0.3*^8}] > > > How do I have to define f[y] that this works? > Thanks a lot, > > Max > Hi Max, try: L = 3.*^-9; g[y_] := Block[{x}, (*make x local to g*) NDSolve[{p''[x] == 86836*^9Sinh[38p[x]], p[0] == -0.13, p'[0] == y}, p, {x, 0, L}]]; and evaluate f only for numeric arguments: f[y_?NumericQ] := First[p[L] /. g[y]]^2; f[0.22*^8] 0.00619955 and for example: FindRoot[f[x] == .01, {x, 1.*^7, 2.*^7}] {x -> 1.59037*^7} will work fine. Peter -- Peter Pein, Berlin to write to me, start the subject with [