Rozdział 15 Wielomiany jednej zmiennej rzeczywistej algorytmy 15.1 Algorytm dzielenia Definicja 15.1 Niech dany będzie niezerowy wielomian f K[x] (K jest ciałem) f = a 0 x m + a 1 x m 1 +... + a m, gdzie a i K i a 0 0. Wówczas a 0 x m nazywamy wyrazem wiodącym wielomianu f. Oznaczamy LT (f) = a 0 x m. Przykład 15.2 Niech f(x) = 5x 5 3x 2 + 1. Wtedy LT (f) = 5x 5 Fakt 15.3 Jeśli f, g K[x] są niezerowymi wielomianami, to deg(f) deg(g) LT (f) LT (g). Teraz możemy już przejść do opisania algorytmu dzielenia wielomianów. Twierdzenie 15.4 [1, Proposition 2, The Divison Algorithm] Niech K będzie ciałem, zaś g niezerowym wielomianem w K[x]. Wtedy każdy f K[x] może być zapisany jako f = qg + r, gdzie q, r K[x] i r = 0 lub deg(r) < deg(g). Dowód Algorytm pozwalający wyznaczyć q, r (w pseudokodzie): Input : g, f Output : q, r q := 0, r := f W HILE r 0 AND LT (g) divides LT (r) DO q := q + LT (r)/lt (g) 1
r := r (LT (r)/lt (g))g Komenda W HILE... DO oznacza, że polecenia umieszczone we wcięciu należy wykonywać dopóki wyrażenie znajdujące się pomiędzy WHILE i DO nie okaże się fałszywe. Komenda q :=... r :=... wskazuje, że wartości q i r zostały zdefiniowane lub przedefiniowane. Zarówno q jak i r są tu zmiennymi i zmieniają swoje wartości w każdym kroku algorytmu. Dla dowodu twierdzenia musimy pokazać, że rozważany algorytm kończy się i otrzymane w rezultacie wartości q i r mają żądane własności. Zauważmy, że: Dla początkowych wartości q = 0 i r = f mamy f = qg + r Po przedefiniowaniu q i r równość f = qg + r pozostaje prawdziwa, ponieważ f = (q + LT (r)/lt (g))g + (r (LT (r)/lt (g))g) Pętla W HILE... DO kończy się, gdy zdanie r 0 i LT (g) dzieli LT (r) jest fałszywe, czyli gdy r = 0 lub LT (g) nie dzieli LT (r) Z faktu 15.3 mamy, że LT (g) LT (r) deg(r) < deg(g). Zatem gdy algorytm kończy się (czego jeszcze nie wiemy), otrzymujemy q i r o żądanych własnościach. Musimy więc teraz pokazać, że algorytm rzeczywiście się kończy, czyli że zdanie pomiędzy WHILE i DO będzie w którymś kroku fałszywe (w przeciwnym wypadku otrzymalibyśmy pętlę, która nigdy się nie kończy). Niech r = a 0 x m + a 1 x m 1 +... + a m g = b 0 x k + b 1 x k 1 +... + b k i niech m k. Pokażemy, że h = r (LT (r)/lt (g))g jest równe 0 lub deg(h) < deg(r). Zauważmy, że h = r (LT (r)/lt (g))g = = a 0 x m + a 1 x m 1 +... + a m (LT (r)/lt (g))(b 0 x k + b 1 x k 1 +... + b k ) = = (a 0 a 0 )x m + (a 0 (a 0 /b 0 )b 1 )x m 1 +... = = (a 0 (a 0 /b 0 )b 1 )x m 1 +... A stąd deg(h) < m = deg(r) lub h = 0. Zatem w kolejnych krokach algorytmu r staje się wielomianem coraz niższego rzędu. Jeśli stopień r jest skończony 2
(tylko taki przypadek rozważamy, bo gdy deg(r) =, to g f), to będziemy go obniżać skończenie wiele razy, co dowodzi, że algorytm kończy się. W ostatnim kroku dowodu pokażemy, że q i r są wyznaczone jednoznacznie. Załóżmy, że f = qg + r = qg + r, gdzie deg(r) < deg(g) i deg( r) < deg(g) (chyba, że jeden lub oba wielomiany r i r są równe 0) Jeśli r r, to deg( r r) < deg(g). Z drugiej strony (q q)g = r r, q q 0 Czyli deg( r r) = deg((q q)g) = deg(q q) + deg(g) deg(g). Otrzymana sprzeczność kończy dowód jednoznaczności w przypadku q q, r r. Trzeba jeszcze rozpatrzeć dwa przypadki: Gdy q = q, r r. Wtedy f = qg + r = qg + r r r = 0 r = r Gdy q q, r = r. Wtedy f = qg+r = qg+r (q q)g = 0 q q = 0, bo g 0 i w K[x] nie ma dzielników zera. Co kończy dowód. Przykład 15.5 Rozważmy f(x) = 2x 3 + 3x + 5 g(x) = x 2 + 2x + 1. Oczywiście LT (f) = 2x 3, LT (g) = x 2. Wykorzystując algorytm podany w dowodzie twierdzenia 15.4 znajdziemy wielomiany q i r. Postępując zgodnie z algorytmem mamy: I krok algorytmu: Na wejściu: q := 0 i r := f, LT (g) = x 2 i LT (r) = 2x 3 Ponieważ r 0 i x 2 2x 3, to: q := 0 + 2x 3 /x 2 = 2x r := 2x 3 + 3x + 5 (2x 3 /x 2 )(x 2 + 2x + 1) = 4x 2 + x + 5 II krok algorytmu: Na wejściu: q := 2x i r := 4x 2 + x + 5, LT (g) = x 2 i LT (r) = 4x 2 Ponieważ r 0 i x 2 ( 4x 2 ), to: q := 2x + ( 4x 2 /x 2 ) = 2x 4 r := 4x 2 + x + 5 ( 4x 2 /x 2 )(x 2 + 2x + 1) = 9x + 9 III krok algorytmu: Na wejściu: q := 2x 4 i r := 9x + 9, LT (g) = x 2 i LT (r) = 9x Ponieważ r 0 ale x 2 nie dzieli 9x to KONIEC. Zatem ostatecznie: 2x 3 + 3x + 5 = (2x 4)(x 2 + 2x + 1) + 9x + 9 3
15.2 Znajdowanie liczby pierwiastków Wniosek 15.6 [1, Corollary 3] Jeśli K jest ciałem i f K[x] jest niezerowym wielomianem, to liczba pierwiastków f w K jest równa co najwyżej deg(f). Dowód Niech m = deg(f). Przeprowadzimy indukcję względem m. 1. m=0 Wtedy f jest niezerową stałą, zatem f nie ma pierwiastków, więc w sposób oczywisty teza jest prawdziwa. 2. Załóżmy, że teza wniosku zachodzi dla wielomianów stopnia m 1. 3. Niech deg(f) = m Jeśli f nie ma pierwiastków w K, to teza jest prawdziwa. Załóżmy, że a jest pierwiastkiem f w K. Z twierdzenie 15.4 mamy: f = q(x a) oraz deg(g) = m 1 (bo deg(f) = m, deg(x a) = 1). Zauważmy, że każdy pierwiastek f, różny od a jest też pierwiastkiem q: Niech b a będzie pierwiastkiem f. 0 = f(b) = q(b)(b a) A stąd q(b) = 0, bo K jest ciałem. Z założenia indukcyjnego q ma co najwyżej m 1 pierwiastków, a stąd f ma co najwyżej m pierwiastków (bo każdy pierwiastek f jest pierwiastkiem q). 15.3 Algorytm Euklidesa Definicja 15.7 Wielomian h K[x] nazywamy największym wspólnym dzielnikiem wielomianów f, g K[x], gdy i) h dzieli f i g, ii) jeśli p jest innym wielomianem, który dzieli wielomiany f i g, to p dzieli h. Oznaczamy h = GCD(f, g). Twierdzenie 15.8 [1, Proposition 6] Niech f, g K[x]. Wtedy: 4
a) GCD(f, g) istnieje i jest wyznaczony jednoznacznie (z dokładnością do mnożenia przez niezerową stałą). b) GCD(f, g) jest generatorem ideału (f, g). c) Istnieje algorytm służący do wyznaczania GCD(f, g). Jest to algorytm Euklidesa. Dowód a) ISTNIENIE Rozważmy ideał (f, g). Każdy ideał w K[x] jest główny, zatem istnieje h K[x] taki, że (f, g) = (h). Pokażemy, że h jest GCD(f, g). Zauważmy, że h dzieli f i g (bo f, g (h)). Niech p K[x] będzie taki, że p f i p g. Wtedy f = cp, g = dp dla pewnych c, d K[x]. Ponieważ h (f, g), to a,b K[x] af + bg = h. Zatem h = acp + bdp = (ac + bd)p, a stąd p h. A więc h rzeczywiście jest GCD(f, g). JEDNOZNACZNOŚĆ Załóżmy,że h = GCD(f, g) i h = GCD(f, g). Z definicji 15.7: h h h = a h, dla pewnego a K[x], h h h = bh, dla pewnego b K[x]. deg(h) = deg(a) + deg( h) deg( h), deg( h) = deg(b) + deg(h) deg(h). A zatem deg(h) = deg( h), czyli a, b K. b) Wynika z dowodu poprzedniego punktu. c) Niech f, g K[x], g 0. Z twierdzenia 15.4: f = qg+r, gdzie q, r K[x] i r = 0 lub deg(r) < deg(g). Oznaczmy r = remainder(f, g) ALGORYTM EUKLIDESA (w pseudokodzie): Input : f, g Output : h h := f, s := g W HILE s 0 DO 5
rem := remainder(h, s) h := s s := rem Uzasadnienie (że algorytm rzeczywiście zwraca GCD(f, g)): Rozważmy ideały (f, g) i (f qg, g). Dowolny element ideału (f, g) jest postaci af + bg, gdzie a, b K[x]. Zaś dowolny element ideału (f qg, g) ma postać: cf cqg + dg = cf + (d cq)g, gdzie c, d K[x]. A stąd (f, g) = (f qg, g), co daje: GCD(f, g) = GCD(f qg, g) = GCD(r, g). Ponadto deg(g) > deg(r) lub r = 0 (bo tak było określone r). Jeśli r 0. to powtarzamy powyższe rozumowanie dla q i r takich, że: g = qr + r i GCD(g, r) = GCD(r, r), gdzie deg(r) > deg( r) lub r = 0. Postępując analogicznie otrzymujemy: (*) GCD(f, g) = GCD(g, r) = GCD(r, r) = GCD( r, r) =... (**) deg(g) > deg(r) > deg( r) > deg( r) >... lub r = r = r =... = 0 Wracając do algorytmu, rozważmy teraz zmienne h i s. Zauważmy, że h przyjmuje wartości f, g, r, r,... występujące w (*), zaś s: g, r, r, r,... z (*). Zatem elementy z (*) są kolejnymi wynikami otrzymanymi przy działaniu pętli W HILE... DO, co daje: GCD(h, s) = GCD(f, g). Z (**) mamy natomiast, że stopień s maleje w każdym kroku algorytmu, więc w którymś momencie otrzymamy s = 0. Wówczas mamy: GCD(h, 0) = GCD(f, g) Ponieważ (h, 0) = (h), więc GCD(h, 0) = h dla s = 0. Euklidesa zwraca h o wartości równej GCD(f, g). Zatem algorytm Przykład 15.9 Niech f(x) = x 4 x 2 2x 1 g(x) = x 3 1 Wykorzystując algorytm podany w dowodzie twierdzenia 15.8 znajdziemy wielomian h = GCD(f, g). Postępując zgodnie z algorytmem mamy: I krok algorytmu: Na wejściu: h := x 4 x 2 2x 1 i s := x 3 1, h = x(x 3 1)+( x 2 x 1) Ponieważ s 0, to: rem := x 2 x 1 h := x 3 1 s := x 2 x 1 6
II krok algorytmu: Na wejściu: h := x 3 1 i s := x 2 x 1, h = ( x + 1)( x 2 x 1) Ponieważ s 0, to: rem := 0 h := x 2 x 1 s := 0 to KONIEC Zatem ostatecznie: h = GCD(f, g) = x 2 x 1 lub GCD(f, g) = x 2 + x + 1 Definicja 15.10 Wielomian h K[x] nazywamy największym wspólnym dzielnikiem wielomianów f 1,..., f s K[x], gdy: i) h dzieli f 1,..., f s ii) jeśli p jest innym wielomianem dzielącym f 1,..., f s, to p dzieli h. Oznaczamy: h = GCD(f 1,..., f s ). Twierdzenie 15.11 [1, Proposition 8] Niech f 1,..., f s K[x], s 2. Wtedy: a) GCD(f 1,..., f s ) istnieje i jest wyznaczony jednoznacznie (z dokładnością do mnożenia przez niezerową stałą). b) GCD(f 1,..., f s ) jest generatorem ideału (f 1,..., f s ). c) Jeśli s 3, to GCD(f 1,..., f s ) = GCD(f 1, GCD(f 2,..., f s )). d) Istnieje algorytm służący do wyznaczania GCD(f 1,..., f s ). Przykład 15.12 Niech f 1 (x) = x 3 3x + 2 f 2 (x) = x 4 1 f 3 (x) = x 6 1 GCD(f 1, f 2, f 3 ) generator (f 1, f 2, f 3 ). Z twierdzenia 15.11 : GCD(f 1, f 2, f 3 ) = GCD(f 1, GCD(f 2, f 3 )) = GCD(x 3 3x + 2, x 2 1) GCD(x 3 3x + 2, x2 1) znajdziemy wykorzystując algorytm Euklidesa. Postępując zgodnie z algorytmem mamy: I krok algorytmu: Na wejściu: h := x 3 3x + 2 i s := x 2 1, h = x(x 2 1) + ( 2x + 2) Ponieważ s 0, to: rem := 2x + 2 h := x 2 1 s := 2x + 2 7
II krok algorytmu: Na wejściu: h := x 2 1 i s := 2x + 2, h = ( 1x 1 )( 2x + 2) 2 2 Ponieważ s 0, to: rem := 0 h := 2x + 2 s := 0 to KONIEC Zatem ostatecznie: h = GCD(f, g) = 2x + 2 lub GCD(f, g) = x 1 8
Bibliografia [1] D. Cox, J. Little, D. O Shea, Ideals, varieties, and algorithms. An introduction to computational algebraic geometry and commutative algebra, Undergraduate Texts in Mathematics, Springer-Verlag, New York, 1997 9