vacia tipos numeros lista letras len for espaƱol entrada datos crear convertir python sympy

python - tipos - Representando anillos de enteros algebraicos.



string en python (2)

Físico aquí: entendí algunas de esas palabras, pero tal vez pueda ayudar de todos modos :-D

¿Has probado SymPyIntegerRing ?

class sympy.polys.domains.SymPyIntegerRing Integer ring based on SymPy’s Integer type.

Estoy tratando de representar el anillo;

donde theta es la raíz de un polinomio f irreducible monico con coeficientes enteros de grado d.

Este anillo es una subring de los enteros algebraicos, que a su vez es una subring del campo;

Puedo representar este campo con la clase AlgebraicField de sympy.

Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)

¿Hay una manera de representar la subring de enteros anterior de una manera similar?


Sospecho que puede no ser una característica de sympy por estas razones:

Primero , si theta no es algebraico sobre los números enteros, entonces adjuntar theta a un anillo polinomial sobre los números enteros, es isomorfo.

Por ejemplo, pi no es algebraico sobre los enteros, porque no hay coeficientes enteros que, combinados con pi y potencias de pi, sean iguales a cero.

Para probar que estos, de hecho, son isomorfos, simplemente tome el anillo de evaluación de homomorfismo que evalúa cada polinomio en pi.

Puede que esta no sea una función preparada, porque calcular si un número no es algebraico sobre cualquier anillo no es trivial. Por ejemplo, determinar si e + pi es algebraico sigue siendo una pregunta abierta.

Esto se puede lograr en sympy por

from sympy.polys.domains import ZZ, QQ, RR, FF, EX x, y, z, t = symbols(''x y z t'') ZZ[''theta'']

o

ZZ[t]

Uno puede probar fácilmente que esto, de hecho, le da el anillo de polinomios sobre los enteros.

En segundo lugar , los números que son algebraicos (números como el número imaginario i , que son las raíces de los polinomios con valores enteros) se pueden obtener tomando el módulo de anillo polinomial y la idea generada por su polinomio monico único.

Entonces, si theta es el número imaginario i , que tiene el único polinomio monico x^2+1

>>> QQ.old_poly_ring(x).ideal(x**2+1) <x**2 + 1> >>> ZZ.old_poly_ring(x).ideal(x**2+1) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal return ModuleImplementedIdeal(self, self.free_module(1).submodule( File "/usr/local/lib/python2.7/dist- packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module return FreeModulePolyRing(self, rank) File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__ + ''got %s'' % ring.dom) NotImplementedError: Ground domain must be a field, got ZZ

Además, intentando esto:

>>> QQ.old_poly_ring(x).quotient_ring([x**2]) QQ[x]/<x**2> >>> ZZ.old_poly_ring(x).quotient_ring([x**2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 115, in quotient_ring e = self.ideal(*e) File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal return ModuleImplementedIdeal(self, self.free_module(1).submodule( File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module return FreeModulePolyRing(self, rank) File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__ + ''got %s'' % ring.dom) NotImplementedError: Ground domain must be a field, got ZZ

Mirando los documentos :

Sin embargo, la funcionalidad útil solo se implementa para anillos polinómicos sobre campos, y varias localizaciones y cocientes de los mismos.

En resumen, a menos que theta no sea algebraico sobre los enteros, esto podría ser imposible dentro del marco de sympy.

Sin embargo , la representación de los anillos de esta manera se puede lograr haciendo clases y usando los métodos mágicos de Python para anular el comportamiento regular de + y * , que es esencialmente lo que necesitamos para estudiar los anillos.

Aquí hay un ejemplo de los enteros gaussianos mencionados anteriormente. Este código podría reutilizarse fácilmente para darle, por ejemplo, la raíz cuadrada de 2, o cualquier otro número algebraico sobre los enteros.