[Date Index]
[Thread Index]
[Author Index]
Re: A NDSolve within a FindMinimum/NMinimize
*To*: mathgroup at smc.vnet.net
*Subject*: [mg90624] Re: [mg90588] A NDSolve within a FindMinimum/NMinimize
*From*: DrMajorBob <drmajorbob at att.net>
*Date*: Wed, 16 Jul 2008 06:30:39 -0400 (EDT)
*References*: <22736969.1216118933296.JavaMail.root@m08>
*Reply-to*: drmajorbob at longhorns.com
For instance,
f[a_?NumericQ] :=
ell[1] /.
First@NDSolve[{ell'[x] + a Sin[x] ell[x] == 0, ell[0] == a},
ell, {x, -1, 1}]
Table[{a, f[a]}, {a, -1, 1, 0.1}]
{{-1., -1.5836}, {-0.9, -1.3612}, {-0.8, -1.15559}, {-0.7, \
-0.965715}, {-0.6, -0.790565}, {-0.5, -0.629205}, {-0.4, -0.480748}, \
{-0.3, -0.344361}, {-0.2, -0.21926}, {-0.1, -0.104704}, {0.,
0.}, {0.1, 0.0955071}, {0.2, 0.182432}, {0.3, 0.261353}, {0.4,
0.332815}, {0.5, 0.397327}, {0.6, 0.45537}, {0.7, 0.507396}, {0.8,
0.553828}, {0.9, 0.595063}, {1., 0.631475}}
FindMinimum[{f@a, -1 < a < 1}, {a, 0}] // Timing
{0.062261, {-1.5836, {a -> -1.}}}
NMinimize[{f@a, -1 < a < 1}, {a}] // Timing
{3.08797, {-1.5836, {a -> -1.}}}
Some errors (in your code) resulted from using the same variable x for
both NDSolve and FindMinimum. I used x for NDSolve, but a for FindMinimum.
Others were caused by the fact that f[a] HAS no minimum without
constraints on a.
Plot[f@a, {a, -50, 50}]
Note thet FindMinimum was much faster than NMinimize, probably because
NMinimize uses more complicated methods for this problem. Speed can be
increased as follows:
g = FunctionInterpolation[f@a, {a, -1, 1}];
NMinimize[{g@a, -1 < a < 1}, {a}] // Timing
{0.129609, {-1.5836, {a -> -1.}}}
Bobby
On Tue, 15 Jul 2008 05:15:49 -0500, <philip.ingrey at googlemail.com> wrote:
> I'm trying to find the value of a coefficient that minimizes a
> function. Below is a simplified version of the problem:
> Using a Table to print out some results is fine:
>
> Table[{a, s = NDSolve[{El'[x] + a Sin[x] El[x] == 0, El[0] == a}, El,
> {x, -1, 1}]; ((El[1] /. s) a)[[1]]}, {a, -1, 1, 0.1}]
>
> But a NMinimize or FindMinimum gives errors:
>
> NMinimize[s = NDSolve[{El'[x] + a Sin[x] El[x] == 0, El[0] == a}, El,
> {x, -1, 1}]; (El[1] /. s) a, a]
>
> As it seams to try and evaluate the NDSolve then apply a value for a,
> is there a way to solve this?
>
> Thanks in advance,
> Phil I
>
>
--
DrMajorBob at longhorns.com
Prev by Date:
**Re: Another problem with FindMinimum**
Next by Date:
**Re: running multiple mathkernel's**
Previous by thread:
**Re: A NDSolve within a FindMinimum/NMinimize**
Next by thread:
**WorldPlot, WorldRotation... with a twist?**
| |