On Sat, Jun 30, 2012 at 7:48 PM, Aaron Meurer <[email protected]> wrote:
> On Jun 30, 2012, at 8:38 PM, "[email protected]"
> <[email protected]> wrote:
>
>> Two reasons basically:
>>
>> - the original lambdify has a very convoluted logic and seems hard to
>> maintain (the new one is not that great either, however it does not
>> break as easily) (in the commit history one can see how stuff
>> completely unrelated to the functionality of lambdify was bolted on
>> it)
>>
>> - there were serious differences between what the docstring says and
>> what lambdify does in many corner cases
>>
>> I have discussed a lot why I dislike the original lambdify back in
>> November when I was writing the plotting module. I can bring these
>> discussions back if there is interest. I have also documented this in
>> details at the beginning of the source file for the new lambdify. It
>> would be nice to merge them together, but there is too much cruft in
>> the old lambdify so this will be difficult (even useless, I would
>> prefer simply removing both lambdify functions and relying on good
>> code in sympy for performance, not on some strange combination of
>> libraries and eval(str) operations)
>
> +1 to this.  Each function should know how to numerically evaluate
> itself using numpy or stdlib math (or whatever), and you should be
> able to just do it directly, like expr.evalf(library=numpy) or
> something like that.  I don't see any reason why that wouldn't work.
> eval'ing strings feels like a hack, but actually imo anything that
> works by rebuilding the expression tree in some what or another is
> inefficient because we already have the expression tree.

The idea is quite simple. In SymPy, sin(x)+cos(x) is equivalent to
Add(sin(x), cos(x)) and so if you need to evaluate it at x=5, you
need to run a couple function calls, recursively, and finally
you just call math.sin or math.cos from the Python's math module.

Using Python's math module directly, sin(x)+cos(x) is just
two function calls and a "+" on two floats. So it is much faster.

How can this be done without lambdify()?

------------------

Stefan, yes, I read the module introduction, but it was not clear to me at all
what the difference is. The description sounds like a temporary hack.
But from what you are saying, it seems to me it's a better implementation
of lambdify(). I agree with you that the best would be to simply rely on sympy
directly, but I don't know how to do that.

Ondrej

-- 
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