Alg2star-2

2347 days ago by J.Wisniewski

# Temat 2: bazy Groebnera, algorytm dzielenia w pierscieniach wielomianow # # Rozpatrujemy pierscien wielomianow trzech zmiennych z porzadkiem leksykograficznym z gradacja. P1.<x,y,z> = PolynomialRing(QQ, 3, order='deglex') # podajemy najpierw generatory idealu jako liste B=[x*z-y^2, x^3-z^2] # i definiujemy ideal I1 = ideal(B) # Funkcja groebner_basis() oblicza (zredukowana) baze Groebnera idealu I # zgodnie z porzadkiem zadanym na pierscieniu wielomianow. B1 = I1.groebner_basis() print B1 
       
[y^6 - z^5, x*y^4 - z^4, x^2*y^2 - z^3, x^3 - z^2, x*z - y^2]
f1 = -4*x^2*y^2*z^2 + y^6 + 3*z^5 # Chcemy sprawdzic, czy wielomian f1 nalezy do I1 # korzystamy z algorytmu dzielenia f1 przez baze Groebnera I1 f1.reduce(B1) 
       
0
# Reszta jest zerowa, wiec f1 nalezy do I1. # Nalezenie do idealu mozna tez sprawdzic tak: f1 in I1 
       
True
# ale jak vedziemy wykonywac algorytm dzielenia przez zbior, ktory nie jest baza Groebnera, # to juz dostajemy inny wynik f1.reduce(B) 
       
-3*y^6 + 3*z^5
# Teraz zmieniamy porzadek na odwrocony porzadek leksykograficzny ze stopniem P2.<x,y,z> = PolynomialRing(QQ, 3, order='degrevlex') # podajemy najpierw generatory idealu jako liste B=[x*z-y^2, x^3-z^2] # i definiujemy ideal I2 = ideal(B) B2 = I2.groebner_basis() print B2 
       
[x^3 - z^2, y^2 - x*z]
# tym razem wyjsciowy zbior jest juz baza Groebnera # sprawdzmy jak dziala algorytm dzielenia # definiujemy jeszcze raz ten sam wielomian (bo poprzedni byl w "innym" pierscieniu z innym porzadkiem) f2 = -4*x^2*y^2*z^2 + y^6 + 3*z^5 # i przeprowadzamy algorytm redukcji wedlug nowego porzadku f2.reduce(B) 
       
0