> I wonder why this is not implemented for series
It seems the idea (as stated on GSoC page
<https://github.com/sympy/sympy/wiki/GSoC-2018-Ideas#series-expansions>)
was to replace series with rs_series after rs_series is expanded to handle
all functions. There was not much recent progress on that. Like with
assumptions or solveset, complete replacement is hard. One can make gradual
process by making series call rs_series first, and if NotImplementedError
is raised, proceed with the usual series expansion. In this case, I think
that the logic in your rseries function could be a part of rs_series
function. Or the existing logic of rs_series function could be improved to
handle quotients of two functions where each can be handled by rs_series
already. I was surprised that rs_series could not handle a rational
function directly, it looks like the primary use case for ring-based series
manipulations.
On Saturday, February 17, 2018 at 12:36:10 PM UTC-5, Chris Smith wrote:
>
> 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 [email protected].
To post to this group, send email to [email protected].
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/eaacf585-5d2b-40c7-8e9f-61eb486bbc41%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.