Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
""" Big O for various types (power series, p-adics, etc.)
.. SEEALSO::
- `asymptotic expansions <../../../asymptotic/index.html>`_ - `p-adic numbers <../../../padics/index.html>`_ - `power series <../../../power_series/index.html>`_ - `polynomials <../../../polynomial_rings/index.html>`_ """ from __future__ import absolute_import from six import integer_types
import sage.arith.all as arith from . import laurent_series_ring_element import sage.rings.padics.factory as padics_factory import sage.rings.padics.padic_generic_element as padic_generic_element from . import power_series_ring_element from . import integer from . import rational from sage.rings.polynomial.polynomial_element import Polynomial from . import multi_power_series_ring_element
def O(*x, **kwds): """ Big O constructor for various types.
EXAMPLES:
This is useful for writing power series elements::
sage: R.<t> = ZZ[['t']] sage: (1+t)^10 + O(t^5) 1 + 10*t + 45*t^2 + 120*t^3 + 210*t^4 + O(t^5)
A power series ring is created implicitly if a polynomial element is passed::
sage: R.<x> = QQ['x'] sage: O(x^100) O(x^100) sage: 1/(1+x+O(x^5)) 1 - x + x^2 - x^3 + x^4 + O(x^5) sage: R.<u,v> = QQ[[]] sage: 1 + u + v^2 + O(u, v)^5 1 + u + v^2 + O(u, v)^5
This is also useful to create `p`-adic numbers::
sage: O(7^6) O(7^6) sage: 1/3 + O(7^6) 5 + 4*7 + 4*7^2 + 4*7^3 + 4*7^4 + 4*7^5 + O(7^6)
It behaves well with respect to adding negative powers of `p`::
sage: a = O(11^-32); a O(11^-32) sage: a.parent() 11-adic Field with capped relative precision 20
There are problems if you add a rational with very negative valuation to an `O`-Term::
sage: 11^-12 + O(11^15) 11^-12 + O(11^8)
The reason that this fails is that the constructor doesn't know the right precision cap to use. If you cast explicitly or use other means of element creation, you can get around this issue::
sage: K = Qp(11, 30) sage: K(11^-12) + O(11^15) 11^-12 + O(11^15) sage: 11^-12 + K(O(11^15)) 11^-12 + O(11^15) sage: K(11^-12, absprec = 15) 11^-12 + O(11^15) sage: K(11^-12, 15) 11^-12 + O(11^15)
We can also work with `asymptotic expansions`_::
sage: A.<n> = AsymptoticRing(growth_group='QQ^n * n^QQ * log(n)^QQ', coefficient_ring=QQ); A Asymptotic Ring <QQ^n * n^QQ * log(n)^QQ> over Rational Field sage: O(n) O(n)
TESTS::
sage: var('x, y') (x, y) sage: O(x) Traceback (most recent call last): ... ArithmeticError: O(x) not defined sage: O(y) Traceback (most recent call last): ... ArithmeticError: O(y) not defined sage: O(x, y) Traceback (most recent call last): ... ArithmeticError: O(x, y) not defined sage: O(4, 2) Traceback (most recent call last): ... ArithmeticError: O(4, 2) not defined """ else: (', '.join(str(e) for e in x),))
raise NotImplementedError("completion only currently defined " "for univariate polynomials") raise NotImplementedError("completion only currently defined " "for the maximal ideal (x)")
add_bigoh(x.valuation(), **kwds)
# p-adic number raise ArithmeticError("x must be a prime power >= 2") raise ArithmeticError("x must be prime power") type='capped-rel')(0, absprec=r, **kwds) else: type='capped-rel')(0, absprec=r, **kwds)
|