Opened 4 years ago

Last modified 4 years ago

#20065 new enhancement

Asymptotic Expansions: adaptive precision

Reported by: cheuberg Owned by:
Priority: major Milestone: sage-7.1
Component: asymptotic expansions Keywords: performance
Cc: dkrenn, behackl Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by cheuberg)

Try to predict the precision needed instead of relying on fixed default precision in order to speed up calulations.

Example:

sage: A.<n> = AsymptoticRing('n^QQ', QQ, default_prec=200)
sage: ex = 1/n + O(1/n^2); ex
n^(-1) + O(n^(-2))
sage: %time ex.subs(n=n+1)
CPU times: user 1min 4s, sys: 0 ns, total: 1min 4s
Wall time: 1min 4s
n^(-1) + O(n^(-2))
sage: A.<n> = AsymptoticRing('n^QQ', QQ, default_prec=5)
sage: ex = 1/n + O(1/n^2); ex
n^(-1) + O(n^(-2))
sage: %time ex.subs(n=n+1)
CPU times: user 56 ms, sys: 4 ms, total: 60 ms
Wall time: 51.5 ms
n^(-1) + O(n^(-2))

If inversion (or logarithm, exponentiation accepted a parameter initial_error and started with this initial error instead of zero, then they would terminate much earlier. So substitution could start with the error terms and feed the current error into each successive step.

The same idea for singularity analysis is #20054.

See #17601 for the asymptotic expansions meta ticket.

Change History (1)

comment:1 Changed 4 years ago by cheuberg

  • Description modified (diff)
Note: See TracTickets for help on using tickets.