Bazy Groebnera 2

2834 days ago by marysia

# Drugi przyklad - ekstrema funkcji x^3 + 2*x*y*z - z^2 na sferze x^2 + y^2 + z^2 = 1. # Stosujemy metode mnoznikow Lagrange'a, zeby znalezc kandydatow na ekstrema => mamy uklad rownan wielomianowych. P.<t,x,y,z> = PolynomialRing(QQ, 4, order='deglex') # (Pracujemy ze wspolczynnikami wymiernymi, zeby wyniki byly dokladne, ale w tym przykladzie nawet przy takim ograniczeniu uda sie znalezc rozwiazanie.) f = 3*x^2 + 2*y*z - 2*x*t g = 2*x*z - 2*y*t h = 2*x*y - 2*z - 2*z*t k = x^2 + y^2 + z^2 - 1 # Pierwiastki tego ukladu to ten sam zbior, co wspolne pierwiastki wszystkich wielomianow w ideale I = <f,g,h,k>. I = ideal(f,g,h,k) # Zmieniajac zbior generatorow (np. na baze Groebnera wg odpowiedniego porzadku) mozemy dostac latwiejszy uklad rownan. B1 = I.groebner_basis() for a in B1: print a 
       
z^4 + 97/96*t^2 + 291/128*y^2 - 233/384*y*z + 769/1152*z^2 +
233/576*t - 233/384*x - 291/128
t^3 - 1/2*y*z - 11/12*z^2 - 23/12*t - 1/2*x
x*y^2 + 1/2*t^2 + 9/8*y^2 - 5/8*y*z + 25/24*z^2 + 5/12*t - 5/8*x -
9/8
x*y*z + 1/2*t^2 + 9/8*y^2 - 1/8*y*z + 17/24*z^2 + 1/12*t - 1/8*x -
9/8
x*z^2 + 1/2*t^2 + 9/8*y^2 + 3/8*y*z + 25/24*z^2 + 5/12*t - 5/8*x -
9/8
y^3 + 11/17*z^3 - 7/17*x*y - x*z - y - 11/17*z
y^2*z + 7/17*z^3 - 6/17*x*y - 7/17*z
y*z^2 - 13/17*z^3 - 1/17*x*y + x*z + 13/17*z
t*x + 3/2*y^2 - y*z + 3/2*z^2 - 3/2
t*y - x*z
t*z - x*y + z
x^2 + y^2 + z^2 - 1
# Baza dla porzadku 'deglex' nie wyglada ciekawie - zmienmy porzadek: R.<t,x,y,z> = P.change_ring(order='lex') J = I.change_ring(R) B2 = J.groebner_basis() for a in B2: print a 
       
t - 3/2*x - 3/2*y*z - 167616/3835*z^6 + 36717/590*z^4 -
134419/7670*z^2
x^2 + y^2 + z^2 - 1
x*y - 19584/3835*z^5 + 1999/295*z^3 - 6403/3835*z
x*z + y*z^2 - 1152/3835*z^5 - 108/295*z^3 + 2556/3835*z
y^3 + y*z^2 - y - 9216/3835*z^5 + 906/295*z^3 - 2562/3835*z
y^2*z - 6912/3835*z^5 + 827/295*z^3 - 3839/3835*z
y*z^3 - y*z - 576/59*z^6 + 1605/118*z^4 - 453/118*z^2
z^7 - 1763/1152*z^5 + 655/1152*z^3 - 11/288*z
# Ostatnie rownanie zalezy tylko od z, a w dodatku mozna je latwo rozwiazac (a znajac jego pierwiastki, mozna rozwiazac tez pozostale rownania). S.<v> = PolynomialRing(QQ) n = v^7 - 1763/1152*v^5 + 655/1152*v^3 - 11/288*v n.factor() 
       
(v - 1) * (v - 2/3) * v * (v + 2/3) * (v + 1) * (v^2 - 11/128)