If I try this with mpmath 0.16 (the version we currently have in sympy in the 
latest git master), I get:

In [22]: print 'subs:  ', mpmath.findroot(lambda xi: p.subs(x, xi), 1.0)
subs:  
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/Users/aaronmeurer/Documents/python/sympy/sympy/<ipython console> in <module>()

/Users/aaronmeurer/Documents/python/sympy/sympy/sympy/mpmath/calculus/optimization.pyc
 in findroot(ctx, f, x0, solver, tol, verbose, verify, **kwargs)
    968                              '(%g > %g)\n'
    969                              'Try another starting point or tweak 
arguments.'
--> 970                              % (norm(f(*xl))**2, tol))
    971         return x
    972     finally:

ValueError: Could not find root within given tolerance. (6.67917e-33 > 
1.71057e-49)
Try another starting point or tweak arguments.

Another option for Poly is eval.  I get this:

In [37]: print 'eval:  ', mpmath.findroot(lambda xi: p.eval(x, xi), 1.0)
eval:   0.774596669241483377035853079956479922166584341

In [38]: print 'exact: ', mpmath.sqrt(mpmath.mpf('3.0')/mpmath.mpf('5.0'))
exact:  0.774596669241483377035853079956479922166584341

In [39]: print 'lambda:', mpmath.findroot(lambda x: 5.0*x**3/2.0 - 3.0*x/2.0, 
1.0)
lambda: 0.774596669241483377035853079956479922166584341

So I'd say there is some kind of bug with subs.

Aaron Meurer

On May 26, 2011, at 8:21 PM, Matthew Emmett wrote:

> Hi everyone,
> 
> I am having trouble combining mpmath's findroot function with sympy.
> Here is a short example of what I am trying to accomplish:
> 
> import sympy
> import mpmath
> 
> mpmath.mp.dps = 45
> 
> x = sympy.var('x')
> p = (5.0/2.0*x**3 - 3.0/2.0*x).as_poly()
> 
> print 'subs:  ', mpmath.findroot(lambda xi: p.subs(x, xi), 1.0)
> print 'lambda:', mpmath.findroot(lambda x: 5.0*x**3/2.0 - 3.0*x/2.0,
> 1.0)
> print 'exact: ', mpmath.sqrt(mpmath.mpf('3.0')/mpmath.mpf('5.0'))
> 
> 
> The output is:
> 
> subs:   0.77459666924148342341315597798728447146706553
> lambda: 0.774596669241483377035853079956479922166584341
> exact:  0.774596669241483377035853079956479922166584341
> 
> 
> That is, when using mpmath.findroot, substituting into a SymPy
> polynomial does not produce the same result as using a lambda form
> with a handwritten version of the polynomial.  Is there a way to the
> SymPy subs method to work as expected?
> 
> Thanks,
> Matt
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to