Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
result over QQ if skip-parameter given
Browse files Browse the repository at this point in the history
  • Loading branch information
dkrenn committed Nov 5, 2015
1 parent f468de6 commit 4a27e66
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions src/sage/rings/asymptotic/asymptotic_expansion_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,9 @@ def Binomial_kn_over_n(var, k, precision=None, skip_constant_factor=False,
- ``skip_constant_factor`` -- (default: ``False``) a
boolean. If set, then the constant summand is left out.
As a consequence, the coefficient ring of the output changes
from ``Symbolic Constants Subring`` (if ``False``) to
``Rational Field`` (if ``True``).
- ``algorithm`` -- either ``'direct'`` or ``'log'`` (default).
Expand Down Expand Up @@ -292,8 +295,29 @@ def Binomial_kn_over_n(var, k, precision=None, skip_constant_factor=False,
- 2*log(2))*n^(-5/2)
+ O((e^n)^(3*log(3) - 2*log(2))*n^(-7/2))
::
sage: asymptotic_expansions.Binomial_kn_over_n('n', k=7/5, precision=5)
1/2*sqrt(7)/sqrt(pi)*(e^n)^(7/5*log(7/5) - 2/5*log(2/5))*n^(-1/2)
- 13/112*sqrt(7)/sqrt(pi)*(e^n)^(7/5*log(7/5) - 2/5*log(2/5))*n^(-3/2)
+ 169/12544*sqrt(7)/sqrt(pi)*(e^n)^(7/5*log(7/5) - 2/5*log(2/5))*n^(-5/2)
+ O((e^n)^(7/5*log(7/5) - 2/5*log(2/5))*n^(-7/2))
TESTS::
sage: asymptotic_expansions.Binomial_kn_over_n(
....: 'n', k=5, precision=5, skip_constant_factor=True)
1/2*(e^n)^(5*log(5)
- 4*log(4))*n^(-1/2)
- 7/160*(e^n)^(5*log(5) - 4*log(4))*n^(-3/2)
+ 49/25600*(e^n)^(5*log(5) - 4*log(4))*n^(-5/2)
+ O((e^n)^(5*log(5) - 4*log(4))*n^(-7/2))
sage: _.parent()
Asymptotic Ring <(e^(n*log(n)))^(Symbolic Constants Subring)
* (e^n)^(Symbolic Constants Subring)
* n^(Symbolic Constants Subring)
* log(n)^(Symbolic Constants Subring)>
over Rational Field
sage: all( # long time
....: asymptotic_expansions.Binomial_kn_over_n('n', k=k,
....: precision=5, algorithm='direct').has_same_summands(
Expand All @@ -319,7 +343,7 @@ def Binomial_kn_over_n(var, k, precision=None, skip_constant_factor=False,
Stirling = AsymptoticExpansionGenerators.Stirling(
var, precision=precision, skip_constant_factor=skip_constant_factor)
n = Stirling.parent().gen()
return Stirling.subs(n=k*n) / \
result = Stirling.subs(n=k*n) / \
(Stirling.subs(n=(k-1)*n) * Stirling)

if algorithm == 'log':
Expand All @@ -339,12 +363,17 @@ def Binomial_kn_over_n(var, k, precision=None, skip_constant_factor=False,
if not skip_constant_factor:
result /= (2*SCR('pi')).sqrt()

return result.map_coefficients(
result = result.map_coefficients(
lambda c: c.canonicalize_radical())

else:
raise ValueError('Unknown algorithm %s.' % (algorithm,))

if skip_constant_factor:
from sage.rings.rational_field import QQ
result = result.parent().change_parameter(
coefficient_ring=QQ)(result / SCR(k.sqrt()))
return result

# Easy access to the asymptotic expansions generators from the command line:
asymptotic_expansions = AsymptoticExpansionGenerators()
Expand Down

0 comments on commit 4a27e66

Please sign in to comment.