Here is some background on this problem
https://www.johndcook.com/blog/2014/07/09/making-change/.

Aaron Meurer

On Sun, Feb 18, 2018 at 5:00 PM, Chris Smith <[email protected]> wrote:
> So even though rs_series can produce the answer quickly, is this still the
> best way to do this? Following the wiki I was able to cobble together a
> recurrence relationship generator but the problem posed here at the outset
> would be "cruel and unusual" for a homework problem, wouldn't it? :-) By
> that I mean that the recurrence relationship has many relationships that
> need to be solved before even generating the coefficient of such a high
> ordered term. But the expression factors nicely and perhaps the individual
> recurrence relationships can be found fairly easily and then combined to
> find the answer.
>
> factored expression:
>
> ```
> (t - 1)**6*
> (t + 1)**3*
> (t**2 + 1)*
> (t**4 - t**3 + t**2 - t + 1)**3*
> (t**4+ t**3 + t**2 + t + 1)**5*
> (t**8 - t**6 + t**4 - t**2 + 1)*
> (t**20 - t**15 + t**10 - t**5 + 1)**2*
> (t**20 + t**15 + t**10 + t**5 + 1)**3*
> (t**40 - t**30 + t**20 - t**10 + 1)
> ```
>
> On Saturday, February 17, 2018 at 12:22:54 PM UTC-6, Leonid Kovalev wrote:
>>
>> > I wonder why this is not implemented for series
>>
>> It seems the idea (as stated on GSoC page) 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/321d8bc0-2978-4135-8167-f9d16e1c4ab5%40googlegroups.com.
>
> For more options, visit https://groups.google.com/d/optout.

-- 
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/CAKgW%3D6Jbec2SvsW6kGLA8n75fshS0g_i10i5AbVfFoqB8zvZ-Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to