Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

How to use FindMaximum with a parameter passed to NDSolve??

  • To: mathgroup at smc.vnet.net
  • Subject: [mg129133] How to use FindMaximum with a parameter passed to NDSolve??
  • From: JBB <barandiaran.juan at gmail.com>
  • Date: Mon, 17 Dec 2012 02:58:26 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

Hello,

This is probably a simple sintax question, but could somebody tell me how can I use the FindMaximum function when the variable used has to be used in an internal NDSolve??

A simplified version of some code to show the error is as follows:

pendulum[long_] :=
 First[fi /.
   NDSolve[{fi''[t] + 9.8 Cos[long] Sin[fi[t]] + .5 fi'[t] == 0,
     fi[0] == Pi/2, fi'[0] == 0}, fi, {t, 0, 50}]]

total[dynamics_, p_] := dynamics[3.1] + p

FindMaximum[{total[pendulum[long], long ] }, {long, 0.01}]

I get the following error:

In[146]:= FindMaximum[
 Evaluate[total[pendulum[long], long ] ], {long, 0.01}]

During evaluation of In[146]:= NDSolve::ndnum: Encountered non-numerical value for a derivative at t == 0.`. >>

During evaluation of In[146]:= ReplaceAll::reps: {NDSolve[{9.8 Cos[long] Sin[fi[<<1>>]]+0.5 (fi^\[Prime])[t]+(fi^\[Prime]\[Prime])[t]==0,fi[0]==\[Pi]/2,(fi^\[Prime])[0]==0},fi,{t,0,50}]} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing. >>

During evaluation of In[146]:= FindMaximum::nrnum: The function value -0.01-fi[3.1] is not a real number at {long} = {0.01}. >>

Out[146]= FindMaximum[long + fi[3.1], {long, 0.01}]

If I understand correctly, probably because the variable "long" has not been assigned a value by FindMaximum  before calling the internal NDSolve.

Is there a simple way of doing this?
In my real case the functions are longer but the essence of the problem is the same: I have to find the maximum of some function in which the variables are parameters of other functions including a NDSolve.

Thanks for any hint,

JBB


  • Prev by Date: Re: Do Plot
  • Next by Date: Re: Mathematica strange behaviour finding a cubic root
  • Previous by thread: Copy as LaTeX v9 vs v8
  • Next by thread: Re: How to use FindMaximum with a parameter passed to NDSolve??