|
[Date Index]
[Thread Index]
[Author Index]
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 [
Prev by Date:
x-ArcSin[Sin[x]]
Next by Date:
how to graphically fill the tails of a normal distribution
Previous by thread:
Problem with order of evaluation
Next by thread:
Executing commands with shortcuts?
|