Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

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?