Hi, On 27 May 2011 06:31, Aaron S. Meurer <asmeu...@gmail.com> wrote:
> Well, it still fails there with the subs. Like I said, it's a bug. Can > you open an issue for it? > It's not necessarily a bug, because you expect subs() (sympy) and findroot() (mpmath) to work together, but you are skipping the glue (core/evalf.py or wherever this is). I'm not sure how exactly evalf code in SymPy works, but I think that manipulation of mp.dps (or .prec) doesn't affect evalf (the reason to think this way is that each instance of mpf can have its own dps/prec setting). Poly.eval (also nroots()) work because it uses mpf directly, skipping the glue. > > Aaron Meurer > > On May 26, 2011, at 9:09 PM, Matthew Emmett wrote: > > > Thanks for the quick reply Aaron. I will get the latest git version > > and run with it. BTW, I was running the sample on 0.6.7. > > > > Thanks again, > > Matt > > > > On Thu, May 26, 2011 at 08:28:51PM -0600, Aaron S. Meurer wrote: > >> 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 sympy@googlegroups.com. > >>> To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > >>> 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 sympy@googlegroups.com. > >> To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > >> 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 sympy@googlegroups.com. > > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > > 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 sympy@googlegroups.com. > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > Mateusz -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.