Lambdify definitely helps evaluate things numerically. For example:

In [1]: import sympy as sp
In [2]: x = sp.var('x')
In [3]: func = sp.lambdify(x, x/sp.sin(x))

In [4]: func(1)
Out[4]: 1.1883951057781212

In [5]: func(0.01)
Out[5]: 1.0000166668611132

However, the problem with x=0 still exists:

In [6]: func(0)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call
last)

C:\Documents and Settings\wflynn\My Documents\Python\<ipython console>
in <module>()

C:\Documents and Settings\wflynn\My Documents\Python\<string> in
<lambda>(x)

ZeroDivisionError: float division

I am not sure if this helps but I thought I would at least show an
example of lambdify since I use it a lot.

Bill

On Jun 2, 2:19 pm, "Aaron S. Meurer" <[email protected]> wrote:
> On Jun 2, 2010, at 12:02 PM, Scott wrote:
>
> > Aaron
>
> > Thanks for the tips.
>
> > Where are the "issues" located?
>
> http://code.google.com/p/sympy/issues/
>
>
>
> > I am numerically evaluating x*cos(x)/sin(x) on [-pi/2,pi/2] and the
> > spurious singularity at x= 0 is giving me grief. x/sin(x)=1 at x=0.
>
> > After looking at my problem it seems that I should have asked if there
> > is and efficient way to embed sin(x)/x or x/sin(x) in a function that
> > is evaluated at 0. I will probably use a 7th order Taylor series
> > unless there another clever option.
>
> You can look at lambdify.  I don't know much about it, not being much of a 
> numerical person, but it always seems to be the answer in these situations.  
> Maybe someone else can be more concrete.
>
> Aaron Meurer
>
>
>
>
>
> > The series for x/sin(x) has much better convergence than the series
> > for x*cot(x) in my range of interest (+- pi/2).
>
> > In [41]: (x/sin(x)).series(x, 0, 8)
> > Out[41]: 1 + x**2/6 + 7*x**4/360 + 31*x**6/15120 + O(x**7)
>
> > On Jun 2, 12:41 pm, "Aaron S. Meurer" <[email protected]> wrote:
> >> On Jun 2, 2010, at 9:12 AM, Scott wrote:
>
> >>> What is the best way to evaluate x * cot(x) evaluated for x=0-pi/2
> >>> with sympy?
>
> >> I am not too sure what you mean by 0-pi/2, but you could try limit():
>
> >> In [3]: limit(x*cot(x), x, 0)
> >> Out[3]: 1
>
> >> In [4]: limit(x*cot(x), x, pi/2)
> >> Out[4]: 0
>
> >>> Is there a  better option than coding the Taylor series approximation?
>
> >> You wouldn't need to code the taylor series, it already is implemented:
>
> >> In [7]: print (x*cot(x)).series(x)
> >> 1 - x**2/3 - x**4/45 - 2*x**6/945 + O(x**7)
>
> >>> Also with the sympy that shipped  with Ubuntu 10.04 sympy.cot(0) is 0
> >>> rather than infinity.
>
> >> This is a bug that still exists in master.  Could you report it in the 
> >> issues?
>
> >> Aaron Meurer
>
> >>> V/R
>
> >>> Scott
>
> >>> --
> >>> 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 
> >>> athttp://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 
> > athttp://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