So for a rational function one could do this to get the series 
approximation?

def rseries(p, x, o):
    """Return truncated series of univariate rational p in
    variables x up to order o about the point x = 0.
    """
    n, d = p.as_numer_denom()
    if not all(i.is_polynomial() for i in (n, d)):
        return
    R, r = ring(x.name, QQ)
    def rp(p):
        rv = 0
        for a in Add.make_args(p.expand()):
            c, b = a.as_coeff_Mul()
            if b == 1:
                e = 0
            else:
                e = b.as_base_exp()[1]
            rv += c*r**e
        return rv
    n, d = map(rp, (n, d))
    return rs_mul(n, rs_series_inversion(d, r, o), r, o)

>>> x = var('x')
>>> rseries(x/(1-x+x**2+3*x**10),x,12)
-4*x**11 - x**10 + x**8 + x**7 - x**5 - x**4 + x**2 + x
>>> _.as_expr().coeff(x**11)
-4

Given that this is so much faster, I wonder why this is not implemented for 
series.Perhaps that is
part of the work that can yet be done on series: using input type to tailor 
that method used
to give the output.

BTW, this runs for Anane's expression without timing out on live.sympy.org.

/c

On Friday, February 16, 2018 at 10:51:29 PM UTC-6, Leonid Kovalev wrote:
>
> There are much more efficient tools in sympy/polys/ring_series.py that 
> could in principle replace series but are more limited in the expressions 
> they support.
> For example, this function is the reciprocal of a polynomial. Introducing 
> this polynomial (called g) and calling rs_series_inversion yields the 
> answer at once (683772*t**783): 
>  
> from sympy import *
> from sympy.polys.ring_series import rs_series_inversion
> R, t = ring('t', QQ)
> g = (1-t) * (1-t**5) * (1-t**10) * (1-t**25) * (1-t**50) * (1-t**100)
> rs_series_inversion(g, t, 784) 
>
> Well, it took a bit of time, measured with timeit at 654ms. But that's 
> nothing compared to series which took 28.8 seconds. 
>
> To get the specific coefficient, one can use
>
> rs_series_inversion(g, t, 784).coeff(t**783)
>
>
>
> On Friday, February 16, 2018 at 8:50:46 PM UTC-5, Chris Smith wrote:
>>
>> Just out of curiosity, do we have anything to generate the coefficients 
>> of terms of a rational function's Taylors series? I read the wiki (
>> https://en.wikipedia.org/wiki/Rational_function) on the "method of 
>> generating functions" but that seems to be pretty significant computation 
>> for this particular problem. I was able to compute the term with the series 
>> (as Belkiss indicated) but is there a better way?
>>
>> On Monday, February 12, 2018 at 2:09:05 AM UTC-6, Kalevi Suominen wrote:
>>>
>>>
>>>
>>> On Monday, February 12, 2018 at 9:56:16 AM UTC+2, Belkiss Anane wrote:
>>>>
>>>> Hello! I have SymPy on my computer but it crashed and I'm using  
>>>> someone else's to do some math problems. Unfortunately, the online SymPy 
>>>> times out really fast. Can someone run these commands for me please?
>>>>
>>>> from sympy import *
>>>> t = Symbol('t')
>>>> f = 1 / ((1-t) * (1-t**5) * (1-t**10) * (1-t**25) * (1-t**50) * (1-t**100))
>>>> f.series(t,0,784)
>>>>
>>>>
>>>> I am just looking for the coefficient of t**783!
>>>>
>>>>
>>>> Thank you very much, you'll be saving my night! 
>>>>
>>>>
>>> I get  683772⋅t^783, but I have not checked that for correctness.
>>>
>>> Kalevi Suominen   
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/c85f092d-4ff3-467c-996b-4fec20b6b4aa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to