[SciPy-User] problem using optimize.root

Slavin, Jonathan jslavin at cfa.harvard.edu
Mon Jun 8 13:16:31 EDT 2015


Well, I still don't know what the problem was with using root the way I
did, but I found a way around this issue by using newton instead.  This
seems to work just fine.

Regards,
Jon

On Mon, Jun 8, 2015 at 12:16 PM, Slavin, Jonathan <jslavin at cfa.harvard.edu>
wrote:

> Hi,
>
> I'm trying to solve a two-point boundary value problem using odeint in
> conjunction with root.  I've written a function (the objective function)
> that takes as an argument the eigenvalue for the problem and returns the
> difference between the endpoint value for one of the variables and the
> desired value.  So the function calls odeint with extra arguments that give
> the initial conditions at the left boundary as well as the eigenvalue.  I
> can call this function perfectly well from the prompt and it behaves as
> expected but when I run it within the call to scipy.optimize.root I get the
> following error:
> ...
> /export/slavin/python/anaconda/lib/python2.7/site-packages/scipy/integrate/odepack.pyc
> in odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol,
> atol, tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords,
> printmessg)
>     146     output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv,
> ml, mu,
>     147                              full_output, rtol, atol, tcrit, h0,
> hmax, hmin,
> --> 148                              ixpr, mxstep, mxhnil, mxordn, mxords)
>     149     if output[-1] < 0:
>     150         print(_msgs[output[-1]])
>
> TypeError: Cannot cast array data from dtype('O') to dtype('float64')
> according to the rule 'safe'
> >
> /export/slavin/python/anaconda/lib/python2.7/site-packages/scipy/integrate/odepack.py(148)odeint()
>     147                              full_output, rtol, atol, tcrit, h0,
> hmax, hmin,
> --> 148                              ixpr, mxstep, mxhnil, mxordn, mxords)
>     149     if output[-1] < 0:
>
> So when root calls the function, which in turn calls odeint, something
> that was previously of float type somehow gets the dtype of object.  I've
> used pdb within ipython to try to find what is happening, but it seems that
> all the inputs to odeint are of the correct dtype.  Any help would be
> appreciated.
>
> Regards,
> Jon
>
> --
> ________________________________________________________
> Jonathan D. Slavin                 Harvard-Smithsonian CfA
> jslavin at cfa.harvard.edu       60 Garden Street, MS 83
> phone: (617) 496-7981       Cambridge, MA 02138-1516
> fax: (617) 496-7577            USA
> ________________________________________________________
>
>


-- 
________________________________________________________
Jonathan D. Slavin                 Harvard-Smithsonian CfA
jslavin at cfa.harvard.edu       60 Garden Street, MS 83
phone: (617) 496-7981       Cambridge, MA 02138-1516
fax: (617) 496-7577            USA
________________________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20150608/ccb07f7e/attachment.html>


More information about the SciPy-User mailing list