FACULTEIT WETENSCHAPPEN
Computeralgebra
procedure GGD(a, b) c ← |a|;d ← |b|; while d 6= 0 do { r ← rem(c, d); c ← d; d ← r; } g ← c; return(g) end
dr. J. De Beule Vakgroep Zuivere Wiskunde en Computeralgebra
keuzevak licenties wiskunde/informatica februari 2007
ii
Woord vooraf Deze nota’s zijn opgesteld ter ondersteuning van het opleidingsonderdeel “Computeralgebra” zowel voor de opleiding Wiskunde als voor de Opleiding Informatica. Hierbij dient te worden aangestipt, dat voor de opleiding Wiskunde in de context van dit opleidingsonderdeel nog een extra topic betreffende Groepentheorie wordt aangeboden, en dat dit onderdeel NIET vervat zit in deze nota’s. Gelet op de beperkingen zowel in tijd als in financi¨en (beperkte beschikbaarheid van de licenties) moeten deze nota’s gelezen worden als INLEIDING TOT COMPUTERALGEBRA. Vanwege de eerste beperking kunnen slechts een deel van de mogelijkheden van computeralgebra aan bod komen, vanwege de tweede beperking zien we ons verplicht de praktijk te illustreren aan de hand van het pakket Maple dat aan de RUG en zijn studenten (CD-rom verkrijgbaar op het ARC voor 12.5 EUR) ter beschikking is gesteld. Voor de praktische oefeningen zullen we in hoofdzaak gebruik maken van laatst beschikbare versie van Maple. Hierbij worden een aantal Maple-werkbladen ter beschikking gesteld op de server van de PC-zaal Wetenschappen (S9) in de bestandsmap hoogew/maple/. Deze Maple-werkbladen zoals nu beschikbaar (februari 2006) zijn aangemaakt met versie van Maple 6. Mocht het blijken dat er problemen zijn met de huidige ge¨ınstalleerde versie, dan zullen deze worden aangepast. We danken langs deze weg Sandy Van Wonterghem, Patrick Govaerts en Pieter Vandecasteele voor hun bijdrage in deze materie. Er moet evenwel duidelijk gesteld worden dat het geenszins de bedoeling is om hier de handleiding van Maple te herschrijven. We willen wel pogen om aan te tonen hoe het samengaan van wiskundig inzicht en informatica aanleiding hebben gegeven tot “gereedschap” (= tools) dat bruikbaar is zowel bij de theoretische ontwikkeling van de Wiskunde als in de toepassingen.
iii
Ondanks de zorgvuldige lectuur zowel door de auteur, als door een aantal bereidwillige medewerkers en de studenten van de vorige jaren is het gelet op de wisselende mogelijkheden van de achtereenvolgende versies van Maple, niet uitgesloten dat in deze versie nog steeds vervelende fouten de duidelijkheid van de tekst schaden. We zijn derhalve de lezers dankbaar voor alle opmerkingen die de leesbaarheid van deze nota’s ten goede komen. Albert Hoogewijs Gent, februari 2006 In het academiejaar 2006-2007 wordt voor het laatst een tweede licentie wiskunde en een tweede licentie informatica ingericht. In het academiejaar 2007-2008 wordt de eerste master wiskunde en de eerste master wiskundige informatica voor het eerst ingericht. De ECTS-fiche voor het vak “Computeralgebra” in de master wiskunde en de master wiskundige informatica zijn gebaseerd op de inhoud van dit gedeelte van dit vak. Het gedeelte “Computationele groepentheorie”, dat dit jaar voor het laatst als onderdeel van het vak “Computeralgebra” gegeven wordt, zal een gedeelte uitmaken van het vak “Computational group theory” in de master wiskunde en de master wiskundige informatica. Het is een eer om dit academiejaar dit gedeelte van het opleidingsonderdeel Computeralgebra over te nemen van prof. dr. A. Hoogewijs. Albert Hoogewijs, sinds 1 januari 2007 gepensioneerd en ere-Gewoon Hoogleraar aan onze universiteit, is ´e´en van de mensen achter CAGe, wat staat voor Computer Algebra Gent. Samen met onder meer prof. dr. F. Brackx, prof. dr. F. De Clerck, prof. dr. R. Delanghe en prof. dr. J. A. Thas richtte hij via financiering van het FWO dit project op. Dit project vormde de achtergrond en de basis van een aantal vakken die binnen de in 1991 opgerichte Vakgroep Zuivere Wiskunde en Computeralgebra gegeven werden, waaronder het vak “Computeralgebra”. Zoals door Bert aangehaald wordt in zijn voorwoord voor deze cursus voor het academiejaar 2005-2006, moet dit opleidingsonderdeel gezien worden als een inleiding tot het vakgebied. Centraal staat “Algebra van polynomen”, samen met enkele toepassingen. In de laatste twee hoofdstukken worden enkele algoritmen besproken om formele integralen te berekenen van enerzijds rationale functies en anderzijds logaritmische en exponenti¨ele functies. Daarbij dient opgemerkt te worden dat ook hier het (uitgebreid) algoritme van Euclides, dat de belangrijkste pijler vormt voor de eerste vijf hoofdstukken, van belang is. De nota’s voor dit gedeelte van het vak zijn volledig gebaseerd op de nota’s van het academiejaar 2005–2006. Hier en daar zijn verwijzingen naar bepaalde worksheets toegevoegd. Het dient nog opgemerkt te worden dat de maple worksheets (cfr. supra) nu ook beschikbaar zijn op minerva. Jan De Beule Februari 2007
iv
Inhoudsopgave 1 Inleiding 1.1 Computeralgebra: waarover gaat het? . . . . . . 1.2 Wetenschappelijke en algebra¨ısche berekeningen 1.3 Computeralgebra . . . . . . . . . . . . . . . . . 1.4 Overzicht van Computeralgebrasystemen . . . . 1.5 Automatische Bewijsvoering . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
1 1 3 3 4 7
2 Hoe gebruiken we Computeralgebra 2.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Een aantal mogelijkheden . . . . . . . . . . . . . . . . 2.3 Syntax van de geassocieerde talen . . . . . . . . . . . . 2.4 Toepassingsgebieden van de bestaande systemen . . . . 2.5 De mogelijkheden van Maple op een aantal voorbeelden 2.5.1 Eenvoudige bewerkingen op getallen . . . . . . . 2.5.2 Complexe getallen . . . . . . . . . . . . . . . . 2.5.3 Polynomen en Rationale vormen . . . . . . . . . 2.5.4 matrices . . . . . . . . . . . . . . . . . . . . . . 2.5.5 Differenti¨eren . . . . . . . . . . . . . . . . . . . 2.5.6 Goniometrische functies . . . . . . . . . . . . . 2.5.7 Integratie . . . . . . . . . . . . . . . . . . . . . 2.6 Waarom Maple? . . . . . . . . . . . . . . . . . . . . . . 2.7 Opgave . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
11 11 12 13 13 14 14 16 17 18 20 21 22 23 23
3 Het probleem van de datarepresentatie 3.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Structuren . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Σ-structuur . . . . . . . . . . . . . . . . . . . . 3.2.2 Axioma’s . . . . . . . . . . . . . . . . . . . . . 3.2.3 Algebra¨ısche structuren . . . . . . . . . . . . . . 3.3 Voorstelling van gehele getallen . . . . . . . . . . . . . 3.4 Voorstelling van rationale getallen . . . . . . . . . . . . 3.4.1 De datastructuur . . . . . . . . . . . . . . . . . 3.4.2 Grootste gemene deler van gehele getallen . . . 3.4.3 Het algoritme van Euclides voor gehele getallen 3.4.4 Canonische en normale voorstellingen . . . . . . 3.4.5 Het uitgebreide algoritme van Euclides voor Z . 3.5 Voorstelling van polynomen . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
25 25 25 25 28 29 30 35 35 35 37 39 41 44
v
. . . . .
. . . . .
. . . . .
3.5.1 Polynomen in ´e´en variabele . . . . . . . . . . 3.5.2 Polynomen in meerdere variabelen . . . . . . . 3.6 Voorstelling van rationale functies . . . . . . . . . . . 3.7 Voorstelling van algebra¨ısche functies . . . . . . . . . 3.7.1 Enkelvoudige wortelvormen . . . . . . . . . . 3.7.2 Genestelde wortelvormen . . . . . . . . . . . . 3.7.3 Algemene algebra¨ısche functies . . . . . . . . 3.8 Voorstelling van transcendente functies en constanten 3.9 Voorstelling van complexe getallen . . . . . . . . . . 3.10 Voorstelling van matrices . . . . . . . . . . . . . . . . 3.10.1 Dichte matrices . . . . . . . . . . . . . . . . . 3.10.2 IJle matrices . . . . . . . . . . . . . . . . . . . 3.11 Voorstelling van reeksen . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
45 45 48 49 49 51 54 57 65 67 69 71 75
4 Algebra van polynomen 4.1 Algemene definities en eigenschappen . . . . . . . . . . . . . 4.1.1 Deler . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 GGD . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Euclidisch domein . . . . . . . . . . . . . . . . . . . . 4.1.4 Eigenschap (veralgemening van 3.4.2) . . . . . . . . . 4.1.5 Polynomen in ´e´en veranderlijke . . . . . . . . . . . . 4.1.6 Eigenschap . . . . . . . . . . . . . . . . . . . . . . . 4.1.7 De Euclidische deling voor polynomen . . . . . . . . 4.1.8 Toegevoegde elementen - Units . . . . . . . . . . . . 4.1.9 Uniek-factorisatie domein (UFD) . . . . . . . . . . . 4.1.10 Unit-normale elementen . . . . . . . . . . . . . . . . 4.1.11 Eigenschap . . . . . . . . . . . . . . . . . . . . . . . 4.2 GGD van polynomen over Q . . . . . . . . . . . . . . . . . . 4.2.1 Algoritme van Euclides . . . . . . . . . . . . . . . . . 4.2.2 Uitgebreid algoritme van Euclides . . . . . . . . . . . 4.2.3 Diofantische polynoom-vergelijking . . . . . . . . . . 4.2.4 Stelling . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.5 Reductie van rationale vormen . . . . . . . . . . . . . 4.2.6 Ontbinding van rationale vormen in partieel breuken 4.3 Het Primitief Algoritme van Euclidisch . . . . . . . . . . . . 4.3.1 GGD van polynomen over Z . . . . . . . . . . . . . . 4.3.2 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3 Primitief polynoom . . . . . . . . . . . . . . . . . . . 4.3.4 Content en primitief deel van een polynoom . . . . . 4.3.5 Lemma van Gauss . . . . . . . . . . . . . . . . . . . 4.3.6 Pseudo-deling van polynomen . . . . . . . . . . . . . 4.3.7 Pseudodelingseigenschap (PDE) . . . . . . . . . . . . 4.3.8 GGD in D[x] . . . . . . . . . . . . . . . . . . . . . . 4.3.9 Stelling . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.10 Primitief Algoritme van Euclides . . . . . . . . . . . 4.3.11 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . 4.3.12 GGD voor polynomen in meerdere variabelen . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79 79 79 79 80 80 80 81 81 81 82 82 83 83 84 87 92 92 95 96 97 97 97 102 102 104 104 105 106 106 107 108 108
vi
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
4.4
4.5
4.6
4.7
4.8
4.9
Sylvester matrix en resultante . . . . . . . . . . . . . 4.4.1 Sylvester Matrix . . . . . . . . . . . . . . . . 4.4.2 Resultante . . . . . . . . . . . . . . . . . . . . 4.4.3 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.4.4 Sylvester criterium . . . . . . . . . . . . . . . 4.4.5 Stelling . . . . . . . . . . . . . . . . . . . . . 4.4.6 Gevolg: Sylvester Criterium . . . . . . . . . . Factorisatie van Polynomen . . . . . . . . . . . . . . 4.5.1 Kwadraatvrije factorisatie . . . . . . . . . . . 4.5.2 Stelling . . . . . . . . . . . . . . . . . . . . . 4.5.3 Voorbeeld . . . . . . . . . . . . . . . . . . . . Kwadraatvrije factorisatie over eindige velden . . . . 4.6.1 Inleiding . . . . . . . . . . . . . . . . . . . . . 4.6.2 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.6.3 Lemma . . . . . . . . . . . . . . . . . . . . . . 4.6.4 Stelling . . . . . . . . . . . . . . . . . . . . . 4.6.5 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.6.6 Voorbeelden in Maple . . . . . . . . . . . . . 4.6.7 Voorbeeld . . . . . . . . . . . . . . . . . . . . Berlekamps’ factorisatiealgoritme . . . . . . . . . . . 4.7.1 Inleiding . . . . . . . . . . . . . . . . . . . . . 4.7.2 Stelling . . . . . . . . . . . . . . . . . . . . . 4.7.3 Een andere voorstelling van GF(q) . . . . . . 4.7.4 Stelling . . . . . . . . . . . . . . . . . . . . . 4.7.5 Stelling . . . . . . . . . . . . . . . . . . . . . 4.7.6 Stelling . . . . . . . . . . . . . . . . . . . . . 4.7.7 Voorbeeld FormMatrixQ in Maple . . . . . . . 4.7.8 Driehoeks-idempotente matrix . . . . . . . . . 4.7.9 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.7.10 Eigenschap . . . . . . . . . . . . . . . . . . . 4.7.11 Stelling . . . . . . . . . . . . . . . . . . . . . 4.7.12 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.7.13 Algoritme voor basis van de kern . . . . . . . 4.7.14 Algoritme van Berlekamp . . . . . . . . . . . 4.7.15 Voorbeeld . . . . . . . . . . . . . . . . . . . . 4.7.16 Berlekamp in Maple . . . . . . . . . . . . . . TOEPASSING I . . . . . . . . . . . . . . . . . . . . . 4.8.1 Inleiding . . . . . . . . . . . . . . . . . . . . . 4.8.2 Eigenschappen van het minimaalpolynoom . . 4.8.3 Voorstelling van een eindig veld: een algoritme 4.8.4 Maple-sessie . . . . . . . . . . . . . . . . . . . 4.8.5 Opgave . . . . . . . . . . . . . . . . . . . . . 4.8.6 Opgave . . . . . . . . . . . . . . . . . . . . . TOEPASSING II . . . . . . . . . . . . . . . . . . . . 4.9.1 Inleiding . . . . . . . . . . . . . . . . . . . . . 4.9.2 p−adische voorstelling van gehele getallen . . 4.9.3 p−adische voorstelling van gehele polynomen . vii
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113 113 113 113 114 114 115 118 118 119 121 125 125 125 126 127 128 129 137 138 138 138 139 140 141 142 144 146 146 147 147 148 149 157 157 163 164 164 164 165 166 170 170 173 173 174 176
4.9.4 4.9.5 4.9.6 4.9.7 4.9.8
Definitie . . . . . . . . . . . . Hensel Lemma . . . . . . . . Stelling . . . . . . . . . . . . Het Hensel Lifting Algoritme Voorbeeld . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 Gr¨ obnerbasis voor polynoom-idealen 5.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Term-ordening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Zero-reductie probleem . . . . . . . . . . . . . . . . . . . . . 5.2.2 Definitie: Toelaatbare ordening . . . . . . . . . . . . . . 5.2.3 Definitie: Lexicografische ordening : >L (plex). . . . . 5.2.4 Definitie: Totale-graad ordening >D (tdeg) . . . . . . 5.2.5 Definitie: monoom . . . . . . . . . . . . . . . . . . . . . . 5.2.6 Definitie: hoofdmonoom . . . . . . . . . . . . . . . . . . 5.2.7 Voorbeelden van ordeningen in Maple . . . . . . . . . . . . . 5.3 Reductie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Stelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7 Gr¨obnerbasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9 Alternatieve karakterisatie van Gr¨obnerbasis . . . . . . . . . . . . . 5.10 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.11 Stelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.12 Gevolg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.13 Buchberger algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . 5.14 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.15 Verbetering van het Buchberger Algoritme . . . . . . . . . . . . . . 5.15.1 Gr¨obnerbasis niet uniek . . . . . . . . . . . . . . . . . . . . 5.15.2 Gereduceerde gro ¨bnerbasis . . . . . . . . . . . . . . . . 5.15.3 Stelling (Buchberger) . . . . . . . . . . . . . . . . . . . . . 5.15.4 Stelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.15.5 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.16 Toepassing van Gr¨obnerbasissen . . . . . . . . . . . . . . . . . . . . 5.16.1 I. Berekeningen in Quotientringen . . . . . . . 5.16.2 II. Oplossen van stelsels van polynoomvergelijkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.16.3 III. Meetkundige bewijsvoering . . . . . . . . . . 6 Formele integratie van rationale functies 6.1 Inleiding . . . . . . . . . . . . . . . . . . . . 6.2 Differentiaalvelden . . . . . . . . . . . . . . 6.3 Formele integratie van een polynoom . . . . 6.4 Formele Integratie van een rationale functie 6.4.1 De na¨ıeve aanpak . . . . . . . . . . . 6.4.2 De hermitemethode (1872) . . . . . . viii
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . .
178 178 180 180 181
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193 193 195 195 196 197 198 199 200 201 203 205 206 211 212 213 213 213 214 215 215 216 219 219 225 225 226 228 234 234
. 238 . 241 247 . 247 . 248 . 250 . 251 . 252 . 259
6.4.3 6.4.4
De horowitzmethode (1969) . . . . . . . . . . . . . . . . . . . 262 Het Logaritmisch gedeelte . . . . . . . . . . . . . . . . . . . . 269
7 Formele Integratie van elementaire functies 283 7.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 7.2 Elementaire functievelden . . . . . . . . . . . . . . . . . . . . . . . . 283 7.2.1 DEFINITIES . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 7.2.2 DEFINITIES . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 7.2.3 DEFINITIES . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 7.2.4 VOORBEELD 1 . . . . . . . . . . . . . . . . . . . . . . . . . 285 7.2.5 VOORBEELD 2 . . . . . . . . . . . . . . . . . . . . . . . . . 286 7.2.6 VOORBEELD 3 . . . . . . . . . . . . . . . . . . . . . . . . . 286 7.2.7 DEFINITIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 7.2.8 STRUCTUURSTELLING . . . . . . . . . . . . . . . . . . 287 7.2.9 VOORBEELD 1 . . . . . . . . . . . . . . . . . . . . . . . . . 288 7.2.10 VOORBEELD 2 . . . . . . . . . . . . . . . . . . . . . . . . . 288 7.2.11 VOORBEELD 3 . . . . . . . . . . . . . . . . . . . . . . . . . 289 7.2.12 VOORBEELD 4 . . . . . . . . . . . . . . . . . . . . . . . . . 290 7.2.13 VOORBEELD 5 . . . . . . . . . . . . . . . . . . . . . . . . . 290 7.3 Afleiding van elementaire functies . . . . . . . . . . . . . . . . . . . . 291 7.3.1 STELLING: (Afleiding van een logaritmisch polynoom) . . . 291 7.3.2 STELLING: (Afleiding van een exponentieel polynoom) . . . 292 7.3.3 STELLING: (Afleiding van een algebra¨ısche functie) . . . . . 292 7.4 Het liouvilleprincipe . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 7.4.1 STELLING: (Principe van Liouville) . . . . . . . . . . . . . 293 7.4.2 STELLING: (liouvilleprincipe voor een simpele transcendente logaritmische extensie) . . . . . . . . . . . . . . . . . . . . . 293 7.4.3 STELLING: (liouvilleprincipe voor een simpele transcendente exponenti¨ele extensie) . . . . . . . . . . . . . . . . . . . . . 294 7.4.4 STELLING: (liouvilleprincipe voor een simpele algebra¨ısche extensie) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 7.4.5 VOORBEELD . . . . . . . . . . . . . . . . . . . . . . . . . . 294 7.5 Het rischalgoritme voor transcendente elementaire functies . . . . . . 295 7.5.1 Het rischalgoritme voor transcendente logaritmische extensies 296 7.5.1.1 Logaritmische extensie : het rationaal deel . . . . . . . . . . . 296 7.5.1.1.1 VOORBEELD (7.5.1.1) 1 . . . . . . . . . . . . . . . . . . . 299 7.5.1.1.2 VOORBEELD (7.5.1.1) 2 . . . . . . . . . . . . . . . . . . . 299 7.5.1.1.3 VOORBEELD (7.5.1.1) 3 . . . . . . . . . . . . . . . . . . . 300 7.5.1.2 Logaritmische extensie : de rothstein-tragerresultaten . . . . 310 7.5.1.3 Logaritmische extensie : het polynomiale deel . . . . . . . . . 312 7.5.1.3.1 VOORBEELD (7.5.1.3) 1 . . . . . . . . . . . . . . . . . . . 315 7.5.1.3.2 VOORBEELD (7.5.1.3) 2 . . . . . . . . . . . . . . . . . . . 316 7.5.1.3.3 VOORBEELD (7.5.1.3) 3 . . . . . . . . . . . . . . . . . . . 316 7.5.2 Het rischalgoritme voor transcendente exponenti¨ele extensies . 336 7.5.2.1 Exponenti¨ele extensie : het rationale deel . . . . . . . . . . . 338 7.5.2.1.1 VOORBEELD (7.5.2.1) 1 . . . . . . . . . . . . . . . . . . . 339 7.5.2.1.2 VOORBEELD (7.5.2.1) 2 . . . . . . . . . . . . . . . . . . . 340 ix
7.5.2.1.3 VOORBEELD (7.5.2.1) 3 . . . . . . . . . . . . . 7.5.2.2 De rothstein-tragerresultaten voor een exponenti¨ele 7.5.2.3 Exponenti¨ele extensie : het “polynomiale” deel . . 7.5.2.3.1 VOORBEELD (7.5.2.3) 1 . . . . . . . . . . . . . 7.5.2.3.2 VOORBEELD (7.5.2.3) 2 . . . . . . . . . . . . . 7.5.2.3.3 VOORBEELD (7.5.2.3) 3 . . . . . . . . . . . . .
x
. . . . . extensie . . . . . . . . . . . . . . . . . . . .
. . . . . .
340 350 351 353 354 354
Hoofdstuk 1 Inleiding Drie van zulke zware pakketten is te veel van het goede, dus de vraag is: welke laat ik op schijf staan? Mathematica heeft notebooks en een prima helpfunctie, maar vraagt veel geheugen. Maple’s wiskundemachine is het krachtigst, maar de werkomgeving is sober uitgevallen. Mathcad is een goed en stabiel Windows-programma met genoeg mathematische kennis voor mijn wensen, maar kan geen animaties maken... Misschien koop ik toch maar weer een grotere harde schijf, dan hoef ik niet te kiezen. Kees Vuis (PCM oktober 1993)
“Veel mensen voelen de rillingen nog over hun rug lopen als ze terugdenken aan hun vroegere wiskundelessen. Een functie differenti¨eren of integreren, vergelijkingen met onbekenden oplossen, het was allemaal even vreselijk. Maar kwam dat door het onderwerp, of lag het aan de manier waarop het werd behandeld? Misschien verandert dit, nu er programma’s zijn die wiskunde boeiend en aanschouwelijk kunnen maken. Het zal echter langzaam gaan. Wiskundepakketten lijken voorlopig alleen gereedschap voor wetenschappers, ingenieurs en wiskundigen, en die maken er gretig gebruik van. ” (uit PCM oktober 1993 [16])
1.1
Computeralgebra: waarover gaat het?
Het volgende voorbeeld is een werksessie op de computer, gebruikmakend van Maple (comp1.mws) 1
2
HOOFDSTUK 1. INLEIDING >
taylor( exp(x), x=0, 4 ); 1+x+
>
1 2 1 3 x + x + O(x4 ) 2 6
taylor(sinh(sin(x))-sin(sinh(x)),x=0,17); 1 7 1 5699 x − x11 − x15 + O(x17 ) 45 1575 1277025750
>
int(1/(x^2+1)^4,x); 5 5 5 x x x 1 + + + arctan(x) 6 (x2 + 1)3 24 (x2 + 1)2 16 x2 + 1 16
>
diff(1/6*x/(x^2+1)^3+5/24*x/(x^2+1)^2+5/16*x/
>
(x^2+1)+5/16*arctan(x),x);
1 1 x2 5 x2 x2 5 5 5 1 1 − − + − + 6 (x2 + 1)3 (x2 + 1)4 24 (x2 + 1)2 6 (x2 + 1)3 8 x2 + 1 8 (x2 + 1)2
>
simplify(%); 1 (x2 + 1)4
De gebruikersinvoer is aangegeven met een >. We beschouwen een beperkte Taylorreeks, berekenen een integraal en controleren of de afgeleide de oorspronkelijke functie teruggeeft. Op het scherm krijgen we het volgende resultaat:
1.2. WETENSCHAPPELIJKE EN ALGEBRA¨ISCHE BEREKENINGEN
3
Al deze berekeningen kunnen door ieder student wiskunde en informatica uitgevoerd worden, maar ze zijn niet eenvoudig en een fout is vlug gemaakt. Het is nog altijd niet algemeen geweten dat dit soort berekeningen evengoed binnen de mogelijkheden van de computer liggen als numerieke berekeningen. Het is de bedoeling om in deze cursus een aantal van de mogelijkheden te bespreken, te demonstreren en de principes te behandelen die deze niet-numerieke berekeningen mogelijk maken.
1.2
Wetenschappelijke en algebra¨ısche berekeningen
Van bij de start van de electronische berekeningen was het belangrijkste gebruik van de computer voorbehouden aan numerieke berekeningen. Daarbij namen al gauw de industri¨ele berekeningen de belangrijkste plaats in, maar bleven wetenschappelijke toepassingen de indrukwekkendste die steeds de krachtigste computers vereisten. Een belangrijk facet aan de “wetenschappelijke berekeningen” is hun dubbelzinnig karakter. V´o´or de computers verschenen bestonden de berekeningen uit een mengeling van numerieke berekeningen en van wat doorgaans “algebra¨ısche berekeningen” genoemd worden. Een van de indrukwekkendste berekeningen met potlood en papier is uitgevoerd op het gebied van de sterrenkunde: Delauny zette er 10 jaar over om de baan van de maan te bepalen, en dan nog eens 10 jaar om dit te verifi¨eren. Het resultaat werd gepubliceerd in 1860 [5] en bestaat voor het grootste deel uit formules (128 bladzijden in Hoofdstuk 4 van zijn boek). Toen de computers verschenen werden numerieke berekeningen veel gemakkelijker en het werd gebruikelijk om de moeilijke algebra¨ısche manipulaties te vervangen door lange numerieke berekeningen. “Wetenschappelijke berekeningen” werden synoniem voor uitgebreide numerieke berekeningen.
1.3
Computeralgebra
Numerieke berekeningen konden evenwel de “algebra¨ısche berekeningen nooit volledig verdringen. Al was het maar omdat triviale numerieke programma’s vaak een herformulering van de formules vergen waarop het algoritme gebaseerd is. De eerste pogingen om hierbij een computer in te schakelen dateren reeds van 1953, en al vlug werd de nood aangevoeld om te komen tot een kompleet systeem dat zowel de numerieke als de niet-numerieke data zou kunnen voorstellen samen met een taal die het mogelijk zou maken deze data te manipuleren.
4
HOOFDSTUK 1. INLEIDING
Uit deze pogingen is een discipline ontstaan waarvan de naam gevarieerd heeft van symbolische en algebra¨ısche berekeningen, symbolische en algebra¨ısche manipulatie om tenslotte uit te monden in wat nu Computeralgebra noemt naar het Engels Computer Algebra terwijl het in het Frans Calcul Formel genoemd wordt.
1.4
Overzicht van Computeralgebrasystemen
Computeralgebrasystemen zijn voortdurend in evolutie. Een overzicht afdrukken heeft derhalve niet veel zin meer. We verwijzen hier naar twee internetlinks waar recente informatie te vinden is: http://www.SymbolicNet.org/ http://www.riaca.win.tue.nl/CAN/ Om een idee te geven van de huidige “general purpose” systemen verwijzen we naar de lijst die nu terug te vinden is onder “Systems and Packages” op deze laatste site: ALJABR AXIOM Derive Fermat FORM GNU-calc Descendants of M.I.T. Macsyma Macsyma (R) Magma Maple Mathcad Mathematica MathView (also known as MathPlus and Theorist) MAXIMA MuPAD PARAMAX PUNIMAX REDUCE Schoonschip Scilab SENAC Solutions VAXIMA In de “special purpose” reeks vinden we:
1.4. OVERZICHT VAN COMPUTERALGEBRASYSTEMEN
5
(Non)Commutative Algebra & Algebraic Geometry Albert Bergman CALI CASA CLICAL CLIFFORD CoCoA FELIX GANITH GB The Grassman package GRB GROEBNER (from RISC-Linz) GROEBNER (REDUCE package) IDEALS KAN Macaulay Macaulay 2 MAS NCALGEBRA SACLIB Singular WU
Differential Equation Solvers & Tools A review of ODE Solvers List of Symmetry Programs (PostScript, gzip-compressed) CONTENT: Dynamical System Software CRACK DELiA DESIR Diffgrob2 (Manual: PostScript, gzip-formatted) DIMSYM FIDE ODEtools (symmetry methods) LIE (A.K. Head, in MuMath) liesymm ODESOLVE PDELIE PDEtools package Phaser: an Animator/Simulator for Dynamical Systems for IBM PC’s The Poincare package
6
HOOFDSTUK 1. INLEIDING SPDE StandardForm SYM_DE SYMMGRP.MAX (Manual: PostScript, gzip-formatted)
Finite Element Analysis PDEase SENAC/FEM (PostScipt, gzip-formatted); see also SENAC
Group Theory ANU Software Cayley CHEVIE GAP GRAPE GUAVA LiE LIE (REDUCE package) Magma MeatAxe The Magnus system for exploring infinite groups Schur Sisyphos Symmetrica Weyl Groups and Hecke Algebras
High Energy Physics FeynArts Foam FORM The Partials package Schoonschip Tracer
Number Theory Galois
1.5. AUTOMATISCHE BEWIJSVOERING
7
KANT KASH LiDIA MALM NTL Numbers PARI SIMATH
Tensor Calculus CARTAN Classi Eins GRTensor MathTensor Redten Ricci SHEEP STENSOR Tensors in Macsyma (R) Tools of Tensor Calculus
Computeralgebra programma’s kunnen het ingedeeld worden in twee groepen: onderwerp-gerichte en algemene. Onze belangstelling gaat in deze cursus uit naar deze laatste, maar het is belangrijk op te merken dat onderwerp-gerichte computeralgebra een belangrijke rol spelen in de ontwikkeling van specifieke onderzoeksgebieden. GAPen Magma die in het overzicht geklasseerd zijn bij de Groepentheorie worden nog verder besproken in de parallelle sessies van dit opleidingsonderdeel.
1.5
Automatische Bewijsvoering
Als we in computer algebra “symbolische manipulatie” centraal stellen, moeten we in deze context ook de zogenaamde “THEOREM PROVERS” of Automatische Bewijsvoeringssysteem vermelden. Feit is dat op dit ogenblik weinig systemen commercieel uitgebaat worden (dit is het geval voor NUPRL, ICL HOL, Mural) en bovendien zijn het geen systemen die het grote publiek kunnen aanspreken. Dit maakt dus onbekend en derhalve onbemind. Systemen als The Boyer-Moore theorem prover en OTTER zijn (in beperkte kring) bekende projecten die hun sporen verdiend hebben als pionier op het gebied van
8
HOOFDSTUK 1. INLEIDING
automatische bewijsvoering. Hun resultaten zijn evenwel niet commercieel genoeg om ze naast een Mathematica te kunnen plaatsen. Bovendien stellen we vast dat de meeste wetenschappers, en in het bijzonder de wiskundigen erg sceptisch staan t.o.v. het idee automatiseren van het bewijsvoeringsproces. Dat het mogelijk is bewijzen bovenvermelde systemen, en dat het nuttig is weten de soft- en hardware-ingenieurs die systemen als NUPRL, ICL HOL, WORKBENCH, B theorem Prover, Mural dankbaar inschakelen bij het ontwerpen van geverifieerde soft- en hardware. We kunnen de bovenvermelde lijst van automatische bewijsvoeringssystemen nog aanvullen met namen als OBJ, ISABELLE, METEOR, PVS, SHUNYATA, RRL, KARNAK, Analytica .... Een beschrijving van deze systemen zou ons zeker te ver leiden. Wel willen we terloops opmerken dat Analytica een project is dat ontwikkeld werd in de Mathematica omgeving... Gelet op een aantal van de bovenstaande bedenkingen valt Automatische Bewijsvoering buiten het kader van deze kursus. We verwijzen de ge¨ınteresseerde lezer naar de referenties ([1],[7],[9],[12]) die in de bibliografie zijn opgenomen.
1.5. AUTOMATISCHE BEWIJSVOERING
9
10
HOOFDSTUK 1. INLEIDING
Hoofdstuk 2 Hoe gebruiken we Computeralgebra 2.1
Inleiding
Het is een algemeen verschijnsel dat iemand die voor de eerste keer een computeralgebra pakket gedemonstreerd ziet, de indruk krijgt dat het enorm krachtig is. Het is inderdaad een feit dat deze programma’s heel wat mogelijkheden hebben, maar ze hebben zeker ook hun beperkingen. Deze pakketten kunnen met breuken rekenen met oneindige precisie, ze kunnen algebra¨ısche vereenvoudigingen doorvoeren, haken uitwerken, factorizeren, grootste gemene delers zoeken en nog een hele boel bewerkingen die we terugvinden in algebra cursussen. Daarnaast hebben ze een aantal programmeermogelijkheden die hun kracht nog verhogen. Een aantal programma’s kunnen uitdrukkingen verwerken die miljoenen tekens bevatten in een aantal seconden, berekeningen die met pen en papier jaren zouden vragen. Daarnaast kunnen deze programma’s differenti¨eren en integreren. Wat dit laatste betreft, bestaan er grote klassen van functies waarvoor er algoritmen bestaan die integratie mogelijk maken waarvan het resultaat verschillende gedrukte bladzijden kan vullen. Het zijn dergelijke voorbeelden die het idee versterken dat een computeralgebrasysteem almachtig is. Het is evenwel niet moeilijk om een voorbeeld te vinden dat een doorsnee wiskundige zonder problemen kan oplossen, terwijl een computeralgebraprogramma niet in staat blijkt de oplossing te vinden. De gevorderde gebruiker gaat dan vrij vlug ervaren, dat computeralgebra zijn beperkingen heeft. Te weinig geheugen, te veel tijd gebruiken en op een gemeenschappelijk systeem het hele netwerk vertragen, zijn veel gehoorde klachten. In die omstandigheden is het nuttig en wenselijk enig inzicht te hebben in de implementatie van de algoritmen die aan de basis liggen van de computeralgebra, teneinde te vermijden dat men onmogelijke problemen aan het programma gaat voorleggen. 11
12
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
2.2
Een aantal mogelijkheden
Ruwweg zou men kunnen stellen dat computeralgebrasystemen ontworpen zijn voor het manipuleren van alledaagse formules uit de wiskunde. Daarbij merken we op dat de formules zoals die doorgaans ge¨ımplemeteerd worden in klassieke programmeertalen (C,Pascal,Fortran,...) enkel ontworpen zijn voor numerieke evaluatie, aangezien aan de variabelen en parameters vooraf een type-declaratie moet worden meegegeven die numeriek is. In een taal die “algebra¨ısche manipulaties” toelaat, kan de zelfde formule zowel numeriek als symbolisch behandeld worden. We kunnen bevoorbeeld met ´e´en commando vragen de volgende uitdrukkingen te ontbinden in partieelbreuken x2 − 5 . x(x − 1)4 In Maple (comp22.mws) krijgen we: > (x^2-5)/(x*(x-1)^4); x2 − 5 x (x − 1)4 >
convert(%,parfrac,x); 5 4 6 5 5 − − + − + 4 3 2 x (x − 1) (x − 1) (x − 1) x−1
We kunnen met hetzelfde commando evengoed de volgende uitdrukkingen ontbinden: x+a x(x − b)(x2 + c) hetgeen ons in Maple het volgende resultaat geeft: > (x+a)/(x*(x-b)*(x^2+c)); x+a x (x − b) (x2 + c) >
convert(%,parfrac,x); −
a b+a −b c − c a + x a b − x c + + 2 b c x b (b + c) (x − b) c (b2 + c) (x2 + c)
>
convert((-b*c-c*a+x*a*b-x*c)/(c*(b^2+c)*(x^2+
>
c)),parfrac,x);
2.3. SYNTAX VAN DE GEASSOCIEERDE TALEN
13
−b c − c a + x a b − x c c (b2 + c) (x2 + c)
Over het algemeen voldoen computeralgebrasystemen aan de volgende vereisten: • ze stellen een basisstel commando’s beschikbaar die een aantal vervelende berekeningen moeten mogelijk maken op de computer • ze voorzien in een programmeertaal die toelaten om eigengedefinieerde commando’s en procedures aan het systeem toe te voegen.
2.3
Syntax van de geassocieerde talen
Er is een belangrijk verschil tussen de verschillende systemen. Daarbij merken we op dat MACSYMA, REDUCE, Maple, Mathematica sterk aanleunen bij klassieke programmeertalen zoals Pascal en Fortran.
2.4
Toepassingsgebieden van de bestaande systemen
Het is wel nuttig om de toepassingsgebieden van de algemene systemen hier even op een rijtje te zetten, ze geven meteen ook aan waar we ons voor het vervolg van de cursus zullen mee bezig houden. • Bewerkingen op gehele getallen, rationale getallen, re¨ele en complexe getallen, met een onbeperkte nauwkeurigheid. • Bewerkingen op polynomen in een of meerdere veranderlijken en op rationale vormen. D.w.z. de triviale rationale bewerkingen, berekenen van de GGD, en factorizatie. • Bewerkingen op matrices zowel met numerieke als niet-numerieke componenten. • Eenvoudige analyse: differenti¨eren, reeksontwikkelingen, Pad´e benaderingen, Fourier ontbindingen,... • Manipulatie van formules: substituties, selecteren van delen van een formule, numerieke evaluatie,...
14
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
Vertrekkende van deze gemeenschappelijke basis, en afhankelijk van het ontwikkelingsstadium van de pakketten, hebben we nog • Oplossen van vergelijkingen. • Formele integratie. • Berekening van limieten. • Oplossen van differentiaalvergelijkingen.
2.5
2.5.1
De mogelijkheden van Maple op een aantal voorbeelden Eenvoudige bewerkingen op getallen
Vooreerst merken we op dat elke lijn moet eindigen op een “;” (resultaat tonen) of een “:” (berekenen, maar resultaat niet tonen). Verder zien we dat “factoriseren” niet tot het kernpakket van Maple behoort, zodat we met readlib(ifactors): deze functie eerst moeten opladen. (comp261.mws) > 123456789123456789*123456789+98765554321123456789;
15241677530986420873647310 >
100!;
93326215443944152681699238856266700490715968264381621468592963895\ 21759999322991560894146397615651828625369792082722375825118521091\ 6864000000000000000000000000 >
2^63-1; 9223372036854775807
>
ifactors(2^63-1); ifactors(9223372036854775807)
> >
readlib(ifactors): ifactors(2^63-1);
2.5. DE MOGELIJKHEDEN VAN MAPLE OP EEN AANTAL VOORBEELDEN15
[1, [[7, 2], [73, 1], [127, 1], [337, 1], [649657, 1], [92737, 1]]] >
(7/8)^99;
46206807280353685590637825272860240155102902841494648584769933305\
5955922805275437143 25462949704181076078355571105117227013143\ 3549208242031329517556169297662470417088272924672
Bij de verwerking van de klassieke constanten, zien we dat in Maple Pi gebruikt wordt. Verder merken we dat de constante e niet aanvaard wordt als input, maar wel gebruikt wordt als output. (comp261b.mws) >
Pi; π
>
Digits:=6; Digits := 6
>
evalf(Pi); 3.14159
>
Digits:=100; Digits := 100
>
evalf(Pi);
3.1415926535897932384626433832795028841971693993751058209749445923\ 07816406286208998628034825342117068 >
evalf(e); e
>
evalf(exp(1));
16
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
2.7182818284590452353602874713526624977572470936999595749669676277\ 24076630353547594571382178525166427 >
limit((1+1/n)^n,n=infinity);
e >
evalf(limit((1+1/n)^n,n=infinity));
2.7182818284590452353602874713526624977572470936999595749669676277\ 24076630353547594571382178525166427
2.5.2
Complexe getallen
(comp262.mws) > z1:=4+19*I; z1 := 4 + 19 I >
z2:=3+17*I; z2 := 3 + 17 I
>
z1+z2; 7 + 36 I
>
z1*z2; −311 + 125 I
>
z1/z2; 11 335 − I 298 298
>
abs(z1);
2.5. DE MOGELIJKHEDEN VAN MAPLE OP EEN AANTAL VOORBEELDEN17 √ >
377
abs(z1/z2); 1 √ 112346 298
2.5.3
Polynomen en Rationale vormen
(comp263.mws) >
2*x^3+7*x+9; 2 x3 + 7 x + 9
>
factor(%); (x + 1) (2 x2 − 2 x + 9)
>
(-2*z-y+x)*(a*x^2-y^3*z)*(b*z^2+y); (−2 z − y + x) (a x2 − y 3 z) (b z 2 + y)
>
expand(%);
−x y 3 b z 3 + y 4 b z 3 + 2 y 3 b z 4 + x3 a b z 2 − x2 y a b z 2 − 2 x2 a b z 3 − x y 4 z + y 5 z + 2 y 4 z 2 + x3 y a − x2 y 2 a − 2 x2 y a z >
factor(%); (−2 z − y + x) (a x2 − y 3 z) (b z 2 + y)
>
F:=
>
(a,b,x,y,z)->(2*x^3+7*x+9)/((x-y-2*z)*(y+b*z^2)*(a*x^2-y^3*z)); 2 x3 + 7 x + 9 F := (a, b, x, y, z) → (x − y − 2 z) (y + b z 2 ) (a x2 − y 3 z)
18
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA >
eval(F(1,1,x,1,1)); 1 2 x3 + 7 x + 9 2 (x − 3) (x2 − 1)
>
F(1,1,x,-1,-1);
Error, (in F) division by zero
2.5.4
matrices
(comp264.mws) >
A:=[[1,2,3],[4,5,6],[7,8,9]]; A := [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>
A:=linalg[matrix](3,3,[1,2,3,4,5,6,7,8,9]);
1 2 3 A := 4 5 6 7 8 9 >
linalg[det](A); 0
>
X:=linalg[matrix](3,1,[x,y,z]);
x X := y z >
B:=linalg[matrix](3,1,[1,k,0]);
1 B := k 0
2.5. DE MOGELIJKHEDEN VAN MAPLE OP EEN AANTAL VOORBEELDEN19 >
linalg[multiply](A,X)=linalg[matrix](3,1,[1,k
>
,0]);
1 x+2y +3z 4x+5y + 6z = k 0 7x+8y + 9z >
evalm(%);
x + 2. y + 3. z 1. 4. x + 5. y + 6. z = k 7. x + 8. y + 9. z 0 >
evalm(A);
1 2 3 4 5 6 7 8 9 >
evalm(B);
1 k 0 >
linalg[linsolve](A,B);
>
A1:=linalg[matrix](2,3,[1,2,3,4,5,6]); A1 :=
>
"
1 2 3 4 5 6
B1:=linalg[matrix](2,1,[1,k]); B1 :=
>
"
1 k
k:=’k’; k := k
>
B1:=linalg[matrix](2,1,[1,k]);
#
#
20
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
B1 :=
>
"
1 k
#
linalg[linsolve](A1,B1); 5 2 − 3 + 3 k + t 11 4 1 3 − 3 k − 2 t 11 t 11
>
linalg[trace](A); 15
>
linalg[ratform](A);
0 0 0 1 0 18 0 1 15
2.5.5
Differenti¨ eren
(comp265.mws) >
2*x/((x+1)*(x^2-x+1));
2
>
x (x + 1) (x2 − x + 1)
int(%,x); √ 2 1 2√ 1 3 arctan( (2 x − 1) 3) − ln(x + 1) + ln(x2 − x + 1) + 3 3 3 3
>
2/3*3^(1/2)*arctan(1/3*(2*x-1)*3^(1/2))+1/3*l
>
n(x^2-x+1)-2/3*ln(x+1);
2.5. DE MOGELIJKHEDEN VAN MAPLE OP EEN AANTAL VOORBEELDEN21
√ 2 1 2√ 1 − ln(x + 1) + ln(x2 − x + 1) + 3 arctan( (2 x − 1) 3) 3 3 3 3 >
diff(%,x); −
>
2 1 1 2x− 1 4 + + 2 3 x+1 3 x −x+1 3
1+
1 (2 x − 1)2 3
simplify(%); 2
2.5.6
1
x (x + 1) (x2 − x + 1)
Goniometrische functies
(comp266.mws) > sin(x+y); sin(x + y) >
expand(%); sin(x) cos(y) + cos(x) sin(y)
>
cos(4*z); cos(4 z)
>
expand(%); 8 cos(z)4 − 8 cos(z)2 + 1
>
sin(x)*sin(y); sin(x) sin(y)
>
combine(%,trig);
22
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
1 1 cos(x − y) − cos(x + y) 2 2 >
readlib(trigsubs); proc(s, f ) . . . end
>
trigsubs(sin(x)*sin(y)); 1 1 [ cos(−x + y) − cos(x + y)] 2 2
>
sin(z)^3; sin(z)3
>
combine(%,trig); 3 1 − sin(3 z) + sin(z) 4 4
>
trigsubs(sin(z)^3);
Error, (in trigsubs)
2.5.7
powers of 1 or 2 only
Integratie
(comp267.mws) >
2*x/((x+1)*(x^2-x+1)); 2
>
x (x + 1) (x2 − x + 1)
int(%,x); √ 2 1 2√ 1 − ln(x + 1) + ln(x2 − x + 1) + 3 arctan( (2 x − 1) 3) 3 3 3 3
>
int(%%,x=0..1);
23
2.6. WAAROM MAPLE?
2 2√ − ln(2) + 3π 3 9
De bovenstaande voorbeelden vormen maar een proefje van de mogelijkheden van computeralgebrasystemen in het algemeen en van Maple in het bijzonder.
2.6
Waarom Maple?
In de inleiding hebben we aangegeven dat er heel wat systemen beschikbaar zijn. Waarom dan Maple ter ondersteuning van deze cursus? • De universitaire licentie Maple is betaalbaar voor de universiteit. • De studenten worden in de mogelijkheid gesteld om Maple op een rechtmatige manier aan te schaffen aan voordelige voorwaarden. • De resultaten van Maple zijn meestal betrouwbaar. Dit kan niet altijd gezegd worden van andere computeralgebrasystemen. • De interface van Maple is aangenaam.
2.7
Opgave
Bespreek twee pakketten waarvan de informatie terug te vinden is op het internet (met uitzondering van Derive en Mathematica). Vergelijk de resultaten van eenvoudige berekeningen met deze van Maple.
24
HOOFDSTUK 2. HOE GEBRUIKEN WE COMPUTERALGEBRA
Hoofdstuk 3 Het probleem van de datarepresentatie 3.1
Inleiding
In dit hoofdstuk behandelen we een aantal basisbegrippen die afkomstig zijn uit de algebra en die van fundamenteel belang zijn voor de ontwikkeling van algoritmen in computeralgebrasystemen. Het onderscheid tussen de verscheidene computeralgebrasystemen ontstaat precies door keuzes die gemaakt worden in de te behandelen structuren en in de voorstelling van deze structuren.
3.2
Structuren
3.2.1
Σ-structuur
Elk computeralgebrasysteem omvat een aantal basisstructuren. De formele beschrijving van deze structuren is weer te geven aan de hand van het begrip meersoortige Σ-structuur. Definitie signatuur Zij S een niet-ledige verzameling van soorten, dan is een S-soortige signatuur een verzameling Σ = {Σw,s |w ∈ S ∗ , s ∈ S} Daarbij is ∗
S =
∞ [
n=0
25
Sn
26
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
met S 0 = {φ}, S n = {w = s1 s2 . . . sn |si ∈ S}
φ wordt ook nog het ledig woord genoemd, en w = s1 s2 . . . sn heten woorden van de lengte n. De elementen fw,s van Σw,s worden de operatoren van de signatuur genoemd. hw, si heet de rang van de operator. De lengte n van w, ook nog genoteerd als |w| is de ariteit van de operator. s1 s2 . . . sn geeft aan dat de n argumenten waarop de operator zal inwerken resp. van de soort s1 , s2 . . . sn moeten zijn, terwijl de s uitdrukt dat de waarde die de operator zal aannemen van de soort s zal zijn. Operatoren met rang hφ, si worden ook nog constanten van de soort s genoemd. Definitie Σ-structuur Zij Σ een S-soortige signatuur, dan bestaat een Σ-structuur uit een S-soortige verzameling A = {As |s ∈ S}
die met elke soort s ∈ S een verzameling van elementen As laat corresponderen. In de computeralgebra zullen deze verzamelingen doorgaans niet ledig zijn, daar waar dit in de formele behandeling van het begrip Σ-structuur niet uitgesloten is. Verder merken we op dat voor verschillende soorten si en sj de corresponderende verzamelingen Asi en Asj niet noodzakelijk disjunct moeten zijn. Daarnaast correspondeert er met elk element fw,s uit Σw,s een operator Fw,s : Aw 7→ As . - Als w 6= φ is Aw de notatie voor As1 × As2 × . . . × Asn , het cartesisch product van As1 , As2 , . . . , Asn . M.a.w. is Fw,s een n-aire operator die inwerkt op n argumenten die resp. genomen worden uit As1 , As2 , . . . , Asn en waarvan het resultaat een element uit As is. - Als w = φ moet die notatie gelezen worden als Als Fφ,s : 7→ As . Dit is te interpreteren als het uitkiezen van een vast element in As . Fφ,s wordt dan ook een constante van de soort s in de structuur genoemd. Opmerking: • We merken op dat doorgaans in de praktijk er geen onderscheid gemaakt wordt tussen de notatie van de elementen fw,s in de signatuur en de notatie van de corresponderende operatoren Fw,s in de Σ-structuur. • Een constante Fφ,s van de soort s zullen we doorgaans kortweg aanduiden als “een constante cs van de soort s”, of als “een constante c ∈ As ” Voorbeelden
27
3.2. STRUCTUREN
• Zij S = {s} en Σ = {Σss,s } dan hebben we te maken met een ´e´ensoortige signatuur die enkel binaire bewerkingen omvat. Klassieke voorbeelden daarvan signatuur: basisstructuur voor Σss,s = {+} additieve semigroep Σss,s = {·} multiplikatieve semigroep • Zij S = {s} en Σ = {Σss,s , Σφ,s } dan hebben we te maken met een ´e´ensoortige signatuur die naast de binaire bewerkingen ook nog constanten omvat. Klassieke voorbeelden daarvan signatuur: basisstructuur voor Σss,s = {+}, Σφ,s = {0} additieve mono¨ıde Σss,s = {·}, Σφ,s = {1} multiplikatieve mono¨ıde • Zij S = {s} en Σ = {Σss,s , Σs,s , Σφ,s } dan hebben we te maken met een ´e´ensoortige signatuur die naast de binaire bewerkingen en constanten ook nog unaire bewerkingen omvat. Klassieke voorbeelden daarvan signatuur: Σss,s = {+}, Σs,s = {−}, Σφ,s = {0} Σss,s = {·}, Σs,s = { −1 }, Σφ,s = {1} Σss,s = {+, ·}, Σs,s = {−, −1 }, Σφ,s = {0, 1}
basisstructuur voor additieve groep multiplikatieve groep ring,veld
• De enige courante meersoortige structuur buiten de informatica is de basisstructuur voor de vectorruimten, we hebben daar twee soorten S = {s, v}. s voor de scalairen en v voor de vectoren. Gelet op het feit dat de scalairen uit een veld komen hebben we zoals hierboven reeds aangegeven: Σss,s = {+, ·}, Σs,s = {−,
−1
}, Σφ,s = {0, 1}
Daarnaast hebben we voor de vectoren een additieve groep: Σvv,v = {+}, Σv,v = {−}, Σφ,v = {~0} Daarbij merken we reeds op dat de + in twee betekenissen gebruikt wordt, hetgeen ook in de computeralgebra gebruikelijk is. Gelet op het feit de optelling van scalairen duidelijk iets anders is dan de optelling van vectoren, zal men uit de soort van de argumenten moeten afleiden over welke bewerkingen het gaat Tenslotte hebben we nog een bewerking die de scalairen gaat koppelen aan vectoren om als resultaat een vector te geven. Doorgaans wordt in de wiskunde voor deze bewerking geen notatie ingevoerd, men zet gewoon de scalair v´o´or de vector. Hier zullen we die operator aangeven met een : Σsv,v = { }
28
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
Opmerking: prefix- versus infix-notatie Tot hiertoe hebben we niet verteld hoe we de inwerking van een operator op zijn argumenten zullen noteren. In het geval van een n-aire operator ligt de notatie: fw,s (as1 as2 . . . asn ) voor de hand, een dergelijke notatie noemt men prefix-notatie. Maar in het geval van de binaire operatoren die we in de bovenvermelde voorbeelden hebben aangehaald wordt doorgaans de infix-notatie gebruikt. Deze klassieke bewerkingen worden uiteraard in alle computeralgebrasystemen als infixoperator gebruikt. Een aantal systemen laten zelfs toe eigengedefinieerde infix-operatoren in te voeren.
3.2.2
Axioma’s
De structuren die we tot hiertoe als voorbeeld geciteerd hebben, verdienen slechts de naam die we daaraan gegeven hebben op voorwaarde dat ze een aantal axioma’s vervullen. De basisaxioma’s die gebruikt worden in de wiskunde, kunnen we als volgt samenvatten: a · (b · c) = (a · b) · c a + (b + c) = (a + b) + c 1·a=a·1=a 0+a=a+0=a a · a−1 = a−1 · a = 1 a + (−a) = (−a) + a = 0 a·b=b·a a+b=b+a a · (b + c) = (a · b) + (a · c) (a + b) · c = (a · c) + (b · c) A6 : a · b = a · c ∧ a 6= 0 ⇒ b = c A60 : a · b = 0 ⇒ a = 0 ∨ b = 0 A1 : A10 : A2 : A20 : A3 : A30 : A4 : A40 : A5 :
(Associativiteit) (Identiteit) (Neutraal) (Invers) (Symmetrisch element) (Commutativiteit)
(Distributiviteit) (Schrappingswet) (Geen nuldelers)
Bij het axioma A1 (A10 ) worden de variabelen a, b, c als universeel gekwantificeerd beschouwd. D.w.z. dat we A1 (A10 ) zullen lezen als A100 ∀a∀b∀c a · (b · c) = (a · b) · c A1000 ∀a∀b∀c a + (b + c) = (a + b) + c Het axioma A2 resp. A20 wordt in de wiskunde meestal als volgt gesteld: A200 : ∃1∀a 1 · a = a · 1 = a A2000 : ∃0∀a 0 + a = a + 0 = a
3.2. STRUCTUREN
29
Voor een wiskundige is het vaak voldoende te weten dat er een element 1 (0) bestaat dat aan de voorwaarden van A2 (resp. A20 ) voldoet. Voor een computeralgebrasysteem moet evenwel het element dat bovenvermelde eigenschap heeft, aangewezen worden. Gelet op het feit dat in een structuur met een binaire bewerking · (+) het element 1 (0) dat aan A2 (A20 ) voldoet uniek 1 is, kan men 1 (resp. 0) als een constante van de Σ-structuur beschouwen, en eisen dat aan A2 (resp. A20 ) voldaan is. Axioma A3 (A30 ) kent men ook in de vorm:
A300 : ∀a∃a−1 a · a−1 = a−1 · a = 1 A3000 : ∀a∃ − a a + (−a) = (−a) + a = 0
Men toont aan dat voor een associatieve · voor elke a de bijhorende a−1 uniek is. Bewijs: Stel a0 een element z´o dat a · a0 = a0 · a = 1, dan is a−1 = a−1 · 1 = a−1 · (a · a0 ) = (a−1 · a) · a0 = 1 · a0 = a0
Analoog voor −a. Derhalve is het met het oog op een implementatie in een computeralgebrasysteem aangewezen −1 resp. − als unaire operatoren in Σs,s te beschouwen.
3.2.3
Algebra¨ısche structuren
In de volgende tabel geven we een overzicht van de voornaamste algebra¨ısche structuren met hun corresponderende axioma’s. De signatuur van de betreffende structuren is dan af te leiden uit de gebruikte operatoren in de axioma’s
1
Stel e een tweede element met dezelfde eigenschap, dan is e = e · 1 = 1
30
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
Naam: semigroep mono¨ıde groep abelse groep ring
Axioma’s A1 A1; A2 A1; A2; A3 A10 ; A20 ; A30 ; A40 A10 ; A20 ; A30 ; A40 A1; A2 A5 commutatieve ring (R; +, −, 0, ·, 1) A10 ; A20 ; A30 ; A40 A1; A2; A4 A5 integriteitsgebied (D; +, −, 0, ·) A10 ; A20 ; A30 ; A40 A1; A2; A4 A5; A6; A60 −1 veld (F ; +, −, 0, ·, , 1) A10 ; A20 ; A30 ; A40 A1; A2; A4; A3 voor F − {0} A5 lineaire ruimte (F ; +, −, 0, ·, −1 , 1; veld V ; +, −, ~0) abelse groep
3.3
Notatie: (S; ·) (S; ·, 1) (G; ·, −1 , 1) (G; +, −, 0) (R; +, −, 0, ·, 1)
Voorstelling van gehele getallen
Gehele getallen liggen aan de basis van de wiskunde, en dus ook van de computeralgebra. “God heeft de gehele getallen geschapen, de rest is mensenwerk” is een uitspraak van de grote wiskundige Kronecker. “Mensen” hebben blijkbaar wel problemen om gehele getallen te implementeren. In de meeste programmeertalen vormen de gehele getallen een eindige verzameling van de gedaante {−231 , . . . , 231 − 1}, wat te maken heeft met de lengte van het computerwoord (32 bits) dat gebruikt wordt voor de binaire voorstelling van de gehele getallen. Daarbij valt op te merken dat gebruikers van klassieke programmeertalen doorgaans niet ge¨ınteresseerd zijn in die gehele getallen. De opmerking dat men slechts met “kleine” gehele getallen werkt is voor een wiskundige zeker niet waar. Een klassiek probleem is b.v. het zoeken van de GGD van twee polynomen. Beschouwen we als voorbeeld de volgende polynomen over Z: A(x) := 7x7 + 2x6 − 3x5 − 3x3 + x + 5 B(x) := 9x5 − 3x4 − 4x2 + 7x + 7 Stel nu dat we de Grootste Gemene Deler van die twee polynomen wensen te bere-
3.3. VOORSTELLING VAN GEHELE GETALLEN kenen: GGD(A(x), B(x), x) bekijken: (comp33.mws)
2
31
dan kunnen we daarvoor de volgende Maple-output
Bepalen van de grootste gemene deler van twee polynomen (over de verzameling van de
rationale getallen) : het commando gcd >
A := 7*x^7+2*x^6-3*x^5-3*x^3+x+5; A := 7 x7 + 2 x6 − 3 x5 − 3 x3 + x + 5
>
B := 9*x^5-3*x^4-4*x^2+7*x+7; B := 9 x5 − 3 x4 − 4 x2 + 7 x + 7
>
gcd(A,B); 1
Door gebruik te maken van het commando gcdex en het toevoegen van de namen s en t, verkrijgen we naast de grootste gemene deler eveneens de polynomen s en t (zie uitgebreid algoritme van Euclides) zodanig dat ggd(a, b) = a s + b t. >
gcdex(A,B,x,’s’,’t’); 1
>
s;
99234776351 91393527762 81032153622 2 32419000800 3 − x+ x − x 1053779178157 1053779178157 1053779178157 1053779178157 62207036802 4 + x 1053779178157 >
t;
29248113077 2 28553204849 36664026318 4 79657899486 + x − x− x 1053779178157 1053779178157 1053779178157 1053779178157 8545366928 48383250846 6 4736757838 + x3 − x − x5 1053779178157 1053779178157 1053779178157 2
zie 4.2 GGD van polynomen over Q, pg. 83
32
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
Controle : >
A*s+B*t;
99234776351 91393527762 − x 1053779178157 1053779178157 32419000800 3 62207036802 4 81032153622 2 x − x + x )+ + 1053779178157 1053779178157 1053779178157 79657899486 29248113077 2 28553204849 (9 x5 − 3 x4 − 4 x2 + 7 x + 7)( + x − x 1053779178157 1053779178157 1053779178157 36664026318 4 8545366928 48383250846 6 4736757838 − x + x3 − x − x5 ) 1053779178157 1053779178157 1053779178157 1053779178157
(7 x7 + 2 x6 − 3 x5 − 3 x3 + x + 5)(
>
expand(%); 1
Dan zien we daarbij het geheel getal 1.053.779.178.157 verschijnen. Als we dit vergelijken met 231 = 2.147.483.648, hetgeen overeenkomt met de grootste “longinteger” in Turbo Pascal, wordt duidelijk dat de klassieke representatie van gehele getallen niet zullen volstaan. Een computeralgebrasysteem moet dus in staat zijn elk natuurlijk getal voor te stellen. Een bruikbare voorstelling vinden we door een datastructuur te beschouwen die steunt op de gebruikelijke “singleprecisie” gehele getallen. Multiprecisie geheel getal We noemen deze datastructuur een “multiprecisie geheel getal”. Ze bestaat uit lineaire lijst
(d0 , d1 , d2, . . . , dn−1 ) van singleprecisie getallen en een teken s dat de waarde +1 of −1 kan aannemen. Dit stelt dan het volgende geheel getal voor: s
n−1 X
di β i
i=0
waarbij β een voorafgedefinieerd singleprecisie getal is.
33
3.3. VOORSTELLING VAN GEHELE GETALLEN
Het teken wordt doorgaans gestockeerd in de lijst (d0 , d1 , d2 , . . . , dn−1), bijvoorbeeld als teken van d0 β wordt het grondtal van voorstelling genoemd. In principe kan dit elk geheel getal groter dan 1 zijn waarvoor β − 1 nog een singleprecisie geheel getal is. In de praktijk worden er twee oplossingen genomen: i) β zodanig dat β − 1 het grootste positief singleprecisie geheel getal is. B.v. β = 231 als de woordlengte 32 bits is. ii) β = 10p met p zo groot mogelijk en zodanig dat β − 1 nog een singleprecisie getal is. B.v. β = 109 als de woordlengte 32 bits is In een systeem waar vaak dergelijke grote getallen moeten uitgeprint worden verdient de laatste mogelijkheid de voorkeur. In een systeem waar er veel moet gerekend worden en weinig geprint, verdient de eerste mogelijkheid de voorkeur. Gelinkte lijsten De voorstelling van een geheel getal gebeurt dan met behulp van gelinkte lijsten waarbij elk knooppunt van de volgende gedaante is DIGIT LINK Het DIGIT veld bevat dan ´e´en β-basis getal (een singleprecisie geheel getal), en het LINK veld bevat een pointer naar het volgende knooppunt van de lijst, of een eind-van-de-lijst merker. Een multiprecisie geheel getal d = (d0 , d1 , · · · , dn−1 ) met waarde d=s
n−1 X
di β i
(3.1)
i=0
wordt dan voorgesteld door de gelinkte lijst:
d
-
s d0
-
d1
-
...
-
dn−1
waarbij het teken opgeslagen wordt bij d0 . We merken op dat de β-digits di gelinkt zijn in omgekeerde volgorde m.b.t. de conventionele schrijfwijze van gehele getallen. Nemen we voor de eenvoud een voorbeeld waarbij β = 103 dan kunnen we het geheel getal d = −1234567890 voorstellen als de volgende gelinkte lijst.
34
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
d
- −890
-
567
-
234
-
1
Deze volgorde correspondeert met de volgorde waarin we (3.1) hebben neergeschreven, maar wat belangrijker is, met de volgorde waarin we de digits gaan gebruiken bij het uitvoeren van de bewerkingen optelling en vermenigvuldiging. In Maple kunnen we dit tonen aan de hand van de volgende implementatie (base.mws): >
restart;
>
BASE := proc(x)
>
local a;
>
a := [0,0];
>
a[1] := csgn(x)*modp(abs(x),1000);
>
if abs(x) > 1000
>
then a[2] := BASE(floor(abs(x)/1000));
>
else a[2] := ‘" / "‘;
>
fi;
>
a;
>
end:
>
BASE(-1234567890); [−890, [567, [234, [1, “ / 00 ]]]]
Units We merken op dat in Z 1 en −1 de enige units zijn, d.w.z. de enige elementen die een multiplicatief invers hebben. Stellen we nu voor a ∈ Z u(a) = 1 als a ≥ 0 en u(a) = −1 als a < 0, dan wordt u(a) ook nog de unit van a genoemd. Met het oog op een latere toepassing vermelde we hier de triviale eigenschap a = u(a)|a|
(3.2)
3.4. VOORSTELLING VAN RATIONALE GETALLEN
3.4 3.4.1
35
Voorstelling van rationale getallen De datastructuur
Het veld Q van de rationale getallen is het quotientveld van het integriteitsgebied Z van de gehele getallen. Derhalve is een voor de hand liggende voorstelling van een rationaal getal: een koppel (teller,noemer) van twee multiprecisie gehele getallen (noemer 6= 0). De basisstructuur is derhalve een lijst van lengte twee, waarvan elk van de twee elementen zelf een lineaire lijst is. We kunnen dus een rationaal getal voorstellen door een knooppunt LINK1 LINK2 waarbij LINK1 een pointer is naar het multiprecisie geheel getal van de teller en LINK2 een analoge pointer naar de noemer. Daarbij kunnen we aannemen dat het eventuele teken van het rationaal getal bij de teller gestockeerd wordt. Alleen stelt zich nu het probleem dat −1234567890 987654321 en
−137174210 109739369 voor een wiskundige hetzelfde rationaal getal voorstellen, wat dus betekent dat ook het computeralgebra systeem dit moet weten. Een eenvoudige definitie voor gelijkheid van rationale getallen leert ons dat a c = b d
a.s.a ad = bc
Deze definitie lost evenwel het probleem niet op dat bij het voorgaande voorbeeld de laatste voorstelling van het rationaal getal “goedkoper” kan opgeslagen worden dan de eerste voorstelling. De oplossing van dit probleem wordt gegeven door het beschouwen van de grootste gemene deler (GGD) van de teller en de noemer.
3.4.2
Grootste gemene deler van gehele getallen
Definitie Zijn a, b elementen van een integriteitsgebied D, dan wordt a een deler van b genoemd
36
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
als er een x ∈ D bestaat waarvoor b = a.x. We zeggen ook nog: a deelt b (notatie: a|b), of b is een veelvoud van a. Definitie Zijn a, b elementen van een integriteitsgebied D, dan wordt c een grootste gemene deler van a en b genoemd, als c|a en c|b en bovendien c een veelvoud is van elke gemene deler van a en b. We merken op dat volgens deze definitie een grootste gemene deler van twee gehele getallen a en b niet uniek is, maar wel op het teken na bepaald. We zullen in dit geval “de” grootste gemene deler defini¨eren als het positief geheel getal dat aan de bovenstaande definitie voldoet. We herinneren eraan dat een klassiek algoritme voor het bepalen van de GGD(a, b) van twee gehele getallen erin bestond de priemontbinding van de twee gehele getallen te bepalen. Definitie De priemontbindig van een geheel getal a is een uitdrukking van de gedaante a = u(a)pe11 pe22 . . . pnen waarbij u(a) het teken van a voorstelt, pi (1 ≤ i ≤ n) priemgetallen, ei > 0 (1 ≤ i ≤ n) en pi 6= pk als i 6= k. Beschouw nu de priemontbindingen van a en b: a = u(a)pe11 pe22 . . . penn fm b = u(b)q1f1 q2f2 . . . qm
Zij nu {r1 , r2 , . . . , rl } de verzameling van verschillende elementen uit de lijst [p1 , p2 , . . . , pn , q1 , q2 , . . . , qm ]. Dan kunnen we de factorisaties van a en b ook nog als volgt schrijven: a = u(a) b = u(b)
gi i=1 ri
Ql
hi i=1 ri
Ql
waarbij nu wel een aantal van de gi ’s en hi ’s nul zijn. Dan is duidelijk het element d= de GGD van a en b. (comp342.mws) In Maple: ifactor, igcd
min(gi ,hi ) i=1 ri
Ql
3.4. VOORSTELLING VAN RATIONALE GETALLEN
37
a:=-3^2*11^5*57920960187043^2*2153^3;
>
a := −48529914957133914429636268576069091775982707 ifactor(a);
>
−( 3)2 ( 11)5 ( 57920960187043)2 ( 2153)3 b:=-3^5*11^3*57920960187043*2153^5;
>
b := −866642994939880448466056969669423667 ifactor(b);
>
−( 3)5 ( 11)3 ( 57920960187043) ( 2153)5 d:=igcd(a,b);
>
d := 6924499801738542089142726969 ifactor(d);
>
( 3)2 ( 11)3 ( 57920960187043) ( 2153)3
Dit algoritme is evenwel niet erg effici¨ent bij het bepalen van de GGD(a, b) voor grote a en b.
3.4.3
Het algoritme van Euclides voor gehele getallen
Eigenschap 1. Zij a, b ∈ Z (b 6= 0), dan bestaan er q ∈ Z,r ∈ Z+ zodanig dat a = bq + r
met r = 0 of r < |b|
Bewijs als oefening dat 2. GGD(a, b) = GGD(|a|, |b|) = GGD(|b|, r)
38
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
We stellen nu dat we algoritmen hebben die ons quo(a, b) = q rem(a, b) = r opleveren. Dan hebben we ook het volgende Algoritme van Euclides:
procedure GGD(a, b) c ← |a|;d ← |b|; while d 6= 0 do { r ← rem(c, d); c ← d; d ← r; } g ← c; return(g) end
Stelling De g die bekomen wordt als resultaat van het algoritme van Euclides, is GGD(a, b). Bewijs als oefening In Maple: (comp343.mws) > restart; Het algoritme van Euclides kunnen we als volgt in Maple implementeren : > GGD:=proc(a,b) > local r,c,d,g; > c:=abs(a); > d:=abs(b); > while d <> 0 do > r:=irem(c,d); > c:=d; > d:=r > od; > g:=c; > RETURN(g); > end: > GGD(39,15);
3.4. VOORSTELLING VAN RATIONALE GETALLEN
39
3 >
igcd(39,15); 3
De standaardfunctie igcd in Maple correspondeert precies met de implementatie van het algoritme van Euclides.
3.4.4
Canonische en normale voorstellingen
Definitie Een voorstelling van wiskundige objecten (rationale getallen, polynomen, . . .) wordt canonisch genoemd wanneer twee verschillende voorstellingen steeds corresponderen met verschillende objecten.
Op een meer formele manier hebben we: Een verband f tussen een klasse O van objecten en een klasse R van representaties, wordt een representatie van O door R genoemd, als met elk element van O ´e´en of meer elementen van R corresponderen (anders heeft dat element geen voorstelling) en elk element van R correspondeert met ´e´en en slechts ´e´en element uit O (anders weten we niet welk element uit O bedoeld wordt). Deze representatie heet canonisch indien f bijectief is. We kunnen dan uitmaken of twee objecten uit O gelijk zijn, door te verifi¨eren of hun representaties gelijk zijn. Als de klasse van objecten O de structuur van een groep draagt, kunnen we nog een ander begrip invoeren.
Definitie Een representatie wordt normaal genoemd, als het neutraal element zero een unieke representatie heeft. Om na te gaan of twee objecten o1 , o2 gelijk zijn, volstaat het dan te verifi¨eren of f (o1 ) ∗ (f (o2 )−1 ) = zero (Merk op dat we hierbij de multiplicatieve formulering gebruiken.) Eigenschap: Elke canonische representatie is normaal, maar het omgekeerde is niet waar.
40
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
Aan de hand van de definitie van een representatie zien we dat een represtentatie f van O door R eenduidig bepaald is door een afbeelding van O naar de verzameling van deelverzamelingen 2R , waarbij voor alle x en y uit O moet gelden: x 6= y =⇒ f (x) ∩ f (y) = ∅ Voorbeeld Bekijken we nu als klasse O van objecten, de verzameling Q van de rationale getallen en als klasse R van representaties de verzameling van “notaties” {“ ab ”|a, b ∈ Z, b 6= 0} We defini¨eren nu een representatie f door te stellen dat ∀ ab ∈ Q f ( ab ) = S, waarbij ”|c ∈ Z, c 6= 0}. S een verzameling voorstelt van de gedaante {“ a.c b.c Merk op dat de notatie “ 34 ” hierbij verwijst naar de gebruikelijk notatie voor het rationaal getal 43 . We zouden hier evengoed de notatie “ 34 ” tegen alle conventies in, kunnen interpreteren als het rationaal getal 34. Eigenschap Indien we Q beschouwen als • multiplicatieve groep, dan is deze voorstelling normaal a.s.a. het rationaal getal 1 een unieke represetatie heeft, d.w.z. a.s.a. f (1) = {“ aa00 ”}, voor een vaste a0 ∈ Z. Merk op dat we hierbij automatisch vastleggen dat f ( aa ) = {“ aa00 ”} aangezien voor alle a ∈ Z/{0} geldt dat aa = 1; • additieve groep, dan is deze voorstelling normaal a.s.a. het rationaal getal 0 een unieke representatie heeft, d.i. a.s.a. f (0) = {“ a00 ”}, voor een vaste a0 ∈ Z. In de volgende eigenschap onderstellen we dat sign(0) = +1. Eigenschap Bepalen we de representatie van een rationaal getal q als volgt: f (q) = {“ ab ”}, met q = ab , GGD(a, b) = 1 en sign(a) = sign(q), dan is dit een canonische representatie. Bewijs: Het is duidelijk dat in deze voorstelling het rationaal getal 0 voorgesteld wordt door {“ 01 ”}. Onderstel nu dat “ ab ” en “ dc ” tot onze representatie behoren van q(6= 0), dan is vanwege de definitie q = ab = dc met sign(a) = sign(c) = sign(q), sign(b) = sign(d) = +1 en GGD(a, b) = GGD(c, d) = 1. Dan is a.d = b.c. Uit het feit dat Z een UFD (Uniek Factorisatie Domein) is (zie later), en GGD(a, b) = GGD(c, d) = 1, volgt dat a = ±c en b = ±d. Vanwege onze eisen op de tekens qed kunnen we nu besluiten dat a = c en b = d. Om tot een meer overzichtelijk representatie te komen, kunnen we afspreken om de elementen van de gedaante “ a1 ” te vervangen door het element “a”. De zo bekomen representatie is nog steeds canonisch.
3.4. VOORSTELLING VAN RATIONALE GETALLEN
41
Opmerking We zien echter gemakkelijk in dat dit niet de enige mogelijke canonische representatie van Q is. Beschouw daartoe de volgende definitie van de representatie f : Zij q ∈ Q. Als • q = 0, stellen we f (q) = {“ 10 ”}. • q > 0, en n < q ≤ n + 1 met n ∈ N, dan bepalen we de representatie van q als f (q) = {“ ab ”}, met sign(a) = sign(b) = +1 en GGD(a, b) = n + 1. • q < 0, en −n − 1 < q ≤ −n met n ∈ N, dan bepalen we de representatie van q als f (q) = {“ ab ”}, met sign(a) = −1, sign(b) = +1 en GGD(a, b) = n2 + n + 1.
3.4.5
Het uitgebreide algoritme van Euclides voor Z
Eigenschap(3.4.5) Zijn a, b ∈ Z (niet beide nul). Als dan g = GGD(a, b), dan bestaan er elementen s, t ∈ Z zo dat g = s.a + t.b We construeren nu een algoritme, dat ons voor gegeven a en b, de g, s en t berekent die aan de voorwaarde voldoen.
procedure UAE(a, b) c ← |a|; d ← |b|; c1 ← 1; d1 ← 0; c2 ← 0; d2 ← 1; while d 6= 0 do { q ← quo(c, d); r ← c − q.d r1 ← c1 − q.d1 ; r2 ← c2 − q.d2 ; c ← d; c1 ← d1 ; c2 ← d2 ; d ← r; d1 ← r1 ; d2 ← r2 ; } g ← |c|; s ← c1 /(u(a).u(c)); t ← c2 /(u(b).u(c)) return(g, s, t) end
Bewijs We vertrekken van twee uitdrukkingen c = c1 .|a| + c2 .|b|
(3.3)
42
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
d = d1 .|a| + d2 .|b|
(3.4)
en tonen aan dat zolang d 6= 0 blijft de uitdrukkingen 3.3 en 3.4 invariant blijven voor de bewerkingen uit de while-lus. We merken op dat initieel de uitdrukkingen 3.3 en 3.4 vervuld zijn, gelet op c = |a|; c1 = 1; c2 = 0; d = |b|; d1 = 0; d2 = 1 In de while-lus stellen we nu bij het begin van iedere iteratie q = quo(c, d) Aangezien 3.3 en 3.4 gelden v´o´or de aanvang van de iteratie hebben we
(c − q.d) = (c1 − q.d1 )|a| + (c2 − q.d2 )|b| en dus na de toewijzingen r ← c − q.d; r1 ← c1 − q.d1 ; r2 ← c2 − q.d2
r = r1 .|a| + r2 .|b|
(3.5)
Gelet op de toewijzing c ← d; c1 ← d1 ; c2 ← d2 en op 3.4 blijft 3.3 geldig. Uit de toewijzing d ← r; d1 ← r1 ; d2 ← r2 en 3.5 volgt dat ook 3.4 behouden blijft. We moeten nu nog aantonen dat het resultaat g = GGD(a, b) en dat s en t voldoen aan g = sa + tb. Bij de aanvang hebben we c = |a|; d = |b|; c1 = 1; c2 = 0; d1 = 0; d2 = 1; Als dan d = 0 is kan dit niet anders als b = 0 en dus is dan GGD(a, b) = |a| = c en geldt c = c1 .|a| + c2 .|b|
3.4. VOORSTELLING VAN RATIONALE GETALLEN
43
Wanneer we nu de while-lus doorlopen, wordt aan het einde d = 0 en GGD(a, b) = |c| (zie gewone algoritme van Euclides). Gelet op de invariantie-eigenschap 3.3 geldt c = c1 .|a| + c2 .|b|
(3.6)
We merken nu op dat gelet op 3.2 voor elke c c = u(c).|c| Delen we nu 3.6 door u(c) dan krijgen we
|c| = c1 Uit 3.2 volgt nu dat |a| = zodat derhalve |c| = c1 Gelet op s=
|b| |a| + c2 u(c) u(c)
a b ; |b| = u(a) u(b)
b a + c2 u(a).u(c) u(b).u(c)
c1 c2 en t = u(a).u(c) u(b).u(c)
geldt dus GGD(a, b) = s.a + t.b qed
In Maple: > restart; Het uitgebreide algoritme van Euclides kunnen we als volgt in Maple implementeren: (comp345.mws) > UAE:=proc(a,b) > local q, r,c,d,c1,c2,d1,d2,r1,r2,s,t,g; > c:=abs(a);d:=abs(b); > c1:=1;d1:=0; > c2:=0;d2:=1; > while d <> 0 do > q:=iquo(c,d);r:=c-q*d; > r1:=c1-q*d1;r2:=c2-q*d2; > c:=d;c1:=d1;c2:=d2;
44
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE >
d:=r;d1:=r1;d2:=r2
>
od;
>
g:=abs(c);
>
s:=c1/(signum(a)*signum(c));
>
t:=c2/(signum(b)*signum(c));
>
RETURN(g,s,t);
>
end:
>
UAE(39,15); 3, 2, −5
>
igcdex(39,15,’s’,’t’); 3
>
s; t; 2
−5 De standaardfunctie igcdex in Maple correspondeert dus met de implementatie van het uitgebreide algoritme van Euclides.
3.5
Voorstelling van polynomen
Een van de belangrijkste elementen uit de computeralgebra zijn de polynomen en de bewerkingen op polynomen. Het is deze datastructuur, die een computeralgebrasysteem in belangrijke mate onderscheidt van een klassieke programmeertaal. We moeten daarbij benadrukken dat het begrip “polynoom” en “polynoomberekeningen” een ruime betekenis hebben. Zo is bijvoorbeeld (x − y)(x + y) = x2 − y 2 een polynoomberekening, maar ook (cos a − sin b)(cos a + sin b) = cos2 a − sin2 b
(3.7)
3.5. VOORSTELLING VAN POLYNOMEN
45
is een polynoomberekening, afgeleid uit (3.7) waarbij x vervangen is door cos a en y vervangen is door sin b. Alle computeralgebrasystemen kunnen polynomen bewerken met meerdere variabelen. We kunnen optellen, aftrekken, vermenigvuldigen en delen (als er geen rest is – zie later), maar de meest interessante bewerking is vereenvoudigen. Het is niet erg interessant om het product van (x + 1) en (x − 1) te schrijven als (x + 1)(x − 1): het is voordeliger het te schrijven als x2 − 1. Vereenvoudigen heeft evenwel verschillende betekenissen. Het is duidelijk dat (x−1) eenvoudiger is dan (x2 − 1)/(x + 1), maar x999 − x998 + x997 − . . . − 1 is zeker niet eenvoudiger dan (x1000 − 1)/(x + 1). We defini¨eren twee aanverwante begrippen die we daarbij kunnen gebruiken.
3.5.1
Polynomen in ´ e´ en variabele
Voor polynomen in ´e´en variabele x over een domein D (integriteitsgebied), is er geen enkel probleem. Elke macht van x komt maar ´e´en keer voor en gelijkheid van polynomen kan gedefinieerd worden aan de hand van de gelijkheid van de co¨effici¨enten uit D. Een gelinkte lijst is doorgaans de meest voordelige voorstelling van een polynoom. Een knooppunt in die lijst voldoet dan aan de volgende structuur: COEFFICIENT EXPONENT LINK waarbij doorgaans het eerste knooppunt correspondeert met de hoogstegraadsterm van het polynoom. Dit laatste is van belang als we vlug de graad van het polynoom willen kennen.
3.5.2
Polynomen in meerdere variabelen
Er ontstaat een nieuw probleem als we polynomen in meerdere variabelen wensen te behandelen: schrijven we dan x + y of y + x? Wiskundig gesproken hebben we daar hetzelfde object en moeten we dus een keuze maken inzake de representatie. De meest eenvoudige oplossing is de recursieve representatie in ge¨expandeerde canonische vorm. Een polynoom uit het domein D[x1 , . . . , xr ] wordt bekeken als een polynoom uit het domein D[x2 , . . . , xr ][x1 ]
46
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
en deze manier van werken wordt recursief uitgevoerd op het “co¨effici¨enten domein” D[x2 , . . . , xr ]. Een polynoom a(x1 , x2 , . . . , xr ) ∈ D[x1 , . . . , xr ] wordt dan op zijn hoogste niveau voorgesteld als een gelinkte lijst, waarbij ieder knooppunt in de lijst de volgende gedaante heeft: COEF LINK EXPONENT NEXT LINK Elke knoop stelt een term ai xi1 voor met ai ∈ D[x2 , . . . , xr ], waarbij het EXPONENTveld de waarde i bevat (een singleprecisie geheel getal), COEF LINK bevat een pointer naar de co¨effici¨ent ai en NEXT LINK bevat een pointer naar de volgende term in het polynoom, of is een “einde van de lijst merker”. Deze voorstelling wordt recursief toegepast. We merken op dat daarbij de lijst [x1 , x2 , . . . , xr ] verwijst naar een ordening van de variabelen. Doorgaans gebruikt men daarbij de zogenaamde lexicografische ordening. Standaard hebben we dus ook de ordening x, y, z 3.5.2. Polynoomordeningen in Maple (comp352.mws) > restart; In Maple 5 waren de mogelijkheden om de ordening van de variabelen in een polynoom te veranderen beperkt.
Vanaf Maple 6 zijn er heel wat meer mogelijkheden door het invoeren van een zogenaamde u ¨ser-defined term order”. Zie daartoe help: termorder o tdeg(v 1,...,v p) to denote a total degree order; o wdeg([w 1,...,w p],[v 1,...,v p]) to denote a weighted degree order; o plex(v 1,...,v p) to denote a pure lexicographic order; o lexdeg([v 1,...,v p],[w 1,...,w q]) to denote an elimination order; o ’matrix’(mat,[v 1,...,v p]) to denote a matrix-defined term order; o user(P,L) to denote a user-defined term order; o user(P,Q,L) to denote a user-defined term order.
3.5. VOORSTELLING VAN POLYNOMEN
47
Standaard krijgen we het volgende > C := 3*x^2*y^2-2*x^2*y*z^3+5*x^2*z^2+4*x-z^4+1: > C; 3 x2 y 2 − 2 x2 y z 3 + 5 x2 z 2 + 4 x − z 4 + 1 > E := 3*x^2*y^2-2*x^2*y*z^3+5*x^2*z^2+4*x-z^4+1+x^2*y*z^2-3*x^2*y: > E; 3 x2 y 2 − 2 x2 y z 3 + 5 x2 z 2 + 4 x − z 4 + 1 + x2 y z 2 − 3 x2 y
• In Maple, polynomials are not automatically stored in sorted order.
• They are stored in the order they were first created and printed in the order they are stored.
• The sort function can be used to sort polynomials. > sort(C); −2 x2 y z 3 + 3 x2 y 2 + 5 x2 z 2 − z 4 + 4 x + 1
• But please note that sorting polynomials is a destructive operation: the input polynomial will be sorted “in-place”. > C; −2 x2 y z 3 + 3 x2 y 2 + 5 x2 z 2 − z 4 + 4 x + 1 > sort(C,[x]); −2 y z 3 x2 + 3 y 2 x2 + 5 z 2 x2 + 4 x − z 4 + 1 > C; −2 y z 3 x2 + 3 y 2 x2 + 5 z 2 x2 + 4 x − z 4 + 1 Merk op dat enkel door gebruik te maken van het commando collect de termen in x2 worden samengenomen !
>
>
collect(C,x); (5 z 2 − 2 y z 3 + 3 y 2) x2 + 4 x − z 4 + 1 collect(E,[x,y,z]); (3 y 2 + (−2 z 3 + z 2 − 3) y + 5 z 2 ) x2 + 4 x − z 4 + 1
48
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
3.6
Voorstelling van rationale functies
Onder rationale functies over D in de veriabelen x1 , . . . , xr , verstaan we uitdrukkingen van de gedaante a(x1 , . . . , xr ) f (x1 , . . . , xr ) = b(x1 , . . . , xr ) Het is duidelijk dat we dit kunnen voorstellen als een paar (teller, noemer) waarbij teller en noemer polynomen zijn in D[x1 , . . . , xr ]. De voorstelling LINK1 LINK2 waarbij LINK1 een pointer is naar het polynoom van de teller en LINK2 een analoge pointer naar de noemer, is evenwel geen canonische representatie, maar wel een normale representatie. Beschouwen we f (x) = (x − 1)/(x + 1) en g(x) = (x2 − 2x + 1)/(x2 − 1), dan is f (x) − g(x) = 0/(x2 − 1) = 0 waaruit we kunnen besluiten dat f (x) = g(x) Opmerking Niettegenstaande we spreken over rationale functies, mogen we niet uit het oog verliezen dat b.v. de elementen van Q[x] en de daarbijhorende functies van Q in zichzelf niet hetzelfde zijn. In het voorgaande voorbeeld hebben we trouwens dat f (1) = 0 terwijl g(1) niet gedefinieerd is. De canonische representatie zal in de eerste plaats terug gebruik maken van de GGD voor polynomen (zie later). We zullen dus teller en noemer delen door hun GGD zodat ze geen gemeenschappelijke factoren meer hebben. Jammer genoeg is deze voorwaarde niet voldoende, zoals volgend voorbeeld van rationale vormen over Q aantoont: (x − 12 ) (−2x + 1) (2x − 1) = = (2x + 1) (−2x − 1) (−x − 12 ) Over Q is dit probleem op te lossen door te stellen dat
• er geen rationale co¨effici¨enten in de uitdrukking mogen voorkomen • er geen geheel getal teller en noemer mogen delen • de hoogstegraadsco¨efici¨ent van de noemer, positief moet zijn
3.7. VOORSTELLING VAN ALGEBRA¨ISCHE FUNCTIES
3.7
49
Voorstelling van algebra¨ısche functies
Definitie Onder algebra¨ısch verstaan we een oplossing van een polynomiale vergelijking. √ Zo is 2 een algebra¨ısch getal, gelet op het feit dat het ´en een getal ´en een oplossing van de vergelijking α2 − 2 = 0 is. √ 3
x2 − 1 is een algebra¨ısche functie omdat het ´en een functie ´en een oplossing is van de vergelijking β 3 − x2 + 1 = 0 We behandelen in deze sectie zowel algebra¨ısche functies als getallen. We merken nog op dat elke wortelvorm (radical number) een algebra¨ısche uitdrukking is, maar niet omgekeerd. Zo is er het bewijs van Abel, dat het algebra¨ısch getal γ dat een oplossing is van γ 5 +γ +1 = 0 niet kan uitgedrukt worden in wortelvormen. We onderscheiden drie klassen van algebra¨ısche uitdrukkingen: (1) enkelvoudig wortelvormen, zoals √ √ 3 2, x2 − 1; (2) enkelvoudige en genestelde wortelvormen, zoals q √ √ q √ 3 1 + 2, 2+ 3x (3) de algemene algebra¨ısche uitdrukkingen, die ook het algebra¨ısch getal zoals γ gedefinieerd door γ 5 − γ + 1 = 0 omvatten. Elke klasse is bevat in de volgende.
3.7.1
Enkelvoudige wortelvormen
De representatie voor deze klasse is vrij eenvoudig: we behandelen iedere wortelvorm als een variabele die voorkomt in een polynoom of een rationale uitdrukking. Daarbij houden we wel rekening met het feit dat als α een n-de machtswortel is, we alleen de machten 0, 1, . . . , n − 1 van α beschouwen waarbij we de hogere machten vervangen door lagere. Deze representatie is niet canonisch om twee verschillende redenen: • In de eerste plaats is er een probleem met rationale vormen die wortelvormen bevatten.
50
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE √ √ Kijken we bijvoorbeeld naar de uitdrukkingen 1/( 2 − 1) en 2 + 1. Dan zijn deze representaties verschillend, maar ze stellen wel hetzelfde getal voor, gelet op het feit dat hun verschil zero is: √ √ √ 1 ( 2 + 1)( 2 − 1) 1 √ √ − ( 2 + 1) = √ − 2−1 2−1 2−1 √ 1 − ( 2)2 + 1 0 √ = =√ = 0. 2−1 2−1 E´en oplossing bestaat erin de wortels uit de noemer te verdrijven: dit sluit het 1 uit. voorkomen van √2−1 Voor elke wortel α kunnen we dit realiseren door teller n en noemer d van de uitdrukking te vermenigvuldigen met een polynoom d1 , zodanig dat de algebra¨ısche uitdrukking α niet meer voorkomt in d d1 . Daaruit volgt dan dat n d1 n = d d d1 waarbij α niet meer voorkomt in de noemer. We merken op dat het polynoom d1 kan gevonden worden door toepassing van het Uitgebreid Algoritme van Euclides (dit is de uitgebreide vorm van het gelijknamige algoritme dat we uitgewerkt hebben in 3.4.5, en waar we later op terugkomen) op het polynomenpaar d en p, waarbij p het irreducibel polynoom is dat α definieert. Dit algoritme geeft ons twee polynomen d1 en d2 zodanig dat d d1 + p d2 = c waarbij c en dus ook d d1 = c niet meer afhangt van α. Voor het bovenstaand voorbeeld hebben we: (α − 1) (α + 1) + (α2 − 2) (−1) = 1 Met deze beperking hebben we wel een canonisch systeem als de radicalen onafhankelijk zijn. Deze voorstelling is echter niet altijd effici¨ent: 1:
1 ------------------------------------------SQRT (2) + SQRT (3) + SQRT (5) + SQRT (7)
2:
22 SQRT (105) 29 SQRT (3) 37 SQRT (2) 34 SQRT (70)~ --------------- - ------------- + ------------- - -------------~ 215 43 43 215 ~
~ 133 SQRT (5) 10 SQRT (42) 62 SQRT (30) 27 SQRT~ ~- - -------------- - -------------- + -------------- + --------~ ~ 215 43 215 43 ~
~ (7) ~----~
3.7. VOORSTELLING VAN ALGEBRA¨ISCHE FUNCTIES
51
Of in een andere notatie: √ √ 22 105 215
−
√ 29 3 43
+
√ 37 2 43
−
√ 1√ √ 2+ 3+ 5+ 7
√ 34 70 215
−
=
√ 133 5 215
−
√ 10 42 43
+
√ 62 30 215
+
√ 27 7 43
• Blijft nu nog de onderlinge afhankelijkheid van de wortelvormen. √ Een triviaal voorbeeld van dit probleem is dat we niet 1 moeten gebruiken √ √ i.p.v. 1. Analoog kunnen we rekenen met 2 of 8, maar niet met beiden √ √ tegelijk, aangezien 8 = 2 2 zodat die voorstelling niet canonisch √ en√zelfs niet manier √ normaal is. Op dezelfde √ √ √ kunnen we niet terzelfdertijd 2, 3 en 6 gebruiken, aangezien 2. 3 = 6. De voorgaande voorbeelden zijn op het eerste zicht vanzelfsprekend. We zouden kunnen verwachten dat het volstaat om te eisen dat alle getallen die in onder het wortelteken staan onderling ondeelbaar zijn, en dat de wortels niet verder kunnen vereenvoudigd worden. Jammer genoeg liggen de zaken iets moeilijker. √ Beschouwen we α = 4 −4. Dan kunnen we op het eerst zicht denken dat deze wortelvorm niet te vereenvoudigen is. √ −4 + 2 Die vorm is evenwel ook nog te schrijven als . Dit volgt uit het feit 2 dat α2 + 2 α2 = 2α − 2 m.a.w. α = 2 Wat op zijn beurt een gevolg is van x4 + 4 = (x2 − 2x + 2)(x2 + 2x + 2) Controleer dit met Maple Najid-Zejli ([14],[15]) heeft dit probleem bestudeerd en een algoritme gegeven om te beslissen of er een relatie bestaat tussen niet-genestelde wortelvormen. De bespreking van dit algoritme zou ons hier te ver leiden.
3.7.2
Genestelde wortelvormen
De problemen worden nog groter in de tweede klasse met de genestelde wortelvormen. Er zijn algoritmen ontwikkeld die een oplossing geven voor speciale klassen, maar er is nog steeds geen algemene oplossing. De volgende voorbeelden illustreren de
52
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
eigenaardigheden die zich kunnen voordoen. We citeren deze voorbeelden uit [4] √ √ 9+4 2 = 1+2 2 (3.8) q q √ √ √ 5+2 6+ 5−2 6 = 2 3 (3.9) s s q √ x+1 x−1 + (3.10) x + x2 − 1 = 2 2 r q q q √ √ √ √ √ 16 − 2 29 + 2 55 − 10 29 = 22 + 2 5 − 11 + 2 29 + 5(3.11) q
vs u u 3 5 32 t
s
27 = 5
s 5
1 + 25
s
s
3 5 9 − − 5 25 25 s √ √ 5 5 5 1 = (1 + 3 − 32 ) 25 q √ √ √ √ √ √ (112 + 70 2) + (46 + 34 2) 5 = (5 + 4 2) + (3 + 2) 5 5
5
(3.12) (3.13) (3.14) (3.15)
In Maple: (comp372.mws) > restart; 1. Bepaalde genestelde wortelvormen worden automatisch vereenvoudigd : > sqrt(9+4*sqrt(2)); √ 2 2+1 >
sqrt(5+2*sqrt(6))+sqrt(5-2*sqrt(6)); 2
√
3
2. Bepaalde genestelde wortelvormen worden niet vereenvoudigd, zelfs niet na een specificatie (in Maple leidt dit tot de tilda-notatie) : > sqrt(x+sqrt(x^2-1)); q
√
q
√
x+
>
simplify(%,symbolic); x+
> >
x2 − 1
assume(x>1): simplify(%);
x2 − 1
3.7. VOORSTELLING VAN ALGEBRA¨ISCHE FUNCTIES
r
x˜ +
>
53
q
x ˜2 − 1
x := ’x’; x := x
>
sqrt(16-2*sqrt(29)+2*sqrt(55-10*sqrt(29))); q √ √ 16 − 2 29 + 2 55 − 10 29
r >
simplify(%); q √ √ 16 − 2 29 + 2 55 − 10 29
r >
factor(%); q √ √ 16 − 2 29 + 2 55 − 10 29
r >
radnormal(%); q √ √ 16 − 2 29 + 2 55 − 10 29
r
3. Nog andere genestelde wortelvormen worden vereenvoudigd na veel rekenwerk (ongeveer 2 minuten) : >
sqrt((112+70*sqrt(2))+(46+34*sqrt(2))*sqrt(5)
>
); q
112 + 70
>
√
√ √ 2 + (46 + 34 2) 5
simplify(%); √ √ √ √ 112 + 70 2 + 46 5 + 34 5 2
q >
factor(%);
54
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
√ √ √ √ 112 + 70 2 + 46 5 + 34 5 2
q
radnormal(%);
>
√ √ √ √ 5 2+5+3 5+4 2 rt := ((32/5)^(1/5)-(27/5)^(1/5))^(1/3);
>
1 1 rt := ( 321/5 54/5 − 271/5 54/5 )1/3 5 5 simplify(rt);
>
1 2/3 5 (−54/5 (−2 + 33/5 ))1/3 5 factor(rt);
>
2 1 ( 54/5 − 33/5 54/5 )1/3 5 5 radnormal(rt);
>
1 1/5 3/5 1 3/5 2/5 1 3/5 3 5 − 5 3 + 5 5 5 5
3.7.3
Algemene algebra¨ısche functies
We bekijken nu algebra¨ısche functies, gedefinieerd als wortels van polynomen. Het is mogelijk dat er een representatie bestaat als polynoom van wortelvormen, maar dit is niet noodzakelijk. Een algebra¨ısche functie (of getal) α beschouwen we dus als gedefinieerd als wortel van een polynoom p(x) (in Maple notatie: α = RootOf(p, x)).
1. p niet irreducibel Als het polynoom niet irreducibel is, hebben we al gauw problemen, zelfs met de eenvoudigste berekeningen.
3.7. VOORSTELLING VAN ALGEBRA¨ISCHE FUNCTIES
55
Nemen we als voorbeeld p(α) = α2 − 3α + 2 Dan is α een algebra¨ısch getal van de graad 2. (α − 1) en (α − 2) zijn eveneens getallen, die a priori niet nul zijn. Maar hun product is p(α) en dus zero, zodat een van de twee uitdrukkingen toch nul moet zijn (afhankelijk van het feit of we voor α de wortel 1 of 2 van p beschouwen). Het rekenen met wortels van reducibele polynomen geeft dus moeilijkheden, en moet dus vermeden worden, zo √ niet worden de resultaten niet gegarandeerd. Dit was ook de reden waarom 4 −4 problemen gaf. Het is een wortel van α4 +4 dat te ontbinden is als (α2 − 2α + 2)(α2 + 2α + 2).
Hetzelfde geldt ook voor de genestelde wortelvormen. Nemen we het voorbeeld q √ √ 2 (3.8), dan is α − (9 + 4 2) een polynoom dat 9 √ + 4 2 definieert. √ Dan zien we dat dit polynoom te ontbinden is in (α − (1 + 2 2))(α + (1 + 2 2)), zodat derhalve het de beschouwde wortelvorm een eenvoudiger voorstelling moet hebben. We merken nog op dat in het geval we alleen polynomen met gehele co¨effici¨enten wensen te behandelen, we kunnen opmerken dat de gegeven α een wortel is van α4 − 18α2 + 49. In Maple > alpha^4-18*alpha^2+49; α4 − 18 α2 + 49 >
factor(%); (α2 − 2 α − 7) (α2 + 2 α − 7)
>
factor(%,2^(1/2)); (α − 1 + 2
√
√ √ √ 2) (α + 1 + 2 2) (α − 1 − 2 2) (α + 1 − 2 2)
2. p irreducibel De definitie “α is een nulpunt (wortel) van p(α)” is slechts toelaatbaar als p irreducibel is. Toelaatbaar betekent dat polynomen in α (van een lagere graad dan p) canonische representaties opleveren, en dat het gebruik van dergelijke rationale functies (die de wortel niet in de noemer hebben) eveneens canonische representaties geven. Wanneer er evenwel meerdere wortels optreden, zijn daarmee de problemen nog niet van de baan. Het is duidelijk dat de polynomen die elk van de
56
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE wortels defini¨eren reeds irreducibel moeten zijn. Maar we hebben meer nodig, ze moeten niet alleen elk afzonderlijk irreducibel zijn, maar ook tesamen. Om dit uit te leggen beschouwen we het volgende voorbeeld. Stel α een wortel van α5 − α − 1 (3.16) en β een wortel van β 5 + 5β 4 + 10β 3 + 10β 2 + 4β − 1
(3.17)
Deze twee polynomen zijn irreducibel, als we ze beschouwen als polynomen over Z. Maar als we het polynoom dat β definieert als een polynoom mogen beschouwen dat afhangt van α, is de situatie helemaal anders. β is dan ook wortel van het volgende polynoom: β 5 + 5β 4 + 10β 3 + 10β 2 + 4β − (α5 − α) Als we Maple dit polynoom laten factorizeren, vinden we (β−α+1)(β 4 +β 3 (α+4)+β 2 (α2 +3α+6)+β(α3 +2α2 +3α+4)+α4 +α3 +α2 +α) (3.18) Dit hoeft ons niet te verbazen als we weten dat (3.17) ontstaat uit (3.16) door substitutie van α = β + 1, vandaar ook de lineaire term (β − α + 1) in (3.18). Dus, om uit te maken of een systeem van wortels αi van de polynomen pi , toelaatbaar is, moeten we 1. p1 factorizeren als polynoom met gehele co¨effici¨enten, 2. dan p2 als polynoom met co¨effici¨enten in Z[α1 ], 3. dan p3 als polynoom met co¨effici¨enten in Z[α1 , α2 ], 4. dan . . .. Als alle pi polynomen zijn met gehele co¨effici¨enten, speelt de volgorde van behandelen geen rol. Als evenwel pi afhangt van een αj , moeten we pj factorizeren v´o´or pi . We merken op dat dit proces eenvoudig te implementeren is, maar dat het veel tijd en geheugen vraagt. In Maple (comp3732.mws) > restart;
3.7.3. Algemene algebra¨ısche functies
3.8. VOORSTELLING VAN TRANSCENDENTE FUNCTIES EN CONSTANTEN57
2. p(x) irreducibel >
>
p(x):=x^5-x-1; factor(p(x));
p(x) := x5 − x − 1 x5 − x − 1
Om nu te zeggen dat a een wortel is van p(x), gebruiken we in Maple:
>
alias (alpha=RootOf(x^5-x-1,x)); α q(y):=y^5+5*y^4+10*y^3+10*y^2+4*y-1;
>
q(y) := y 5 + 5 y 4 + 10 y 3 + 10 y 2 + 4 y − 1 factor(q(y));
>
>
y 5 + 5 y 4 + 10 y 3 + 10 y 2 + 4 y − 1 alias ( beta=RootOf(y^5+5*y^4+10*y^3+10*y^2+4*y-1,y)); α, β factor(q(y));
>
y 5 + 5 y 4 + 10 y 3 + 10 y 2 + 4 y − 1 factor(q(y),alpha);
>
(y + 1 − α)(y 4 + 4 y 3 + y 3 α + 6 y 2 + 3 y 2 α + y 2 α2 + 4 y + 3 y α + 2 y α2 + y α3 + α + α2 + α3 + α4 ) >
(y^4+4*y^3+alpha*y^3+6*y^2+3*alpha*y^2+alpha^2*y^2+4*y+3*alpha*y+2*al
>
pha^2*y+alpha^3*y+alpha+alpha^2+alpha^3+alpha^4);
y 4 + 4 y 3 + y 3 α + 6 y 2 + 3 y 2 α + y 2 α2 + 4 y + 3 y α + 2 y α2 + y α3 + α + α2 + α3 + α4 > sort(collect(%,y)); y 4 + (4 + α) y 3 + (6 + 3 α + α2 ) y 2 + (4 + 3 α + 2 α2 + α3 ) y + α + α2 + α3 + α4
3.8
Voorstelling van transcendente functies en constanten
Transcendente functies omvatten een aantal klassen van functies, die elk voldoen aan een reeks van bijzondere eigenschappen of regels. Dergelijke functies kunnen b.v. voorgesteld worden als een “record”, SIN X
58
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
bestaande uit de naam van de functie en de argumenten. Getallen sin 1 en sin π kunnen op dezelfde manier voorgesteld worden. Een dergelijke structuur kan dan beschouwd worden als een variabele en voorkomen in een polynoom of rationale functie. Het grote probleem is terug de vereenvoudiging van dergelijke uitdrukkingen volgens de specifieke regels van de “variabelen”. We geven hierna een aantal van deze eigenschappen: sin(x + y) = sin x cos y + cos x sin y sin(x + y) + sin(x − y) sin x cos y = 2 ln(x y) = ln x + ln y ln exp x = x exp(x + y) = exp x exp y sin π = 0
(3.19) (3.20) (3.21) (3.22) (3.23) (3.24)
Opmerkingen 1. In een aantal computeralgebrasystemen, moet de gebruiker de bovenstaande regels zelf bepalen, dit is bijvoorbeeld het geval in REDUCE. De bovenstaande regels worden daar ingegeven als: FOR FOR FOR FOR FOR LET
ALL X,Y LET SIN(X+Y) = SIN(X)*COS(Y)+COS(X)*SIN(Y); ALL X,Y LET SIN(X)*COS(Y) = (SIN(X+Y)+SIN(X-Y))/2; ALL X,Y LET LOG(X*Y) = LOG(X) + LOG(Y); ALL X LET LOG(EXP(X)) = X ; ALL X,Y LET EXP(X+Y) = EXP(X)*EXP(Y); SIN(PI)=0;
2. Wanneer we de regels (3.19) en (3.20) bekijken dan is (3.20) een gevolg van (3.19). Deze afleiding is evenwel meer dan alleen maar toepassen van eenvoudige rekenregels. Men moet het inzicht hebben dat de term sin x cos y uit (3.19) af te zonderen is door diezelfde regel te gaan toepassen op sin(x − y). Een systeem dat in staat is om dergelijke deductie te maken, doet aan automatische bewijsvoering en is voorlopig niet voorhanden in een computeralgebrasysteem. We zijn dus gehouden zowel (3.19) als (3.20) expliciet te formuleren. 3. Herschrijfregels in plaats van gelijkheden Stel dat we de uitwerking vragen van exp(a + (b + x)), dan kan op basis van de gelijkheid (3.23) exp a exp(b + x) bekomen worden. Wanneer we nu deze nieuwe term bekijken, is de eerste regel die daarop toepasbaar is terug de regel (3.23) maar in omgekeerde volgorde. Het is duidelijk dat we zo in een oneindige lus terechtkomen. Om dit te vermijden beschouwen we de bovenstaande gelijkheden als gericht van links naar rechts, d.w.z. dat men de herschrijving
3.8. VOORSTELLING VAN TRANSCENDENTE FUNCTIES EN CONSTANTEN59 slechts mag toepassen door een uitdrukking die overeenkomt met het linkerlid te herschrijven als de overeenkomstige uitdrukking uit het rechterlid. Om dit duidelijk te maken zal men vaak de gelijkheid vervangen door een →. We krijgen dan: sin(x + y) → sin x cos y + cos x sin y sin(x + y) + sin(x − y) sin x cos y → 2 ln(x y) → ln x + ln y ln exp x → x exp(x + y) → exp x exp y sin π → 0 Dit wordt een herschrijfsysteem genoemd. Zo hebben we verder nog:
voor re¨ele of complexe z en w.
ez ew ↔ ez+w
(3.25)
(ez )k ↔ ekz
(3.26)
(ez )k ↔ ezk
(3.27)
Voor de logaritmische functie hebben we de volgende herschrijfregels: ln(x) + ln(z) ↔ ln(x z)
(3.28)
k ln(x) ↔ ln(xk )
(3.29)
Verder hebben we ook nog: SIN(z + w) COS(z + w) SIN(mz) COS(mz)
→ → → →
SIN(z)COS(w) + COS(w)SIN(z) COS(z)COS(w) + SIN(w)SIN(z) 2COS((m − 1)z)SIN(z) + SIN((m − 2)z) 2COS((m − 1)z)COS(z) − COS((m − 2)z)
SIN(z) + SIN(w) → COS(z) + COS(w) → SIN(z)COS(w) → SIN(z)m → COS(z)m →
COS(z − w) − COS(z + w) 2 COS(z − w) + COS(z + w) 2 SIN(z − w) + SIN(z + w) 2 1 − COS(2z) SIN(z)m−2 2 1 + COS(2z) COS(z)m−2 2
(3.30) (3.31) (3.32) (3.33)
(3.34) (3.35) (3.36) (3.37) (3.38)
60
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE Voor het vervolg zullen we ons evenwel houden aan de eerste voorstelling met gelijkheden. De problemen zijn echter nog niet van de baan, gelet op het feit dat de regel (3.20) nog steeds de inverse is van (3.19), en een achtereenvolgende toepassing van deze regels mogelijk blijft. Dit probleem wordt besproken in de cursus Herschrijfsystemen. 4. In Maple: (comp38.mws) >
restart;
3.19. sin(x + y) = sin(x) cos(y) + cos(x) sin(y) : wordt in beide richtingen herschreven >
sin(x+y); sin(x + y)
>
expand(%); sin(x) cos(y) + cos(x) sin(y)
>
combine(%%,trig); sin(x + y)
3.20. sin(x) cos(x) = >
sin(x+y)+sin(x−y) 2
: wordt in beide richtingen herschreven
sin(x)*cos(y); sin(x) cos(y)
>
combine(%,trig); 1 1 sin(x + y) − sin(−x + y) 2 2
>
convert(%,trig); sin(x) cos(y)
3.21. ln(x y) = ln(x) + ln(y) : wordt steeds herschreven van links naar rechts, maar van rechts naar links enkel op voorwaarde dat de variabelen positief zijn.. >
ln(x*y);
3.8. VOORSTELLING VAN TRANSCENDENTE FUNCTIES EN CONSTANTEN61
ln(x y) >
expand(%); ln(x) + ln(y)
>
combine(%,ln); ln(x) + ln(y)
> >
assume(x>0,y>0): combine(%,ln); ln(x ˜ y˜)
>
y := ’y’; x := ’x’; y := y
x := x 3.22. ln(ex ) = x : deze regel wordt van links naar rechts herschreven > ln(exp(x)); ln(ex ) >
expand(%); x
3.23. e(x+y) = ex ey : wordt in beide richtingen herschreven. > exp(x+y); e(x+y) >
expand(%); ex ey
62
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE >
simplify(%); e(x+y)
3.24. sin(π) = 0 : deze regel wordt van links naar rechts herschreven >
sin(Pi); 0
3.26. (ez )k = e(z k) : deze regel wordt van links naar rechts uitgevoerd >
exp(z)^k; (ez )k
>
convert(%,exp); e(z k)
3.29. k ln(z) = ln(z k ) : deze regel wordt enkel van rechts naar links uitgevoerd >
ln(z^k); ln(z k )
>
expand(%); k ln(z)
3.31. cos(x + y) = cos(x) cos(y) + sin(x) sin(y) : wordt in beide richtingen herschreven >
cos(x+y); cos(x + y)
>
expand(%); cos(x) cos(y) − sin(x) sin(y)
>
combine(%%,trig);
3.8. VOORSTELLING VAN TRANSCENDENTE FUNCTIES EN CONSTANTEN63
cos(x + y) 3.32. sin(m z) = 2 cos((m − 1) z) sin(z) + sin((m − 2) z) : deze regel wordt enkel van rechts naar links herschreven door het gebruik van het commando combine. > sin(m*z); sin(m z) >
expand(%); sin(m z)
>
2*cos((m-1)*z)*sin(z)+sin((m-2)*z); 2 cos((m − 1) z) sin(z) + sin((m − 2) z)
>
combine(%,trig); sin(m z)
3.33. cos(m z) = 2 cos((m − 1) z) cos(z) − cos((m − 2) z) : deze regel wordt enkel van rechts naar links herschreven door het gebruik van het commando combine. > cos(m*z); cos(m z) >
expand(%); cos(m z)
>
2*cos((m-1)*z)*cos(z)-cos((m-2)*z); 2 cos((m − 1) z) cos(z) − cos((m − 2) z)
>
combine(%,trig); cos(m z)
64
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE : deze regel wordt enkel van rechts 3.34. sin(x) + sin(y) = cos(x−y)−cos(x+y) 2 naar links herschreven door het gebruik van het commando expand. >
(cos(x-y)-cos(x+y))/2; 1 1 cos(−x + y) − cos(x + y) 2 2
>
expand(%); sin(x) sin(y)
: deze regel wordt enkel van rechts 3.35. cos(x) + cos(y) = cos(x−y)+cos(x+y) 2 naar links herschreven door het gebruik van het commando expand. >
(cos(x-y)+cos(x+y))/2; 1 1 cos(−x + y) + cos(x + y) 2 2
>
expand(%); cos(x) cos(y) (m−2)
3.37. sin(x)m = (1−cos(2 x))2sin(x) : deze regel wordt enkel van rechts naar links herschreven door het gebruik van het commando combine. >
sin(x)^m; sin(x)m
>
expand(%); sin(x)m
>
(1-cos(2*x))/2*sin(x)^(m-2); 1 (1 − cos(2 x)) sin(x)(m−2) 2
>
combine(%,trig); sin(x)m
3.9. VOORSTELLING VAN COMPLEXE GETALLEN
65
(m−2)
3.38. cos(x)m = (1+cos(2 x))2cos(x) : deze regel wordt enkel van rechts naar links herschreven door het gebruik van het commando expand. > cos(x)^m; cos(x)m >
expand(%); cos(x)m
>
(1+cos(2*x))/2*cos(x)^(m-2); 1 (cos(2 x) + 1) cos(x)(m−2) 2
>
expand(%); cos(x)m
3.9
Voorstelling van complexe getallen
De voorstelling van complexe getallen sluit aan bij de voorgaande sectie, in de zin dat we moeten rekening houden met een aantal regels bij het vereenvoudigen van uitdrukkingen met complexe getallen. We gaan uit van klassieke voorstelling
c = a + ib
(3.39)
waarbij a, b ´e´en van de objecten kan zijn die we voordien reeds besproken hebben, en waarbij i de imaginaire eenheid voorstelt, met de eigenschap i2 = −1. ofwel van de voorstelling: c = |c|eiθ
(3.40)
waarbij |c| de modulus van c voorstelt, en θ een argument van c. Eigenschap De voorstelling (3.39) is een canonisch gedaante, en elk complex getal is tot die canonische gedaante te herleiden.
66
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
(Bewijs) De voorstelling (3.40) is geen canonische voorstelling, wat een probleem stelt bij het behandelen van uitdrukkingen van de gedaante 1
zn met z ∈ C en n ∈ Z. De bovenstaande uitdrukking stelt immers de oplossingen voor van de gelijkheid Xn = z en in het complexe vlak zijn dat n verschillende punten, ook nog takken van de oplossing genoemd. Stellen we z = eiθ , dan kunnen we die n oplossingen voorstellen door
i {e
θ + 2kπ n |k = 0, . . . , (n − 1)}
1
(3.41)
Maple neemt nu voor z n slechts ´e´en representant uit die klasse. Als we gaan kijken wat dit als resultaat geeft, vinden we (comp39.mws) > restart; > readlib(polar); proc(r, th) . . . end >
z := a+I*b; z := a + I b
>
polar(z); polar(|a + I b| , argument(a + I b))
>
z := -2+5*I; z := −2 + 5 I
>
polar(z); √ 5 polar( 29, −arctan( ) + π) 2
67
3.10. VOORSTELLING VAN MATRICES In Maple krijgen we slechts n wortel : sqrt(9);
>
3 (-8)^(1/3);
>
(−8)1/3 simplify(%);
>
1+I 1+I
√
√
3
3
is een derde machtswortel van -8, maar dit is geen re¨eel getal. De re¨ele wortel van -8 kunnen we vinden door gebruik te maken van het commando surd : >
surd(-8,3); −2
Wanneer we echter gebruik maken van het commando solve geeft Maple alle wortels : >
solve(x^2=9); 3, −3
>
solve(x^3=-8); −2, 1 − I
3.10
√
3, 1 + I
√
3
Voorstelling van matrices
Er zijn twee soorten van matrixbewerkingen te onderscheiden, de zogenaamde impliciete en de expliciete. Onder een impliciete bewerking verstaan we bijvoorbeeld de volgende wiskundige uitspraak:
68
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE Zijn A en B twee willekeurige vierkante matrices van dezelfde dimensie, dan is in het algemeen A.B 6= B.A, waarbij “.” het klassieke matrix-product voorstelt.
We hebben niets gezegd over de dimensie noch over de elementen van die matrices. Bij expliciete bewerkingen daarentegen zullen we terugvallen op de elementen van de matrix. Merk op dat dit zowel getallen, polynomen, rationale functies, andere matrices, symbolen kunnen zijn.
A=
"
a b c d
A.B =
"
#
B=
"
x y u v
ax + bu ay + bv cx + du cy + dv
#
(3.42)
#
Voor de impliciete bewerkingen zijn A en B variabelen, waar evenwel een aantal van de gebruikelijke rekenregels niet van toepassing zijn. A.B = 6 B.A is daar een voorbeeld van. LET OP IN Maple: (comp310.mws) > restart; In Maple wordt een matrix ingevoerd aan de hand van het commando array (matrix is dan lijst van lijsten) of het commando matrix (matrix is dan lijst van elementen). > A := array(1..2,1..2,[[a,b],[c,d]]); A :=
>
a b c d
#
"
x y u v
#
B := matrix(2,2,[x,y,u,v]); B :=
>
"
A*B; AB
>
A*B-B*A; 0
69
3.10. VOORSTELLING VAN MATRICES >
A&*B; A &∗ B
>
>
>
evalm(A&*B); "
ax + bu ay + bv cx+du cy +dv
#
"
ax + cy xb + yd ua+ vc bu + dv
#
evalm(B&*A);
evalm(A&*B-B&*A); "
bu − cy ay + bv − xb − yd cx+du− ua− vc cy − bu
#
Voor de normale werking met matrices moeten we er derhalve op letten dat we de notatie &∗ gebruiken bij het matrixproduct.
3.10.1
Dichte matrices
De voor de hand liggende voorstelling van een matrix is een array van elementen. Heel wat computeralgebrasystemen gebruiken vectoren van vectoren of zelfs lijsten van lijsten. Gaan we na wat de de structuur is die Maple gebruikt, dan beschouwen we de volgende input: (comp3101.mws) >
[[0,-1,3,4,5],[a,0,0,b,c],[-1,0,x,3,1],[0,0,0
>
,y,0]]; [[0, −1, 3, 4, 5], [a, 0, 0, b, c], [−1, 0, x, 3, 1], [0, 0, 0, y, 0]]
>
array(1..4,1..5,[[0,-1,3,4,5],[a,0,0,b,c],[-1
>
,0,x,3,1],[0,0,0,y,0]]);
70
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
0 −1 3 4 5 a 0 0 b c −1 0 x 3 1 0 0 0 y 0
Waaruit we besluiten dat Maple een array gebruikt om matrices voor te stellen. Inzake bewerkingen op matrices, vervalt bij een computeralgebrasysteem de zorg omtrent de stabiliteit van de bewerkingen. Zo is b.v. elk van nul verschillend element een goed spil-element bij de Gauss-eliminatie. Anderzijds is er wel het heel groot probleem van de tussentijdse aangroei van de data bij de verwerking, tussen input en output, hetgeen we kunnen illustreren met het volgende voorbeeld: (comp3101b.mws) Het inverse van een matrix berekenen we met het commando inverse (dit is bevat in het pakket linalg) of aan de hand van de macht -1. > A := matrix(3,3,[a,b,c,d,e,f,g,h,i]);
a b c A := d e f g h i >
with(linalg):
Warning, new definition for norm Warning, new definition for trace >
evalm(A^(-1));
>
bi − ch bf − ce ei −f h − %1 %1 %1 ai− cg af − cd di−f g − − %1 %1 %1 dh−eg ah − bg ae − bd − %1 %1 %1 %1 := a e i − a f h − d b i + d c h + g b f − g c e
inverse(A);
ei −f h bi − ch bf − ce − %1 %1 %1 di−f g ai− cg af − cd − − %1 %1 %1 dh−eg ah − bg ae − bd − %1 %1 %1 %1 := a e i − a f h − d b i + d c h + g b f − g c e
71
3.10. VOORSTELLING VAN MATRICES
3.10.2
IJle matrices
Voor klassieke programmeertalen zijn er technieken ontwikkeld om matrices waar het merendeel der elementen 0 is, de zogenaamde ijle matrices (sparse matrices) op een bijzondere manier voor te stellen. Voor computeralgebrasystemen, is dit niet het geval. Wel heeft men afhankelijk van het pakket een aantal functies beschikbaar, die toelaten op een eenvoudige manier ijle matrices te defini¨eren. Voor Maple zijn de standaard mogelijkheden eerder beperkt, maar met definitie van een aantal eenvoudige funties kunnen we deze mogelijkheden uitbreiden. We geven hierna een aantal voorbeelden: (comp3102.mws) De identiteitsmatrix in Maple (dit lukt ook voor rechthoekige matrices !) : > A := array(1..4,1..4,identity); A := array(identity, 1..4, 1..4, []) >
B := array(1..3,1..5,identity); B := array(identity, 1..3, 1..5, [])
>
evalm(A);
>
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
evalm(B);
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 Het commando put : > put := proc(A,k,l,x) > local B,i,j; > B := array(1..rowdim(A),1..coldim(A)); > for i from 1 to rowdim(A) do
72
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE >
for j from 1 to coldim(A) do
>
B[i,j] := A[i,j];
>
od;
>
od;
>
B[k,l] := x;
>
evalm(B);
>
end:
>
put(A,2,4,8);
1 0 0 0
0 1 0 0
0 0 1 0
0 8 0 1
De nulmatrix in Maple : >
zero_matrix := proc(m,n)
>
evalm(array(1..m,1..n,’sparse’));
>
end:
>
C := zero_matrix(4,5);
C :=
>
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0 0 x2 + 1 0 0
0 0 0 0
E := put(C,3,4,x^2+1);
E :=
0 0 0 0
Opmerking 1 : Een element op een bepaalde plaats in een matrix kunnen we als volgt defini¨eren : >
C[1,1] := 5; C1, 1 := 5
>
evalm(C);
73
3.10. VOORSTELLING VAN MATRICES
5 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Zo kunnen we een ijle matrix gaan defini¨eren. Let echter op het volgende : >
F := C; F := C
>
evalm(F);
>
5 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
F[1,3] := 2; F1, 3 := 2
>
evalm(F);
5 0 0 0
0 0 0 0
2 0 0 0
0 0 0 0
0 0 0 0
5 0 0 0
0 0 0 0
2 0 0 0
0 0 0 0
0 0 0 0
>
evalm(C);
Dus door op deze manier elementen in de matrix F te gaan veranderen, veranderen de elementen op die plaats in C ook ! We kunnen dit oplossen door gebruik te maken van het commando copy : >
G := copy(C);
74
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
G := >
5 0 0 0
0 0 0 0
2 0 0 0
0 0 0 0
0 0 0 0
G[2,5] := -4; G2, 5 := −4
>
evalm(G);
>
5 0 0 0
0 0 0 0
2 0 0 0
0 0 0 −4 0 0 0 0
evalm(C);
5 0 0 0
0 0 0 0
2 0 0 0
0 0 0 0
0 0 0 0
Opmerking 2 : >
Id := array(1..3,1..3,identity); Id := array(identity, 1..3, 1..3, [])
>
evalm(Id);
1 0 0 0 1 0 0 0 1 >
Id[2,1] := 4;
Error, cannot assign to an identity matrix
Het commando evalm biedt een oplossing voor dit probleem : >
M_id := evalm(Id);
75
3.11. VOORSTELLING VAN REEKSEN
1 0 0 M id := 0 1 0 0 0 1 >
M_id[2,1] := 4; M id 2, 1 := 4
>
evalm(M_id);
1 0 0 4 1 0 0 0 1
3.11
Voorstelling van reeksen
Computeralgebra blijft niet beperkt tot eindige objecten zoals we tot nu toe bekeken hebben. Het kan ook een aantal types van oneindige reeksen behandelen. Het is duidelijk dat we van deze laatste slechts een eindig aantal termen zullen te zien krijgen. In het geval van Taylorreeksen krijgen we: (comp311.mws) > restart; > taylor(exp(x),x=0,6); 1+x+ >
taylor(sqrt(1+x),x=0,6); 1+
>
1 2 1 3 1 4 1 5 x + x + x + x + O(x6 ) 2 6 24 120
1 1 3 5 4 7 5 1 x − x2 + x − x + x + O(x6 ) 2 8 16 128 256
sum(a[i]*x^i,i=1..n); n X i=1
ai xi
76
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE >
sum(a[i]*x^i,i=1..infinity); ∞ X
ai xi
i=1
>
sum(b[j]*x^j,j=1..infinity); ∞ X
bj xj
j=1 >
sum(a[i]*x^i,i=1..8) +
>
sum(b[j]*x^j,j=1..10);
a1 x + a2 x2 + a3 x3 + a4 x4 + a5 x5 + a6 x6 + a7 x7 + a8 x8 + b1 x + b2 x2 + b3 x3 + b4 x4 + b5 x5 + b6 x6 + b7 x7 + b8 x8 + b9 x9 + b10 x10 >
collect(%,x);
b10 x10 + b9 x9 + (a8 + b8 ) x8 + (a7 + b7 ) x7 + (a6 + b6 ) x6 + (a5 + b5 ) x5 + (a4 + b4 ) x4 + (a3 + b3 ) x3 + (a2 + b2 ) x2 + (a1 + b1 ) x >
a[i] := 2*i; ai := 2 i
>
b[j] := 3*j; bj := 3 j
>
sum(a[i]*x^i,i=1..8) +
>
sum(b[j]*x^j,j=1..10); 5 x + 10 x2 + 15 x3 + 20 x4 + 25 x5 + 30 x6 + 35 x7 + 40 x8 + 27 x9 + 30 x10
>
b[j] := d*j; bj := d j
>
sum(a[i]*x^i,i=1..8) +
>
sum(b[j]*x^j,j=1..10);
3.11. VOORSTELLING VAN REEKSEN
77
2 x + 4 x2 + 6 x3 + 8 x4 + 10 x5 + 12 x6 + 14 x7 + 16 x8 + d x + 2 d x2 + 3 d x3 + 4 d x4 + 5 d x5 + 6 d x6 + 7 d x7 + 8 d x8 + 9 d x9 + 10 d x10 >
collect(%,x);
10 d x10 + 9 d x9 + (16 + 8 d) x8 + (14 + 7 d) x7 + (12 + 6 d) x6 + (10 + 5 d) x5 + (8 + 4 d) x4 + (6 + 3 d) x3 + (4 + 2 d) x2 + (2 + d) x
Merk op dat Maple niet automatisch sorteert naar de machten van x.
78
HOOFDSTUK 3. HET PROBLEEM VAN DE DATAREPRESENTATIE
Hoofdstuk 4 Algebra van polynomen 4.1
Algemene definities en eigenschappen
In 3.4.2 hebben we het begrip GGD van gehele getallen gebruikt, in de onderstelling dat dit begrip gekend was. Algemeen kunnen we het begrip GGD van twee elementen van een integriteitsgebied als volgt defini¨eren. Zij D een integriteitsgebied, dan hebben we:
4.1.1
Deler
Voor a, b ∈ D wordt a een deler van b genoemd als b=ax voor een zekere x ∈ D. We zeggen dan : “a deelt b” en noteren dit als a|b. b wordt een veelvoud van a genoemd.
4.1.2
GGD
Voor a, b ∈ D wordt c ∈ D een grootste gemene deler genoemd (GGD) van a en b als c|a en c|b en als bovendien c een veelvoud is van elke andere gemene deler van a en b. Merk op dat “grootste” derhalve slaat op de parti¨ele orderelatie “is deler van”. 79
80
4.1.3
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Euclidisch domein
Een Euclidisch domein is een integriteitsgebied D waarop een valuatie v : D − {0} → N gedefinieerd is, (N := natuurlijke getallen), met de volgende eigenschappen: P1 : ∀a, b ∈ D − {0} v(a b) ≥ v(a); P2 : ∀a, b ∈ D en b 6= 0 ∃q, r ∈ D a = b q + r
4.1.4
met ofwel r = 0 of v(r) < v(b)
Eigenschap (veralgemening van 3.4.2)
Zij D een Euclidisch domein, a, b ∈ D (b 6= 0) en q, r ∈ D z´o dat a = b q + r met r = 0 of v(r) < v(b), dan is GGD(a, b) = GGD(b, r) Bewijs als oefening
4.1.5
Polynomen in ´ e´ en veranderlijke
Voor een commutatieve ring R noteren we R[x] de verzameling van uitdrukkingen van de gedaante a(x) =
m X
ak xk
k=0
ak ∈ R , 0 ≤ k ≤ m, m ∈ N
We noemen dit de polynomen in ´e´en variabele x over R. De graad deg(a(x)) van een van nul verschillend polynoom is het grootste natuurlijk getal n waarvoor an 6= 0. In zijn standaardnotatie noteren we dan a(x) als: a(x) =
n X
ak xk
k=0
an 6= 0
In het geval dat ak = 0 voor elke k wordt a(x) het nulpolynoom genoemd, en ook nog genoteerd als 0. We merken op dat in Maple > degree(0,x); 0
4.1. ALGEMENE DEFINITIES EN EIGENSCHAPPEN
4.1.6
81
Eigenschap
Als F een veld is, dan is F[x] een Euclidisch domein met valuatie v(a(x)) = deg(a(x))
(Bewijs dit als oefening) In het bijzonder is dus Q[x] een Euclidisch domein. Derhalve hebben we voor gegeven a(x), b(x) ∈ Q[x] ∃q(x), r(x) ∈ Q(x) z´o dat a(x) = b(x) q(x) + r(x) met r(x) = 0 of deg(r(x)) < deg(b(x))
4.1.7
De Euclidische deling voor polynomen
In Maple is de implentatie voorzien van het klassieke delingsalgoritme dat voor gegeven a(x), b(x) het quotient en de rest geeft: q(x) := quo(a(x), b(x), x) en r(x) := rem(a(x), b(x), x). Het uitgebreide algoritme van Euclides uit 3.4.5 kan nu overgenomen worden op voorwaarde dat we de definitie van |a| en u(a) kunnen uitbreiden tot n(a(x)) en u(a(x)). Daartoe beschouwen we de volgende definities:
4.1.8
Toegevoegde elementen - Units
• Twee elementen a, b van een integriteitsgebied D worden toegevoegd genoemd, als a|b en b|a Die relatie is duidelijk een equivalentierelatie. Voorbeelden – In het geval van Z bestaan de equivalentieklassen uit {0}, {−1, 1}, {−2, 2}, . . .
82
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN – In het geval van polynomen over een veld F zijn de toegevoegde elementen van p ∈ F [x] van de gedaante ap met a ∈ F . • Een element u ∈ D wordt een unit genoemd als het een multiplicatief invers heeft in D.
Eigenschap Als a en b toegevoegde elementen zijn (6= 0) in een integriteitsgebied D, dan bestaat er een u ∈ D z´o dat a = ub en u is een unit Bewijs a|b ⇔ b = xa b|a ⇔ a = ub Daaruit volgt dat a = u(xa) = (ux)a = 1a. Gelet op de schrappingswet volgt daaruit ux = xu = 1 en is dus u een unit.
4.1.9
Uniek-factorisatie domein (UFD)
Definitie: Een element p ∈ D − {0} wordt irreductibel of priemelement genoemd, a.s.a. • p geen unit is, en • als p = a b dan a of b een unit is. Definitie: Een integriteitsgebied D wordt een uniek-factorisatie domein (UFD) genoemd, a.s.a voor alle a ∈ D − {0} • ofwel a een unit is, • ofwel a kan geschreven worden als een eindig product van priemelementen, d.w.z a = p1 p2 . . . pn met priemelementen pi (1 ≤ i ≤ n), waarbij deze factorisatie uniek is, op de keuze van toegevoegde elementen en de ordening na.
4.1.10
Unit-normale elementen
Uit de definitie van priemelement volgt dat als p priemelement is, dan ook elk toegevoegd element van p een priemelement is. Definitie Zij D een UFD, dan kiezen we in elke equivalentieklasse van een priemelement een representant (willekeurig), en we noemen deze elementen unit-normaal
4.2. GGD VAN POLYNOMEN OVER Q
83
Voor een priemelement p noteren we nu het normaal deel van p, zijnde de representant uit de klasse van toegevoegde elementen van p, als n(p). We defini¨eren het unit-deel u(p) van p als het element dat voldoet aan p = u(p)n(p). Wanneer er nu unit-normale elementen gedefinieerd zijn, kunnen we ons beperken tot de unit-normale priemelementen in de ontbinding. Elke priemontbinding kan dan herleid worden naar een normale gedaante. Definitie: Zij D een UFD dan is elke a ∈ D te ontbinden als a = pe11 pe22 . . . penn met pi priemelementen. We defini¨eren nu n(a) = n(p1 )e1 n(p2 )e2 . . . n(pn )en Daar we in een UFD werken is n(a) ondubbelzinnig bepaald. Het unit-deel u(a) van a wordt nu gedefinieerd als a = u(a)n(a) We kunnen nu elke priemontbinding herleiden naar een normale gedaante: a = u(a)n(p1 )e1 n(p2 )e2 . . . n(pn )en waarbij n(pi ) unit-normale priemelementen zijn, ei > 0 en pi 6= voor i 6= j. Deze vorm wordt de unit-normale factorisatie van a genoemd
4.1.11
Eigenschap
Als D een uniek-factorisatie domein is, dan is D[x] ook een UFD.
4.2
GGD van polynomen over Q
In het geval van Q[x] kunnen we als unit-normale polynomen de monische polynomen nemen, dit zijn de polynomen met hoogstegraadsco¨effi¨ent = 1. De units van Q[x] zijn de van nul verschillende constante polynomen. Gelet op de bovenstaande definities hebben we a(x) ; u(a(x)) = an an n(0) = 0; u(0) = 1 n(a(x)) =
84
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
In Maple is lcoeff(a(x),x) en standaardfunctie en kunnen we n als volgt defini¨eren. 4.2 GGD van polynomen over Q (comp42.mws) >
restart;
In Maple is lcoeff(a(x),x) een standaardfunctie >
a(x):=a_3*x^3+a_2*x^2+a_0; a(x) := a 3 x3 + a 2 x2 + a 0
>
lcoeff(a(x),x); a 3
>
b(x):=-4*x^3+2*x+3; b(x) := −4 x3 + 2 x + 3
>
lcoeff(b(x),x); −4
Implementatie van N(a(x)); >
N := proc(a,x)
>
sort(collect(a/lcoeff(a,x),x),x);
>
end:
>
N(a(x),x); x3 +
>
a 2 x2 a 0 + a 3 a 3
N(b(x),x); x3 −
4.2.1
1 3 x− 2 4
Algoritme van Euclides
Het algoritme van Euclides (3.4.3) blijft gelden op het polynoomdomein Q[x]. Voorbeeld In het Euclidisch domein Q[x] beschouwen we a(x) = 48x3 − 84x2 + 42x − 36, b(x) := −4x3 − 10x2 + 44x − 30 Toepassing van het algoritme 3.4.3 geeft ons de volgende sequentie van elementen r(x), c(x), d(x).
85
4.2. GGD VAN POLYNOMEN OVER Q
iteratie
r(x)
−
−
1 2
x2 + − 17 4 535 x 289
3
c(x)
d(x)
x3 − 47 x2 + 78 x −
95 x 8
−
−
33 4
x3 + 52 x2 − 11x +
1605 578
− 17 x2 + 4 535 x 289
0
95 x 8
−
−
3 4
x3 + 25 x2 − 11x +
15 2
x2 + − 17 4
33 4
535 x 289
1605 578
95 x 8
−
−
15 2
33 4
1605 578
0
We vinden dan dat de unit-normale GGD gegeven wordt door g(x) = n(
1605 3 535 x− )=x− 289 578 2
We hebben deze resultaten bekomen aan de hand van de volgende worksheet (comp421.mws) > >
restart; with(linalg):
Warning, new definition for norm Warning, new definition for trace >
a(x):=48*x^3-84*x^2+42*x-36; a(x) := 48 x3 − 84 x2 + 42 x − 36
>
b(x):=-4*x^3-10*x^2+44*x-30; b(x) := −4 x3 − 10 x2 + 44 x − 30
>
n := proc(a,x) sort(collect(a/lcoeff(a,x),x),x); end: Alg_Eucl := proc(a,b,x) # door S.Van Wonterghem (1998) # aangepast door A.Hoogewijs (1999) local c,d,H,i,j,k,M,q,r; c := n(a,x); d := n(b,x); H :=
>
array(1..max(degree(a,x),degree(b,x))+1,1..4);
> > > > > > > > >
86
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
>
for i from 1 to rowdim(H) do for j from 1 to coldim(H) do H[i,j] := ‘_‘; od; od; H[1,3] := sort(c,x); H[1,4] := sort(d,x); i := 2; while testeq(d,0)=false do r := rem(c,d,x); c := d; d := r; H[i,1]:=i-1;H[i,2] := sort(r,x); H[i,3] := sort(c,x); H[i,4] := sort(d,x); i := i+1; od; [n(H[i-1,3],x),evalm(H)]; end:
>
Alg_Eucl(a(x),b(x),x);
> > > > > > > > > > > > > > > >
7 2 7 3 5 15 x + x− x3 + x2 − 11 x + 4 8 4 2 2 17 95 33 1 − 17 x2 + 95 x − 33 x3 + 5 x2 − 11 x + 15 − x2 + x− 3 4 8 4 2 2 4 8 4 x − , 535 1605 17 95 33 535 1605 2 x− − x2 + x− x− 2 289 578 4 8 4 289 578 535 1605 3 0 x− 0 289 578
>
x3 −
gcdex(a(x),b(x),x); x−
3 2
4.2. GGD VAN POLYNOMEN OVER Q
4.2.2
87
Uitgebreid algoritme van Euclides
Het uitgebreid algoritme van Euclides blijft eveneens gelden over Q[x]. We kunnen daarvoor de volgende Maple-sessie beschouwen: (comp422.mws) >
restart;
>
with(linalg):
Warning, new definition for norm Warning, new definition for trace >
a := 48*x^3-84*x^2+42*x-36; a := 48 x3 − 84 x2 + 42 x − 36
>
b := -4*x^3-10*x^2+44*x-30; b := −4 x3 − 10 x2 + 44 x − 30
1. het (standaard)commando gcdex We kunnen het commando gcdex eveneens gebruiken voor het bepalen van de polynomen s en t (zie uitgebreid algoritme van Euclides). Hiertoe voegen we de namen van deze polynomen toe aan het commando gcdex als vierde en vijfde argument. >
gcdex(a,b,x,’s’,’t’); 3 − +x 2
>
s; 3 17 + x 214 6420
>
t; 17 71 + x 2140 535
2. het algoritme manueel implementeren in Maple >
c := a/lcoeff(a,x);
88
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
c := x3 − >
d := b/lcoeff(b,x); d := x3 +
> >
7 2 7 3 x + x− 4 8 4
c1 := 1: d1 := 0: q := quo(c,d,x);
5 2 15 x − 11 x + 2 2
c2 := 0:
d2 := 1:
q := 1 >
r := collect(c-q*d,x); r := −
>
33 17 2 95 − x + x 4 4 8
r1 := collect(c1-q*d1,x); r1 := 1
>
r2 := collect(c2-q*d2,x); r2 := −1
>
c := d; c := x3 +
> >
c1 := d1: d := r;
c2 := d2:
d := − > >
15 5 2 x − 11 x + 2 2
33 17 2 95 − x + x 4 4 8
d1 := r1: d2 := r2: q := quo(c,d,x); q := −
4 360 x− 17 289
4.2. GGD VAN POLYNOMEN OVER Q >
r := collect(c-q*d,x); r := −
>
1605 535 + x 578 289
r1 := collect(c1-q*d1,x); r1 :=
>
4 360 + x 289 17
r2 := collect(c2-q*d2,x); r2 := −
>
c := d; c := −
>
c1 := d1:
>
d := r;
33 17 2 95 − x + x 4 4 8
c2 := d2:
d := − >
d1 := r1:
>
q := quo(c,d,x);
1605 535 + x 578 289
d2 := r2:
q := − >
4 71 − x 289 17
4913 3179 x+ 2140 1070
r := collect(c-q*d,x); r := 0
>
r1 := collect(c1-q*d1,x); r1 :=
>
289 289 2 1156 x + x− 535 535 107
r2 := collect(c2-q*d2,x);
89
90
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
r2 := − >
289 2 289 289 x + x− 535 2140 1070
c := d; c := −
>
c1 := d1:
>
d := r;
1605 535 + x 578 289
c2 := d2:
d := 0 >
g := c/lcoeff(c,x); 3 g := − + x 2
>
s := c1/(lcoeff(a,x)*lcoeff(c,x)); s :=
>
t := c2/(lcoeff(b,x)*lcoeff(c,x)); t :=
>
3 17 + x 214 6420
17 71 + x 2140 535
collect(s*a+t*b,x); 3 − +x 2
3. de procedure Ualg Eucl Ook de procedure Ualg Eucl (die hieronder wordt gedefinieerd) bepaalt de ontbinding van de grootste gemene deler volgens het algoritme van Euclides. Het resultaat wordt hier weergegeven in de vorm van een matrixproduct. >
Ualg_Eucl := proc(a,b,x) # door S.Van Wonterghem
>
(1998)
>
local c,d,g,H,q,r,i,A,B;
>
91
4.2. GGD VAN POLYNOMEN OVER Q > > > > > > > > > > > > > > > > > > > > >
c := a/lcoeff(a,x); d := b/lcoeff(b,x); H := array(1..2,1..3,[[1,0,0],[0,1,0]]); while testeq(d,0) = false do q := quo(c,d,x); r := simplify(c-q*d); for i from 1 to 2 do H[i,3] := H[i,1]-q*H[i,2]; H[i,1] := H[i,2]; H[i,2] := H[i,3]; od; c := d; d := r; od; g:=c/lcoeff(c,x); A := [g,[factor(H[1,1]/(lcoeff(a,x)*lcoeff(c,x))), factor(H[2,1]/(lcoeff(b,x)*lcoeff(c,x)))]]; B := array(1..2,1..1,[[a],[b]]); factor(A[1])=[A[2][1],A[2][2]]*evalm(B); end: Ualg_Eucl(a,b,x); 3 3 17 71 17 − +x=[ + x, + x] 2 214 6420 2140 535
>
"
48 x3 − 84 x2 + 42 x − 36 −4 x3 − 10 x2 + 44 x − 30
#
gcd(a,b)/lcoeff(gcd(a,b),x); 3 − +x 2
4. Controle met de procedure test UAE : We kunnen in Maple niet enkel de ontbinding van de grootste gemene deler bepalen maar deze ook verifi¨eren. Hiervoor kunnen we gebruik maken van de onderstaande procedure test UAE. Deze procedure maakt gebruik van twee argumenten : 1. de lijst van de beschouwde polynomen 2. een lijst bestaande uit de grootste gemene deler en de polynomen uit de ontbinding > test_UAE := proc(m,n)
92
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN > > > >
local i; convert(n,list); if testeq(n[1]=sum(m[i]*n[i+1],i=1..nops(m))) then RETURN(‘De ontwikkeling is in orde
>
¡); else RETURN(‘De ontwikkeling is foutief
>
¡);
>
fi;
> >
end: test_UAE([a,b],[x-3/2,3/214+17/6420*x,71/2140
>
+17/535*x]);
>
De ontwikkeling is in orde !
4.2.3
Diofantische polynoom-vergelijking
Probleemstelling: Gegeven: a(x), b(x), c(x) ∈ Q[x]. Gevraagd: bestaan er σ(x), τ (x) ∈ Q[x] | σ(x) a(x) + τ (x) b(x) = c(x) De volgende stelling geeft voldoende voorwaarden voor het bestaan en de uniciteit van de oplossing van deze diofantische polynoom-vergelijking. Merk op dat er een speciaal geval van de stelling ontstaat wanneer a(x) en b(x) onderling ondeelbaar zijn. In dat geval kan de gegeven diofantische vergelijking opgelost worden voor elke c(x).
4.2.4
Stelling
Zijn a(x), b(x) van nul verschillende polynomen uit Q[x] en g(x) = GGD(a(x), b(x)) ∈ Q[x]. Dan bestaan er voor elk polynoom c(x) ∈ Q[x] waarvoor g(x)|c(x) unieke polynomen σ(x), τ (x) ∈ Q[x] z´o dat σ(x) a(x) + τ (x) b(x) = c(x)
(4.1)
deg(σ(x)) < deg(b(x)) − deg(g(x))
(4.2)
93
4.2. GGD VAN POLYNOMEN OVER Q Als bovendien deg(c(x)) < deg(a(x)) + deg(b(x)) − deg(g(x)) dan is deg(τ (x)) < deg(a(x)) − deg(g(x))
(4.3)
Bewijs Bestaan: Wanneer we UAE toepassen, vinden we s(x), t(x) ∈ Q[x] z´o dat s(x) a(x) + t(x) b(x) = g(x) Gelet op het feit dat g(x)|c(x)
s(x)
c(x) c(x) a(x) + t(x) b(x) = c(x) g(x) g(x)
(4.4)
Derhalve hebben we een oplossing gevonden voor (4.1) σ(x) = s(x)
c(x) g(x)
τ (x) = t(x)
c(x) g(x)
De voorwaarde (4.2) betreffende de graad zal echter niet noodzakelijk vervuld zijn voor deze oplossing. Delen we de beide leden van (4.4) door g(x), dan hebben we σ(x)
a(x) b(x) c(x) + τ (x) = g(x) g(x) g(x)
Uit de Euclidische deling van σ(x) door σ(x) =
(4.5)
b(x) , vinden we nu q(x), r(x) ∈ Q[x] z´o dat g(x)
b(x) q(x) + r(x) g(x)
(4.6)
met deg(r(x)) < deg(b(x)) − deg(g(x)) Stellen we nu σ(x) = r(x) dan is reeds voldaan aan (4.2). Stellen we τ (x) = a(x) τ (x) + q(x) , dan volgt uit (4.5) en (4.6) g(x)
σ(x)
b(x) a(x) a(x) c(x) + (q(x) + τ (x)) = g(x) g(x) g(x) g(x)
en dus σ(x) waaruit (4.1) volgt.
a(x) b(x) c(x) + τ (x) = g(x) g(x) g(x)
94
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Uniciteit Zijn σ1 (x), τ1 (x) ∈ Q[x] en σ2 (x), τ2 (x) ∈ Q[x] twee paren van polynomen die voldoen aan (4.1) en (4.2). Dan kunnen we voor die twee stellen oplossingen uit (4.1) de volgende betrekkingen afleiden: σ1 (x)
b(x) c(x) a(x) + τ1 (x) = g(x) g(x) g(x)
σ2 (x)
b(x) c(x) a(x) + τ2 (x) = g(x) g(x) g(x)
Na aftrekking hebben we: (σ1 (x) − σ2 (x)) Gelet op het feit dat
a(x) b(x) + (τ1 (x) − τ2 (x)) =0 g(x) g(x)
(4.7)
a(x) b(x) en onderling ondeelbaar zijn, moet dus g(x) g(x) b(x) |(σ1 (x) − σ2 (x)) g(x)
(4.8)
Maar gelet op de voorwaarde (4.2) betreffende de graden, die vervuld zijn voor σ1 (x) en σ2 (x) is b(x) deg(σ1 (x)) < deg( ) g(x) deg(σ2 (x)) < deg(
b(x) ) g(x)
en dus deg(σ1 (x) − σ2 (x)) ≤ max{deg(σ1 (x)), deg(σ2 (x))} < deg( Uit (4.8) en (4.9) volgt dus dat σ1 (x) − σ2 (x) = 0 moet zijn. Uit (4.7) volgt dat ook τ1 (x) − τ2 (x) = 0 moet zijn, aangezien
b(x) 6= 0 g(x)
Derhalve zijn σ1 (x) = σ2 (x) en
τ1 (x) = τ2 (x)
b(x) ) g(x)
(4.9)
95
4.2. GGD VAN POLYNOMEN OVER Q Laatste voorwaarde i.v.m. de graad (4.3) Uit (4.1) volgt (c(x) − σ(x) a(x)) τ (x) = b(x) en dus deg(τ (x)) = deg(c(x) − σ(x) a(x)) − deg(b(x))
(4.10)
Als nu deg(c(x)) ≥ deg(σ(x)a(x)) dan volgt uit (4.10) dat deg(τ (x)) ≤ deg(c(x)) − deg(b(x)) < deg(a(x)) − deg(g(x)) als deg(c(x)) < deg(a(x)) + deg(b(x)) − deg(g(x)) zoals vooropgegeven. Als deg(c(x)) < deg(σ(x)a(x)) dan volgt uit (4.10) deg(τ (x)) = deg(σ(x) a(x)) − deg(b(x))
(4.11)
Gelet op (4.2) is deg(σ(x)) < deg( en dus deg(σ(x) a(x)) < deg(
b(x) ) g(x) a(x) b(x) ) g(x)
Uit (4.11) volgt dan dat a(x) ) + deg(b(x)) − deg(b(x)) g(x) = deg(a(x)) − deg(g(x))
deg(τ (x)) < deg(
qed
4.2.5
Reductie van rationale vormen
In het voorgaande hoofdstuk hebben we het probleem gesteld van de reductie van rationale wortelvormen, naar wortelvormen zonder wortels in de noemer. Voorbeeld: Stel dat we
2 3+1 √ wensen te reduceren. Dan zien we dat 3 3 een wortel is van het polynoom p(α) = (α3 −3) ∈ Q[α]. Dan hebben we reeds gezien dat we op zoek zijn naar een polynoom d1 (α) ∈ Q[α] zodanig dat n(α).d1 (α) n(α) = d(α) d(α).d1 (α) √ 3
96
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
met d(α).d1 (α) ∈ Q. Gelet op het feit dat d(α) en p(α) onderling ondeelbaar zijn (wat meestal het geval is), bestaan er gelet op stelling (4.2.4) polynomen d1 (α), d2(α) ∈ Q[α] z´o dat d1 (α) d(α) + d2 (α) p(α) = c voor elke c ∈ Q. Gelet op p(α) = 0 is dan d1 (α) d(α) = c Voor dit voorbeeld vinden we (α + 1)(α2 − α + 1) − (α3 − 3) = 4
Dus is d1 (α) = α2 − α + 1 en
2 d1 (α) 2 (α2 − α + 1) 2 = = (α + 1) (α + 1) d1 (α) 4 Derhalve is
√ √ 2 (( 3 3)2 − 3 3 + 1) √ = 3 2 3+1
In Maple: (comp425.mws) > 2/(3^(1/3)+1);
2 31/3 + 1 >
radsimp(%,’ratdenom’); 1 1 1/3 1 2/3 − 3 + 3 2 2 2
4.2.6
Ontbinding van rationale vormen in partieel breuken
Stel dat a(x) en b(x) onderling ondeelbaar zijn, dan volgt uit stelling (4.2.4) dat er polynomen σ(x) en τ (x) kunnen gevonden worden waarvoor geldt c(x) τ (x) σ(x) = + a(x)b(x) a(x) b(x) met deg(τ (x)) < deg(a(x)) en
deg(σ(x)) < deg(b(x))
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
4.3 4.3.1
97
Het Primitief Algoritme van Euclidisch GGD van polynomen over Z
Z[x] het domein van de polynomen over Z vormt een integriteitsgebied, maar het is niet langer een Euclidisch domein voor de natuurlijke valuatie v(a(x)) = deg(a(x)). Beschouw bijvoorbeeld de polynomen a(x) = 3x3 + x2 + x + 5 b(x) = 5x2 − 3x + 1 Dan kunnen er nu geen polynomen q(x), r(x) ∈ Z[x] gevonden worden z´o dat a(x) = b(x) q(x) + r(x) met deg(r(x)) < deg(b(x)) = 2 Stel dat het wel zo zou zijn, dan moet q(x) = q1 x + q0 en r(x) = r1 x + r0 met q1 , q0 , r1 , r0 ∈ Z. We hebben dan 3x3 + x2 + x + 5 = (5x2 − 3x + 1)(q1 x + q0 ) + (r1 x + r0 ) Daaruit zou moeten volgen dat 3 = 5 q1 Gelet op het feit dat deze vergelijking geen oplossing heeft in Z, is dit onmogelijk. Aangezien nu Z[x] geen Euclidisch domein is, kunnen we dus niet langer het Algoritme van Euclides gebruiken om de GGD te bepalen. We merken op dat dit probleem zich nu niet alleen stelt voor het polynoomdomein Z[x], maar voor alle polynoomdomeinen in meerdere variabelen. We hebben immers gezien dat een polynoom uit bv. D[x1 , x2 ] kan opgevat worden als een polynoom uit D[x2 ][x1 ]. Daarbij is evenwel D[x2 ] geen veld, maar een UFD. Derhalve is ook D[x2 ][x1 ] een UFD en bestaat de GGD voor twee gegeven polynomen a(x1 , x2 ), b(x1 , x2 ) ∈ D[x1 , x2 ]
4.3.2
Voorbeeld
We kunnen dit illustreren aan de hand van het volgende voorbeeld: Stel
a(x) = 48x3 − 84x2 + 42x − 36 b(x) = −4x3 − 10x2 + 44x − 30
98
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
polynomen over Z[x]. Gevraagd: Bepaal de GGD(a(x), b(x)) over Z[x] Gebruikmakend van de factorisatie van a(x) en b(x) over Z[x] a(x) = 2.3(2x − 3).(4x2 − x + 2) b(x) = (−1).(2)(x − 1).(x + 5)(2x − 3) vinden we GGD(a(x), b(x)) = 2.(2x − 3) Het is evenwel niet erg praktisch om op deze manier de GGD van polynomen a(x), b(x) ∈ D[x] te gaan berekenen, waarbij x = x1 , . . . xn . In Maple (comp43.mws): 4.3.2 Voorbeeld GGD van polynomen over Z > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected
Manuele werkwijze in Maple >
>
>
>
>
>
>
a(x):= 48*x^3 -84*x^2 + 42*x -36; a(x) := 48 x3 − 84 x2 + 42 x − 36 b(x):=-4*x^3-10*x^2 + 44*x-30; b(x) := −4 x3 − 10 x2 + 44 x − 30 gcd(a(x),b(x)); 4x−6 collect(a(x),x); 48 x3 − 84 x2 + 42 x − 36 collect(b(x),x); −4 x3 − 10 x2 + 44 x − 30 gcd(gcd(gcd(48,-84),42),-36); 6 gcd(gcd(gcd(-4,-10),44),-30); 2
Maple beschikt over een implementatie van de content, zodat we die als volgt kunnen opvragen:
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH >
content(a(x),x); 6
>
content(b(x),x); 2
>
a1(x):=a(x)/6; a1(x) := 8 x3 − 14 x2 + 7 x − 6
Maple heeft een operator ”primpart”: >
>
a1(x):=sort(primpart(a(x),x)); b1(x):=b(x)/2;
a1(x) := 8 x3 − 14 x2 + 7 x − 6 b1(x) := −2 x3 − 5 x2 + 22 x − 15
>
>
>
b1(x):=sort(primpart(b(x),x)); factor(a1(x)); factor(b1(x));
b1(x) := −2 x3 − 5 x2 + 22 x − 15 (2 x − 3) (4 x2 − x + 2) −(x + 5) (x − 1) (2 x − 3)
>
ggd(a(x),b(x)) :=2*(2*x-3);
ggd(48 x3 − 84 x2 + 42 x − 36, −4 x3 − 10 x2 + 44 x − 30) := 4 x − 6 Uitwerking van het PAE-algoritme: >
c(x):=sort(a(x)/6); c(x) := 8 x3 − 14 x2 + 7 x − 6
>
d(x):=sort(primpart(b(x),x)); d(x) := −2 x3 − 5 x2 + 22 x − 15
De afspraken i.v.m. het teken zijn evenwel niet gerespecteerd:
Dus bekijken we: >
d(x):=sort(sign(b(x))*primpart(b(x),x)); d(x) := 2 x3 + 5 x2 − 22 x + 15
Maple heeft eveneens de pseudo-remainder geimplenteerd:
99
100 >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN r(x):=sort(collect(prem(c(x),d(x),x),x),x); r(x) := −68 x2 + 190 x − 132
>
c(x):=d(x);
>
c(x) := 2 x3 + 5 x2 − 22 x + 15 d(x):=sort(sign(r(x))*primpart(r(x),x));
>
>
>
>
>
>
>
d(x) := 34 x2 − 95 x + 66 r(x):=sort(collect(prem(c(x),d(x),x),x),x); r(x) := 4280 x − 6420 c(x):=d(x); c(x) := 34 x2 − 95 x + 66 d(x):=sort(sign(r(x))*primpart(r(x),x)); d(x) := 2 x − 3 r(x):=sort(collect(prem(c(x),d(x),x),x),x); r(x) := 0 c(x):=d(x); c(x) := 2 x − 3 d(x):=sort(sign(r(x))*primpart(r(x),x)); d(x) := 0 g(x):=gcd(6,2)*c(x); g(x) := 4 x − 6
2. de procedure PAE In het onderstaande vindt de gebruiker de procedure PAE voor het berekenen van de grootste gemene deler van twee polynomen over de verzameling van de gehele getallen. > PAE := proc(a,b,x) > # door S.Van Wonterghem > local c,d,H,i,j,r,q,beta,l; > c := sign(a)*primpart(a,x); > d := sign(b)*primpart(b,x); > ### WARNING: degree(0,x) now returns -infinity >
### WARNING: degree(0,x) now returns -infinity
>
H := array(1..max(degree(a,x),degree(b,x))+1,1..3); for i from 1 to rowdim(H) do for j from 1 to coldim(H) do
> >
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH >
H[i,j] := ‘_‘;
>
od; od;
>
H[1,2] := sort(c,x); H[1,3] := sort(d,x);
>
i := 2;
>
while testeq(d,0)=false do ### WARNING: degree(0,x) now returns -infinity
>
101
>
beta := abs(coeff(d,x^degree(d,x))); ### WARNING: degree(0,x) now returns -infinity
>
### WARNING: degree(0,x) now returns -infinity
>
l := degree(c,x)-degree(d,x)+1;
>
q := quo(beta^l*c,d,x);
>
r := rem(beta^l*c,d,x);
>
c := d;
>
if type(r,realcons)=false
>
then d := sign(r)*primpart(r,x);
>
else d := r;
>
fi;
>
H[i,1] := sort(r,x); H[i,2] := sort(c,x); H[i,3] := sort(d,x);
>
i := i+1;
>
od;
>
[gcd(content(a,x),content(b,x))*sort(H[i-1,2],x),evalm(H)];
>
end:
>
De procedure PAE geeft een tweeledige resultaat. De eerste component is de gezochte grootste gemene deler. De tweede component van het resultaat is een tabel die de tussenresultaten bevat (nl. in de eerste kolom vindt men het polynoom c, in de tweede kolom het polynoom d en in de derde kolom het polynoom r), bepaalt volgens het primitief algoritme van Euclides. >
>
>
a := 48*x^3 -84*x^2 + 42*x -36; a := 48 x3 − 84 x2 + 42 x − 36
b :=-4*x^3-10*x^2 + 44*x-30; b := −4 x3 − 10 x2 + 44 x − 30 PAE(a,b,x);
4 x − 6,
8 x3 − 14 x2 + 7 x − 6 2 x3 + 5 x2 − 22 x + 15 −68 x2 + 190 x − 132 2 x3 + 5 x2 − 22 x + 15 34 x2 − 95 x + 66 4280 x − 6420 34 x2 − 95 x + 66 2x− 3 0 2x− 3 0
102
4.3.3
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Primitief polynoom
Zij D een UFD en a(x) ∈ D[x], dan wordt a(x) primitief genoemd, indien a(x) unit-normaal is en de co¨effici¨enten onderling ondeelbaar. Definitie: Zij D een integriteitsgebied, dan kunnen we de GGD van n elementen a1 , . . . , an ∈ D (n > 2) recursief als volgt defini¨eren: GGD(a1 , . . . , an ) = GGD(GGD(a1 , . . . , an−1 ), an ) De n (≥ 2) elementen worden onderling ondeelbaar genoemd als GGD(a1 , . . . , an ) = 1
4.3.4
Content en primitief deel van een polynoom
Zij D[x] een polynoomdomein over een UFD D, dan is de content van een niet-nul polynoom a(x) cont(a(x)) de (unieke unit-normale) GGD van de co¨effici¨enten van a(x). Elk polynoom a(x) kan dan op unieke manier geschreven worden als a(x) = u(a(x)).cont(a(x)).pp(a(x)), waarbij pp(a(x)) een primitief polynoom is, het primitief deel van a(x) genoemd. In Maple (comp434.mws) > restart; > a(x):= 48*x^3 -84*x^2 + 42*x -36; a(x) := 48 x3 − 84 x2 + 42 x − 36 >
sign(a(x)); 1
>
b(x):=-4*x^3-10*x^2 + 44*x-30; b(x) := −4 x3 − 10 x2 + 44 x − 30
>
sign(b(x));
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
103
−1 >
content(a(x),x); 6
>
content(b(x),x); 2
>
primpart(a(x)); 8 x3 − 14 x2 + 7 x − 6
>
primpart(b(x)); −2 x3 − 5 x2 + 22 x − 15
>
content(b(x),x,’pp’); 2
>
pp; −2 x3 − 5 x2 + 22 x − 15
OPGELET! Maple houdt geen rekening met het teken in de berekening van primpart. pp(a(x)) uit de nota’s wordt derhalve gegeven door: >
PP:=proc(a,x)
>
sign(a)*primpart(a,x);
>
end:
>
PP(b(x),x); 2 x3 + 5 x2 − 22 x + 15
104
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
4.3.5
Lemma van Gauss
GGD(a(x), b(x)) = GGD(cont(a(x)), cont(b(x)))GGD(pp(a(x)), pp(b(x))) We nemen nu aan dat we weten hoe we de GGD van de content van a(x) en b(x) in D moeten bereken, zodat we ons nu kunnen beperken tot het bepalen van de GGD van de primitieve polynomen pp(a(x)) en pp(b(x)). Voor het voorbeeld (4.3.2) hebben we u(a(x)) = 1 cont(a(x)) = 6 pp(a(x)) = 8x3 − 14x2 + 7x − 6 u(b(x)) = −1 cont(b(x)) = 2 pp(b(x)) = 2x3 + 5x2 − 22x + 15 In Maple (comp435.mws): > restart; > pp:=proc(a); > sign(a)*primpart(a); > end: > a(x):=48*x^3-84*x^2+42*x-36; a(x) := 48 x3 − 84 x2 + 42 x − 36 > b(x):=-4*x^3-10*x^2+44*x-30; b(x) := −4 x3 − 10 x2 + 44 x − 30 > pf:=proc(a); > [sign(a),content(a),pp(a)]; > end: > pf(a(x)); >
pf(b(x));
[1, 6, 8 x3 − 14 x2 + 7 x − 6] [−1, 2, 2 x3 + 5 x2 − 22 x + 15]
4.3.6
Pseudo-deling van polynomen
Het Euclidisch algoritme steunt op de achtereenvolgende berekeningen van resten die gedefinieerd zijn aan de hand van de delingseigenschap van een Euclidisch domein. Voor een niet-Euclidisch domein D[x] kunnen we nu een analoge pseudo-delingseigenschap defini¨eren, als D een UFD is.
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
105
We kunnen deze eigenschap verduidelijken aan de hand van een voorbeeld over Z[x]. Stel
a(x) = 3x3 + x2 + x + 5 b(x) = 5x2 − 3x + 1
Als we de deling uitvoeren over Q[x], krijgen we
14 52 111 3 ) (3x3 + x2 + x + 5) = (5x2 − 3x + 1)( x + ) + ( x + 5 25 25 25 Daarbij merken we op dat de hoogstegraadsco¨effici¨ent van b(x) 5 is, en dat de noemers die voorkomen in q(x) en r(x) van de gedaante 5 en 52 zijn. Stel nu dat we voor dit voorbeeld zouden gestart zijn met de polynomen a(x) = 52 a(x) en b(x) Dan krijgen we 52 (3x3 + x2 + x + 5) = (5x2 − 3x + 1)(15x + 14) + (52x + 111)
(4.12)
(4.12) is een voorbeeld van de pseudo-delingseigenschap die geldig is voor elk polynoomdomein D[x] over een UFD D. De veralgemening van deze eigenschap vinden we door de deling van polynomen van nabij te gaan bekijken. Stel deg(a(x)) = m, deg(b(x)) = n (m ≥ n ≥ 0) en de hoogste-graadsco¨effici¨ent van b(x) : β. Dan zien we bij de deling van a(x) door b(x) dat voor wat de bewerkingen in D betreft, we enkel delingen krijgen door β en dat deze delingen m − n + 1 keer voorkomen. am xm + . . . + a0 βxn + bn−1 xn−1 + . . . + b0 am m−n x ... β
4.3.7
Pseudodelingseigenschap (PDE)
Zij D[x] een polynoomdomein over een UFD D. Voor elke a(x), b(x) ∈ D[x] met b(x) 6= 0 en deg(a(x)) ≥ deg(b(x)) bestaan er unieke polynomen q(x), r(x) ∈ D[x] z´o dat
106
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
P3 : β l a(x) = b(x) q(x) + r(x) met deg(r(x)) < deg(b(x)) en waarbij β = lcoeff(b(x)) en l = deg(a(x)) − deg(b(x)) + 1. q(x) en r(x) worden respectivelijk het pseudo-quotient en de pseudo-rest voor a(x) en b(x) genoemd. We zullen daarvoor de notatie pquo(a(x), b(x)), prem(a(x), b(x)) gebruiken. We breiden deze definitie nog uit voor het geval deg(a(x)) < deg(b(x)) in dat geval stellen we pquo(a(x), b(x)) = 0 en prem(a(x), b(x)) = a(x) Merk op dat we in dit geval β = 1 nemen in plaats van β = lcoeff(b(x)) We merken op dat voor gegeven a(x) en b(x) het pseudo-quotient q(x) en de pseudorest r(x) bekomen worden door de “gewone” deling van β l a(x) door b(x). Door de keuze van de β l zijn alle tussenresultaten elementen van D[x].
4.3.8
GGD in D[x]
De pseudo-delingseigenschap geeft onmiddellijk aanleiding tot een algoritme voor het berekenen van de GGD in elk polynoomdomein D[x] over een UFD D. Zoals we eerder reeds opmerkten, kunnen we ons nu beperken tot het bepalen van de GGD van primitieve polynomen in D[x].
4.3.9
Stelling
Zij D[x] een polynoomdomein over een UFD D. Zijn a(x), b(x) ∈ D[x] primitieve polynomen, met b(x) 6= 0 en deg(a(x)) ≥ deg(b(x)). Zij q(x), r(x) het pseudoquotient en de pseudo-rest van a(x) en b(x). Dan is GGD(a(x), b(x)) = GGD(b(x), pp(r(x)))
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
107
Bewijs β l a(x) = b(x) q(x) + r(x) Dan geldt daarvoor de Euclidische eigenschap GGD(β l a(x), b(x)) = GGD(b(x), r(x)) Gelet op het lemma van Gauss (4.3.5) hebben we GGD(β l a(x), b(x)) = GGD(β l , 1)GGD(a(x), b(x)) = GGD(a(x), b(x)) waarbij we steunen op het feit dat a(x) en b(x) primitieve polynomen zijn. Op dezelfde manier hebben we GGD(b(x), r(x)) = GGD(1, cont(r(x)))GGD(b(x), pp(r(x))) = GGD(b(x), pp(r(x))) Daaruit volgt het gestelde.
qed
Het is nu duidelijk dat daaruit voor primitieve polynomen a(x), b(x) een iteratieve methode ontstaat om de GGD te bepalen, en dat de iteratie zal eindigen volgt uit het feit dat deg(r(x)) < deg(b(x)) voor elke stap.
4.3.10
Primitief Algoritme van Euclides
Daar kunnen we nu het Primitief Algoritme van Euclides uit afleiden. Merk op dat we de sequentie van de resten die ontstaan telkens moeten normaliseren, waarbij we moeten gebruik maken van het bestaande algoritme voor het berekenen van de GGD in D om de content en dus de primitieve delen te berekenen van de resten
procedure PAE(a, b) c(x) ← pp(a(x)); d(x) ← pp(b(x)); while d(x) 6= 0 do { r(x) ← prem(c(x), d(x)); c(x) ← d(x); d(x) ← pp(r(x)) }; γ ← GGD(cont(a(x)), cont(b(x))); g(x) ← γ c(x); return(g(x)) end
108
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
4.3.11
Voorbeeld
We hernemen het voorbeeld a(x) = 48x3 − 84x2 + 42x − 36 b(x) = −4x3 − 10x2 + 44x − 30 polynomen over Z[x]. We vinden de opeenvolgende sequenties r(x), c(x), d(x) in de volgende tabel: iteratie
r(x)
c(x)
d(x)
−
−
8x3 − 14x2 + 7x − 6
2x3 + 5x2 − 22x + 15
1
−68x2 + 190x − 132 2x3 + 5x2 − 22x + 15
34x2 − 95x + 66
2
4280x − 6420
34x2 − 95x + 66
2x − 3
3
0
2x − 3
0
Dan is γ = GGD(6, 2) = 2 en g(x) = 2(2x − 3) = 4x − 6
4.3.12
GGD voor polynomen in meerdere variabelen
De belangrijkste toepassing van het PAE-algoritme ligt wel op het terrein van de berekeningen van de GGD van polynomen in meerdere variabelen over het domein D[x]. Stel x = x1 , . . . , xn , dan beschouwen we een polynoom a(x) als polynoom in D[x2 , . . . , xn ][x1 ] over het UFD D[x2 , . . . , xn ]. Om het PAE-algoritme te kunnen toepassen, moeten we dus de GGD kunnen bepalen in het “co¨effici¨enten domein” D[x2 , . . . , xn ] – maar dit kan gebeuren door recursieve toepassing van het PAEalgoritme. Voorbeeld We beschouwen de polynomen a(x, y) = −30x3 y + 90x2 y 2 + 15x2 − 60xy + 45y 2 b(x, y) = 100x2 y − 140x2 − 250xy 2 + 350xy − 150y 3 + 210y 2 in het polynoomdomein Z[x, y] Kiezen we x als eerste variabele, dan kunnen we a(x, y) en b(x, y) opvatten als polynomen uit het domein Z[y][x]:
109
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
a(x, y) = (−30y)x3 + (90y 2 + 15)x2 − (60y)x + (45y 2) b(x, y) = (100y − 140)x2 − (250y 2 − 350y)x − (150y 3 − 210y 2) Het eerste deel van het PAE-algoritme bestaat uit het verwijderen van unit-deel en de content van elk polynoom; dit vraagt een recursieve toepassing van PAE om de GGD van de co¨effici¨enten over Z[x] te berekenen. u(a(x, y)) = −1 cont(a(x, y)) = GGD(30y, −(90y 2 + 15), 60y, −45y 2) = 15 pp(a(x, y)) = (2y)x3 − (6y 2 + 1)x2 + (4y)x − (3y 2 )
en
u(b(x, y)) = 1 cont(b(x, y)) = GGD(100y − 140, −(250y 2 − 350y), −(150y 3 − 210y 2)) = 50y − 70 pp(b(x, y)) = (2)x2 − (5y)x − (3y 2 ) Merk op dat we GGD(100y − 140, −(250y 2 − 350y), −(150y 3 − 210y 2)) kunnen berekenen met behulp van het PAE. De sequenties r(x), c(x), d(x) die we bekomen bij de uitvoering van PAE vinden we in de volgende tabel: iteratie
r(x)
−
−
1
(2y 3 + 6y)x − (6y 4 + 18y 2 )
2x2 − (5y)x − (3y 2 )
x − (3y)
2
0
x − (3y)
0
c(x)
d(x)
(2y)x3 − (6y 2 + 1)x2 + (4y)x − (3y 2 ) 2x2 − (5y)x − (3y 2 )
Gelet op hebben we Derhalve is
γ = GGD(15, 50y − 70) = 5 g(x) = 5(x − (3y)) = 5x − (15y). GGD(a(x, y), b(x, y)) = 5x − 15y.
In Maple (comp4312.mws) vinden we hiervoor: > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected
110
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
1. het commando gcd > A := -30*x^3*y+90*x^2*y^2+15*x^2-60*x*y+45*y^2; >
>
A := −30 x3 y + 90 x2 y 2 + 15 x2 − 60 x y + 45 y 2 B := 100*x^2*y-140*x^2-250*x*y^2+350*x*y-150*y^3+210*y^2; B := 100 x2 y − 140 x2 − 250 x y 2 + 350 x y − 150 y 3 + 210 y 2 gcd(A,B); 5 x − 15 y
2. de procedure PAE twee voor polynomen in twee veranderlijken We kunnen het voorgaande commando PAE (zie comp43.mws) niet gebruiken indien we werken met polynomen in meerdere veranderlijken. Indien we twee veranderlijken beschouwen kunnen we gebruik maken van het commando PAE twee. Deze procedure kunnen we vrij eenvoudig uitbreiden voor drie of meer veranderlijken. Het commando PAE twee heeft vier argumenten : 1. & 2. de beschouwde polynomen 3. & 4. de veranderlijken var1 en var2 zodanig dat de polynomen beschouwd worden over het domein Z[var2][var1]. > PAE_twee := proc(a,b,var1,var2) > # door S.Van Wonterghem (1998) > local c,d,H,i,j,r,q,beta,l,teken_c,teken_d,h_c,h_d; > teken_c := coeff(a,var1^degree(a,var1)); h_c := > > > > > > > > > > > > > > > >
degree(teken_c,var2); teken_d := coeff(b,var1^degree(b,var1)); h_d := degree(teken_d,var2); if type(teken_c,realcons)=false then teken_c := csgn(coeff(convert(teken_c,polynom),var2^(h_c))); else teken_c := csgn(teken_c); fi; teken_c; if type(teken_d,realcons)=false then teken_d := csgn(coeff(convert(teken_d,polynom),var2^(h_d))); else teken_d := csgn(teken_d); fi; teken_d; c := quo(a,teken_c*content(a,var1),var1); d := quo(b,teken_d*content(b,var1),var1); H := array(1..max(degree(a,var1),degree(b,var1))+1,1..3); for i from 1 to rowdim(H) do for j from 1 to coldim(H) do H[i,j] := ‘_‘;
4.3. HET PRIMITIEF ALGORITME VAN EUCLIDISCH
>
od; od;
>
H[1,2] := sort(c,var1); H[1,3] := sort(d,var1);
>
i := 2;
>
while testeq(d,0)=false do
>
beta := teken_d*coeff(d,var1^degree(d,var1));
>
l := degree(c,var1)-degree(d,var1)+1;
>
q := quo(beta^l*c,d,var1);
>
r := rem(beta^l*c,d,var1);
>
c := d;
>
if type(r,realcons)=false
>
then teken_d := coeff(r,var1^degree(r,var1));
> >
if type(teken_d,realcons)=false then teken_d :=
>
csgn(coeff(convert(teken_d,polynom),var2^degree(teken_d,var2)));
>
else teken_d := csgn(teken_d); fi;
>
d := quo(r,teken_d*content(r,var1),var1);
>
else d := r;
> >
fi; H[i,1] := sort(r,var1); H[i,2] := sort(c,var1); H[i,3] :=
>
sort(d,var1);
>
i := i+1;
>
od;
>
teken_d := coeff(H[i-1,2],var1^degree(H[i-1,2],var1));
> >
if type(teken_d,realcons)=false then teken_d :=
>
csgn(coeff(convert(teken_d,polynom),var2^degree(teken_d,var2)));
>
else teken_d := csgn(teken_d); fi;
>
[gcd(content(a,var1),content(b,var1))*sort(H[i-1,2],var1),evalm(H)];
>
end:
>
PAE_twee(A,B,x,y);
5 x − 15 y,
111
(6 y + 2 y 3) x − 18 y 2 − 6 y 4 0
2 y x3 + (−6 y 2 − 1) x2 + 4 y x − 3 y 2 2 x2 − 5 y x − 3 y 2 2 x2 − 5 y x − 3 y 2 x −3y x− 3y 0
112
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Zoals men kan zien in het bovenstaande voorbeeld bestaat het resultaat van de procedure PAE meer opnieuw uit twee componenten. De eerste component geeft ons de grootste gemene deler, de tweede component de tussenresultaten. Extra voorbeeld : > A := >
x^5*(2*y^5+4*y^4+4*y^3+8*y^2)+x^4*(2*y^5+5*y^4-2*y^3-3*y^2-2)+x^3*(y^4
>
-2*y^2+1);
A := x5 (2 y 5 + 4 y 4 + 4 y 3 + 8 y 2) + x4 (2 y 5 + 5 y 4 − 2 y 3 − 3 y 2 − 2) + x3 (y 4 − 2 y 2 + 1) > B := >
x^5*(2*y^3+y^2+4*y+2)+x^4*(2*y^3+y^2-2*y-1)+x^3*(3*y^5+y^4+6*y^3+4*y^2
>
+4)+x^2*(3*y^5+y^4-3*y^3+y^2-2);
B := x5 (2 y 3 + y 2 + 4 y + 2) + x4 (2 y 3 + y 2 − 2 y − 1) + x3 (3 y 5 + y 4 + 6 y 3 + 4 y 2 + 4) + x2 (3 y 5 + y 4 − 3 y 3 + y 2 − 2) > PAE_twee(A,B,x,y)[1]; >
(y 2 + 2) x3 + (y 2 − 1) x2 PAE_twee(A,B,y,x)[1]; x2 ((x + 1) y 2 + 2 x − 1)
113
4.4. SYLVESTER MATRIX EN RESULTANTE
4.4 4.4.1
Sylvester matrix en resultante Sylvester Matrix
Zij A(x), B(x) ∈ D[x] twee van nul verschillende polynomen over een UFD D en stel A(x) =
m X i=0
ai xi en B(x) =
n X
bj xj
j=0
Dan is de Sylvester matrix van de polynomen A en B de m + n bij m + n matrix
am am−1 . . . a1 a0 am am−1 . . . a1 . .. ... ... am . . . M = bn bn−1 . . . b1 b0 b b . . . b1 n n−1 ... ... ... bn . . .
a0 ... . . . a0 b0 ... . . . b0
waarbij het bovenste deel bestaat uit n rijen die opgebouwd worden met co¨effici¨enten van A(x), en het onderste deel uit m rijen met co¨effici¨enten van B(x) en waarbij de lege delen nullen voorstellen.
4.4.2
Resultante
De resultante van de polynomen A en B is de determinant van de Sylvester matrix van A en B die we ook nog res(A, B) noteren.
4.4.3
Voorbeeld
Voor de polynomen A(x) = 3x4 + 3x3 + x2 − x − 2, B(x) = x3 − 3x2 + x + 5 uit Z[x] hebben we res(A, B) = det(M) = 0
114
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
waarbij de Sylvester matrix gegeven wordt door
M=
4.4.4
3 3 1 −1 −2 0 0 0 3 3 1 −1 −2 0 0 0 3 3 1 −1 −2 1 −3 1 5 0 0 0 0 1 −3 1 5 0 0 0 0 1 −3 1 5 0 0 0 0 1 −3 1 5
Sylvester criterium
De oorsprong van de resultante ligt in het Sylvester criterium om te bepalen of twee polynomen een niet-triviale gemeenschappelijke factor hebben. Dit criterium zegt dat twee polynomen een niet-triviale gemeenschappelijke factor hebben a.s.a. res(A, B) = 0. Dit volgt uit de volgende stelling:
4.4.5
Stelling
Zij A(x), B(x) ∈ D[x] twee polynomen over het UFD D van de graad m, n > 0 resp. Dan bestaan er polynomen S(x), T (x) ∈ D[x] met deg(S) < n, deg(T ) < m z´o dat A(x)S(x) + B(x)T (x) = res(A, B).
(4.13)
Bewijs: Door toepassing van elementaire kolombewerking op de matrix M willen we een matrix M 0 bekomen waarvoor geldt: det(M) = det(M 0 ) .
1. Vervang de laatste kolom M xm+n−1 M
,1
,m+n
door
+ . . . + xm+n−i M
,i
+ ...+ M
,m+n
2. We bekomen aldus een matrix M 0 waarvan alle kolommen, behalve de laatste gelijk zijn aan deze van M, en waarvoor geldt det(M) = det(M 0 )
115
4.4. SYLVESTER MATRIX EN RESULTANTE
am am−1 . . . a1 a0 am am−1 . . . a1 ... ... ... am . . . M0 = bn bn−1 . . . b1 b0 bn bn−1 . . . b1 ... ... ... bn . . .
a0 ... ... b0 ... ...
Pm n+i−1 i=0 ai x Pm n+i−2 i=0 ai x Pm n+i−n ai x i=0 Pn m+i−1 b x i=0 i Pn m+i−2 b x i i=0 Pn m+i−m i=0 bi x
Of nog:
am am−1 . . . a1 a0 am am−1 . . . a1 . .. ... ... am . . . M0 = bn bn−1 . . . b1 b0 bn bn−1 . . . b1 ... ... ... bn . . .
xn−1 A(x) xn−2 A(x)
a0 ... . . . xn−n A(x) xm−1 B(x) b0 xm−2 B(x) ... . . . xm−m B(x)
Wanneer we nu de det(M 0 ) ontwikkelen volgens de laatste kolom, vinden we voor qed det(M) = det(M 0 ) het gevraagde resultaat.
4.4.6
Gevolg: Sylvester Criterium
Zij A(x), B(x) ∈ D[x], D een UFD. Dan hebben A(x) en B(x) een niet-triviale gemeenschappelijke factor, a.s.a. res(A, B) = 0. Bewijs: Als res(A, B) 6= 0, dan impliceert stelling 4.4.5, dat elke deler van A(x) en B(x) ook een deler van de resultante moet zijn. Aangezien de resultante een constante is, moeten deze delers de graad 0 hebben, en derhalve zijn er geen niettriviale delers. Omgekeerd, stel dat res(A, B) = 0 dan wordt de uitdrukking 4.13 A(x) · S(x) = −B(x) · T (x) Als er geen niet-triviale gemeenschappelijke factoren bestaan van A(x) en B(x), dan volgt daaruit dat B(x)|S(x). Gelet op het feit dat deg(S) < n = deg(B) is dit evenwel onmogelijk. qed In Maple (comp44.mws):
116
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
>
restart;
>
with(linalg):
Warning, new definition for norm Warning, new definition for trace
Voor het bepalen van de Sylvestermatrix en de berekening van de resultante kunnen we gebruik maken van een aantal standaardcommando’s in Maple. >
a := 3*x^4+3*x^3+x^2-x-2; a := 3 x4 + 3 x3 + x2 − x − 2
>
b := x^3-3*x^2+x+5; b := x3 − 3 x2 + x + 5
Gebruikmakend van het commando sylvester bepalen we de Sylvestermatrix opgebouwd met de polynomen a en b. >
sylvester(a,b,x);
3 3 1 −1 −2 0 0 0 3 3 1 −1 −2 0 0 0 3 3 1 −1 −2 1 −3 1 5 0 0 0 0 1 −3 1 5 0 0 0 0 1 −3 1 5 0 0 0 0 1 −3 1 5
De resultante kunnen we berekenen door de determinant te bepalen van de Sylvestermatrix of door rechtstreeks het commando resultant te gebruiken. >
det("); 0
>
resultant(a,b,x); 0
>
c := 1-2/d*x;
4.4. SYLVESTER MATRIX EN RESULTANTE
c := 1 − 2 >
x d
e := x^2-2; e := x2 − 2
>
sylvester(c,e,x); 2 −d
>
0 1
1
0
2 1 d 0 −2
−
resultant(c,e,x); −8 + d2 d2
117
118
4.5
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Factorisatie van Polynomen
Factoriseren van polynomen is een belangrijk onderdeel van heel wat symbolische berekeningen zoals vereenvoudigingen, symbolische integratie en oplossen van polynoom vergelijkingen.
4.5.1
Kwadraatvrije factorisatie
Definitie Zij a(x) ∈ D[x] een primitief polynoom over een UFD D. Dan wordt a(x) kwadraatvrij genoemd, als er geen herhaalde factoren in voorkomen, d.i. als er geen b(x) ∈ D[x] met deg(b(x)) ≥ 1 bestaan z´o dat b(x)2 |a(x) De kwadraatvrije factorisatie van a(x) is een ontbinding van a(x) van de volgende gedaante:
a(x) =
k Y
ai (x)i
(4.14)
i=1
waarbij elke ai (x) een kwadraatvrij polynoom is en GGD(ai (x), aj (x)) = 1 voor i 6= j. Merk op dat in deze notatie de factoren gegroepeerd worden volgens het aantal keer dat ze voorkomen. ai (x) is dus het polynoom dat alle factoren groepeert die i-keer voorkomen. In die notatie kan het dus voorkomen dat voor een zeker i ai (x) = 1. Zo is bijvoorbeeld a(x) = (x2 + 1)(x2 − 1)4 (x3 + 3x)5
met a1 (x) = (x2 + 1), a2 (x) = a3 (x) = 1, a4 (x) = (x2 − 1), a5 (x) = (x3 + 3x). Om te bepalen of een polynoom kwadraatvrij is, hebben we het begrip afgeleide van een polynoom nodig. Definitie We kunnen formeel de afgeleide van een polynoom a(x) = a0 + . . . + an xn als volgt defini¨eren: a0 (x) = a1 + 2a2 x + . . . + nan xn−1
(4.15)
We herhalen de belangrijkste eigenschappen van de afgeleide, die we hier zullen nodig hebben:
4.5. FACTORISATIE VAN POLYNOMEN
(a) (a(x) + b(x))0 (c a(x))0 (b) (a(x) b(x))0 (c) (a(x)n )0
= = = =
119
a0 (x) + b0 (x); c a0 (x); a0 (x) b(x) + a(x) b0 (x); n a(x)n−1 a0 (x);
Definitie De karakteristiek van een UFD D is het kleinste positief geheel getal k waarvoor geldt k.d = 0 voor alle d ∈ D. Wanneer een dergelijk geheel getal niet bestaat, zeggen we dat de karakteristiek van D 0 is.
4.5.2
Stelling
Zij a(x) een primitief polynoom in D[x], D een UFD met karakteristiek 0. Zij c(x) = GGD(a(x), a0 (x)). Dan heeft a(x) herhaalde factoren, als en slechts als c(x) 6= 1. Bewijs Stel a(x) een polynoom is met herhaalde factoren, dan bestaat er een b(x) ∈ D[x] z´o dat a(x) = b(x)2 w(x). Derhalve is a0 (x) = 2 b(x) b0 (x) w(x) + b(x)2 w 0 (x) = b(x) w(x) ˆ met w(x) ˆ ∈ D[x]. Derhalve hebben a(x) en a0 (x) een niet-triviale gemeenschappelijke factor b(x), en is GGD(a(x), a0 (x)) 6= 1. Omgekeerd bewijzen we uit het ongerijmde dat als c(x) 6= 1, dat dan a(x) niet kwadraatvrij is. Zou a(x) wel kwadraatvrij zijn, dan kunnen we gelet op D[x] UFD, de volgende factorisatie van a(x) beschouwen: a(x) = p1 (x) p2 (x) . . . pk (x) waarbij elke pi (x) een priemelement is, deg(pi(x)) ≥ 1 en GGD(pi (x), pj (x)) = 1 voor i 6= j
(4.16)
De afgeleide van a(x) wordt dan gegeven door a0 (x) = p01 (x)p2 (x) . . . pk (x) + . . . + p1 (x)p2 (x) . . . p0k (x)
(4.17)
Gelet op het feit dat c(x) niet triviaal is, moet voor een i pi (x)|c(x). Stellen we voor de eenvoud i = 1, dan geldt dus p1 (x)|a0 (x). Gelet op (4.17) volgt daaruit dat p1 (x)|p01 (x)p2 (x) . . . pk (x). Gelet op (4.16) volgt daaruit dat p1 (x)|p01 (x).
120
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Aangezien de graad van p1 (x) groter is dan de graad van p01 (x), kan dit alleen maar als p01 (x) = 0
(4.18)
Voor een domein met karakteristiek 0, kan dit enkel als p1 (x) constant is en dus deg(p1 (x)) = 0, wat een tegenstrijdigheid geeft. qed Het bewijs van de voorgaande stelling geeft ook een algoritme om de kwadraatvrije factoren van een gegeven polynoom a(x) te bepalen. Stel dat a(x) een kwadraatvrije ontbinding van de gedaante (4.14) heeft, dan wordt de afgeleide van a(x) gegeven door de volgende uitdrukking a0 (x) =
k X
a1 (x) . . . i ai (x)i−1 a0i (x) . . . ak (x)k
(4.19)
i=1
Derhalve is c(x) = GGD(a(x), a0 (x)) =
k Y
ai (x)i−1
(4.20)
i=2
Stellen we w(x) =
a(x) = a1 (x)a2 (x) . . . ak (x) c(x)
(4.21)
dan is w(x) het product van de kwadraatvrije factoren van a(x) zonder hun multipliciteiten. Stellen we nu y(x) = GGD(c(x), w(x))
(4.22)
dan vinden we w(x) y(x)
a1 (x) =
(4.23)
de eerste kwadraatvrije factor van a(x). Uit (4.20) volgt dat de tweede kwadraatvrije factor van a(x) de eerste kwadraatvrije factor van c(x) is. We krijgen dan GGD(c(x), c0 (x)) =
k Y
ai (x)i−2 = c(x)/y(x)
i=3
Het product van de overblijvende kwadraatvrije factoren wordt gegeven door y(x). Deze observaties leveren ons het volgende effectieve algoritme voor het bepalen van de kwadraatvrije ontbinding van a(x).
4.5. FACTORISATIE VAN POLYNOMEN
121
procedure SquareFree(a(x)) i ← 1; Output ← 1; b(x) ← a0 (x); c(x) ← GGD(a(x), b(x)); w(x) ← a(x)/c(x); while c(x) 6= 1 do { y(x) ← GGD(w(x), c(x)); z(x) ← w(x)/y(x); Output ← Output ∗ z(x)i ; i ← i + 1; w(x) ← y(x); c(x) ← c(x)/y(x) }; Output ← Output ∗ w(x)i; return(Output) end
4.5.3
Voorbeeld
We beschouwen a(x) ∈ Z[x] a(x) = x8 − 2x6 + 2x2 − 1 Bij de aanvang van het algoritme, berekenen we b(x) = a0 (x) = 8x7 − 12x5 + 4x, c(x) = GGD(a(x), b(x)) = x4 − 2x2 + 1, w(x) = a(x)/c(x) = x4 − 1 Aangezien c(x) 6= 1 gaan we door met while-lus. Na de eerste lus hebben we: y(x) = GGD(w(x), c(x)) = x2 −1, Output = z(x) = x2 +1, i = 2, w(x) = c(x) = x2 −1. We komen dan in de tweede lus met y(x) = GGD(w(x), c(x)) = x2 − 1, z(x) = 1, i = 3, w(x) = x2 − 1, c(x) = 1 en Output blijft onveranderd. Aangezien c(x) = 1, gaan we uit de hoofdlus en stellen Output = Output ∗ w(x)3 = (x2 + 1)(x2 − 1)3 We merken op dat er voor kwadraatvrije factorisatie over domeinen met karakteristiek 0 er meer effici¨ente algoritmen kunnen gevonden worden. We refereren o.m. naar het algoritme van Yun in [8]. Maple: comp45.mws
122 > >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN restart; with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected
Voor de factorisatie van polynomen kunnen we in Maple gebruik maken van verschillende standaardcommando’s. 1. het commando convert Het commando convert kan gebruikt worden voor een groot aantal ’herschrijvingen’. Wanneer we de optie sqrfree toevoegen, wordt het polynoom kwadraatvrij gefactoriseerd. > convert(x^2+4*x+4,sqrfree,x); >
(x + 2)2 poly := y^2*x^3+2*y^2*x^2+y^2*x+2*y*x^3+4*y*x^2+2*y*x;
>
poly := y 2 x3 + 2 y 2 x2 + y 2 x + 2 y x3 + 4 y x2 + 2 y x convert(poly,sqrfree);
>
>
y (y + 2) x (x + 1)2 A := x^8-2*x^6+2*x^2-1; A := x8 − 2 x6 + 2 x2 − 1 convert(A,sqrfree); (x2 + 1) (x2 − 1)3
2. het commando sqrfree > a(x):=-459*x^9-324*x^7+243*x^5-296*x^15+366*x^13+576*x^11+x^25+12*x^2 >
3+47*x^21+32*x^19-198*x^17;
a(x) := −459 x9 − 324 x7 + 243 x5 − 296 x15 + 366 x13 + 576 x11 + x25 + 12 x23 + 47 x21 + 32 x19 − 198 x17 > content(a(x)); 1 > sqrfree(a(x)); [1, [[x2 + 1, 1], [x2 − 1, 4], [x2 + 3, 5], [x, 5]]] 3. de manuele implementatie van de procedure SquareFree > a(x):=x^8-2*x^6+2*x^2-1; a(x) := x8 − 2 x6 + 2 x2 − 1 > primpart(a(x),x); x8 − 2 x6 + 2 x2 − 1 Initialisatie:
4.5. FACTORISATIE VAN POLYNOMEN >
i:=1; Output:=1; b(x):=diff(a(x),x); i := 1 Output := 1
>
b(x) := 8 x7 − 12 x5 + 4 x c(x):=gcd(a(x),b(x));
>
c(x) := x4 − 2 x2 + 1 w(x):=quo(a(x),c(x),x); w(x) := x4 − 1
While c(x) /= 1 do: > y(x):=gcd(w(x),c(x)); >
y(x) := x2 − 1 z(x):=quo(w(x),y(x),x); z(x) := x2 + 1
>
Output:=Output*z(x)^i; Output := x2 + 1
>
i:=i+1; i := 2
>
w(x):=y(x);
>
w(x) := x2 − 1 c(x):=quo(c(x),y(x),x); c(x) := x2 − 1
c(x) /= 1 > y(x):=gcd(w(x),c(x)); >
>
y(x) := x2 − 1 z(x):=quo(w(x),y(x),x); z(x) := 1 Output:=Output*z(x)^i; Output := x2 + 1
>
i:=i+1; i := 3
>
w(x):=y(x);
>
w(x) := x2 − 1 c(x):=quo(c(x),y(x),x); c(x) := 1
We krijgen c(x) = 1. We verlaten de lus.
123
124 >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN Output:=Output*w(x)^i; Output := (x2 + 1) (x2 − 1)3
Maple vindt hetzelfde resultaat : > sqrfree(a(x)); [1, [[x2 + 1, 1], [x2 − 1, 3]]]
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
4.6
125
Kwadraatvrije factorisatie over eindige velden
4.6.1
Inleiding
Stel dat we de kwaadraatvrije factorisatie willen bepalen over een domein met een van nul verschillende karakteristiek. In het bijzonder willen we de kwaadraatvrije factorisatie bepalen van polynomen met co¨effici¨enten in GF(q), het Galois veld van de orde q = pm , waarbij p een priemgetal is. Notatie: 1. GF(p) = {0, 1, . . . , p − 1} = Zp 2. GF (q) = {0, 1, , 2, . . . , q−2 |q−1 = 1}( is een primitief element) 3. ∃ r(x) ∈ Zp [x], r(x) irreductibel is over Zp , deg(r(x)) = m, r() = 0 z´o dat GF(q) ∼ = Zp [x]/hr(x)i. Het proces om de kwaadraatvrije ontbinding van a(x) ∈ GF(q)[x] te bepalen verloopt volgens dezelfde redenering als hiervoor: • bepaal de afgeleide a0 (x) van a(x); • bereken de GGD(a(x), a0 (x)); – als GGD(a(x), a0 (x)) = 1 dan is a(x) kwadraatvrij; – als GGD(a(x), a0 (x)) 6= 1 en a0 (x) 6= 0 wordt verder gewerkt met a(x)/GGD(a(x), a0 (x)) Bij domeinen met karateristiek 0, hebben we a0 (x) 6= 0 voor elke niet-constant polynoom a(x). Dit is evenwel niet langer het geval voor polynomen over eindige velden.
4.6.2
Voorbeeld
Beschouw a(x) = x13 + 1 ∈ GF(13)[x] = Z13 [x], dan is a0 (x) = 13 x12 = 0, aangezien de karakteristiek van Z13 13 is. Wanneer we nu opmerken dat (x + 1)13 = x13 +
13 1
x12 + . . . +
13 12
x + 1 = x13 + 1 = a(x)
hebben we daar toch een kwadraatvrije ontbinding neergeschreven.
126
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Deze laatste gelijkheid geldt, omdat elk van de binomiaalco¨effici¨enten 13i 1 ≤ i ≤ 12 de factor 13 bevatten, en derhalve 0 worden, gelet op de karateristiek 13. Gelet op bovenstaande opmerking moet het algoritme SquareFree aangepast worden om het bruikbaar te maken voor polynomen over een willekeurig Galoisveld. We maken daarbij gebruik van de volgende eigenschappen uit de theorie van de eindige velden.
4.6.3
Lemma
Zij GF(q) een Galoisveld van de orde q = pm , p priem, dan hebben we voor r, s ∈ GF(q) r q = r, r (r + s)
1 p
pi
(4.24)
q p
pm−1
pi
pi
= r =r
,
(4.25)
= r + s , i = 0, 1, . . . , m
(4.26)
Bewijs: Voor elke r ∈ GF(q) is de verzameling G = {1, r, r 2, . . .} een eindige deelgroep van multiplicatieve groep GF(q). Aangezien de orde van deze laatste groep q − 1 is, moet gelet op de stelling van Lagrange de orde van G een deler zijn van q − 1 en dus r q−1 = 1,
waaruit (4.24) volgt. Derhalve hebben we ook 1
1
r p = (r p )q en gelet op (r p
m−1
m
)p = r p = r q = r
volgt daaruit (4.25). De ontbinding van het linker lid van (4.26) geeft ons pi pi −1 pi i i i i r s...+ i r sp −1 + sp = r p + sp r + 1 p −1 pi
!
!
gelet op het feit dat de karakteristiek p, een deler is van
i p k
voor alle 1 ≤ k ≤ pi −1. qed
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
4.6.4
127
Stelling
Zij a(x) := a0 + a1 x + . . . + an xn een polynoom van de graad n uit GF(q)[x] zodanig dat a0 (x) = 0 (1 ), dan is a(x) = b(x)p
voor een zeker polynoom b(x) ∈ GF(q). Bewijs: Aangezien a0 (x) = 0 zullen in a(x) alleen die machten voorkomen, die deelbaar zijn door p. Derhalve is
a(x) = a0 + ap xp + a2p x2p + . . . akp xkp
voor een k ∈ Z. Stellen we nu 1/p
m−1
p bi = aip = aip
(gelet op (4.25)) en b(x) = b0 + b1 x + . . . + bk xk , dan volgt daaruit door herhaalde toepassingen van Lemma (4.6.3) dat
b(x)p = bp0 + bp1 xp + . . . + bpk xkp = a0 + ap xp + . . . + akp xkp = a(x)
qed
We merken op dat het bewijs van de Stelling (4.6.4) niet alleen aantoont dat b(x) 1 bestaat, maar ook aangeeft hoe b(x) = a(x) p kan geconstrueerd worden als a0 (x) = 0. We bekomen dan het volgend algoritme voor kwadraatvrije ontbindingen over een eindig veld.
1
Deze voorwaarde eerst testen!
128
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
procedure SquareFreeFF(a(x), q) # a(x) ∈ GF(q)[x], q = pm # Output=kwadraatvrije factorisatie van a(x) i ← 1; Output ← 1; b(x) ← a0 (x); if b(x) 6= 0 then { c(x) ← GGD(a(x), b(x)); w(x) ← a(x)/c(x); while w(x) 6= 1 do { y(x) ← GGD(w(x), c(x)); z(x) ← w(x)/y(x); Output ← Output ∗ z(x)i ; i ← i + 1; w(x) ← y(x); c(x) ← c(x)/y(x) }; if c(x) 6= 1 then { c(x) ← c(x)1/p Output ← Output ∗ (SquareFreeFF(c(x), q))p }} else { a(x) ← a(x)1/p Output ← ( SquareFreeFF(a(x), q) )p }} return(Output) end
We illustreren de werking van het algoritme aan de hand van een paar voorbeelden.
4.6.5
Voorbeeld
Zij a(x) een polynoom uit GF(3)[x] = Z3 [x] als volgt gedefinieerd: a(x) = x11 + 2x9 + 2x8 + x6 + x5 + 2x3 + 2x2 + 1 Dan is a0 (x) = 2x10 + x7 + 2x4 + x en b(x) = a0 (x) 6= 0 We stellen nu c(x) = GGD(a(x), a0 (x)) = x9 + 2x6 + x3 + 2 en w(x) = a(x)/c(x) = x2 + 2
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
129
Aangezien deg(a(x)) > deg(c(x)) is hier steeds w(x) 6= 1 en gaan we in de while-lus met de waarden: i = 1, w(x) = x2 + 2, c(x) = x9 + 2x6 + x3 + 2 Na ´e´en lus hebben we y(x) = x + 2, z(x) = x + 1, Output = x + 1, en de nieuwe waarden: i = 2, w(x) = x + 2, c(x) = x8 + x7 + x6 + x2 + x + 1. Na een tweede lus krijgen we: y(x) = x + 2, z(x) = 1, Output = x + 1, met de nieuwe waarden: i = 3, w(x) = x + 2, c(x) = x7 + 2x6 + x + 2. Bij de derde lus hebben we: y(x) = x + 2, z(x) = 1, Output = x + 1, en nieuwe waarden: i = 4, w(x) = x + 2, c(x) = x6 + 1. We gaan dan de vierde lus in en krijgen: y(x) = 1, z(x) = x + 2, Output = (x + 1)(x + 2)4 , en i = 5, w(x) = 1, c(x) = x6 + 1. Aangezien nu w(x) = 1, verlaten we de while-lus. Aangezien c(x) 6= 1, moet het dus een volkomen derde macht zijn. We vinden die derdemachtswortel van x6 + 1 door de exponenten door 3 te delen en door van elke co¨effici¨ent de derdemachtswortel te nemen, dit geeft hier x2 + 1. Aangezien GGD(x2 + 1, 2x) = 1 zal c(x) kwadraatvrij zijn, dit ontdekken we door recursief SquareFreeFF(c(x)) de beschouwen. We krijgen dan de kwadraatvrije factorisatie: Output = (x + 1)(x + 2)4 (x2 + 1)3
4.6.6
Voorbeelden in Maple
(zie comp46.mws) > restart; > with(linalg): Warning, new definition for norm
130
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Warning, new definition for trace
de procedure P root De procedure P root bepaalt het polynoom b(x) zodanig dat a(x) = b(x)p . Indien dit niet mogelijk is, geeft Maple de waarschuwing ‘Geen wortel ¡. >
P_root := proc(a,x,p)
>
local b,i,grd,control;
>
control := 0;
>
grd := degree(a,x);
>
b := coeff(a,x,0);
>
for i from p to grd do
> >
b := b + coeff(a,x,i)*x^(i/p); if (irem(i,p)<>0 and coeff(a,x,i)<>0)
>
then control := control+1; fi;
>
od;
> >
b := sort(b,x); if control=0 then RETURN(b) else
>
RETURN(‘Geen wortel ¡); fi;
>
end:
Voorbeeld 1 : Neem p = 11 > a := >
10*x^110+8*x^99+6*x^88+4*x^77+2*x^66+9*x^55+7*x^44+5*x^33+3*x^22+x^11+
>
5 mod 11;
a := 10 x110 + 8 x99 + 6 x88 + 4 x77 + 2 x66 + 9 x55 + 7 x44 + 5 x33 + 3 x22 + x11 + 5 >
b := P_root(a,x,11); b := 10 x10 + 8 x9 + 6 x8 + 4 x7 + 2 x6 + 9 x5 + 7 x4 + 5 x3 + 3 x2 + x + 5
Dus : a = b11
Controle : >
expand(b^11,x) mod 11;
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
131
10 x110 + 8 x99 + 6 x88 + 4 x77 + 2 x66 + 9 x55 + 7 x44 + 5 x33 + 3 x22 + x11 + 5
Met het commando proot (standaardcommando in Maple) lukt dit enkel indien het polynoom geschreven is in de vorm b11 ! >
readlib(proot); proc(p, r) . . . end
>
proot(a,11) mod 11; NOROOT
>
proot(b^11,11) mod 11; 10 x10 + 8 x9 + 6 x8 + 4 x7 + 2 x6 + 9 x5 + 7 x4 + 5 x3 + 3 x2 + x + 5
Voorbeeld 2 : Neem p = 7 >
a := 5*x^41+3*x^14+1; a := 5 x41 + 3 x14 + 1
>
P_root(a,x,7); Geen wortel !
>
a := 5*x^42+3*x^14+1; a := 5 x42 + 3 x14 + 1
>
b := P_root(a,x,7); b := 5 x6 + 3 x2 + 1
Controle : >
expand(b^7,x) mod 7; 5 x42 + 3 x14 + 1
132
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
1. het commando Sqrfree We kunnen in Maple gebruik maken van het standaardcommando Sqrfree. Het resultaat van dit commando is een lijst bestaande uit 2 elementen : 1. de hoogste graadscofficint van het polynoom 2. een lijst bestaande uit de factoren en hun machten > A := >
x^11+2*x^9+2*x^8+x^6+x^5+2*x^3+2*x^2+1; A := x11 + 2 x9 + 2 x8 + x6 + x5 + 2 x3 + 2 x2 + 1
>
Sqrfree(A) mod 3; [1, [[x + 1, 1], [x2 + 1, 3], [x + 2, 4]]]
2. de manuele implementatie van de procedure SquareFreeFF >
Output:=1; Output := 1
>
i:=1; i := 1
>
B:=diff(A,x) mod 3; B := 2 x10 + x7 + 2 x4 + x
>
C:=Gcd(A,B) mod 3; C := x9 + 2 x6 + x3 + 2
>
W:=Quo(A,C,x) mod 3; W := x2 + 2
” EERSTE LUS ” >
Y:=Gcd(W,C) mod 3;
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
Y := x + 2 >
Z:=Quo(W,Y,x) mod 3; Z := x + 1
>
Output:=Output*Z^i; Output := x + 1
>
i:=i+1; i := 2
>
W:=Y; W := x + 2
>
C:=Quo(C,Y,x) mod 3; C := x8 + x7 + x6 + x2 + x + 1
”TWEEDE LUS” >
Y:=Gcd(W,C) mod 3; Y := x + 2
>
Z:=Quo(W,Y,x) mod 3; Z := 1
>
Output:=Output*Z^i; Output := x + 1
>
i:=i+1; i := 3
>
W:=Y;
133
134
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
W := x + 2 >
C:=Quo(C,Y,x) mod 3; C := x7 + 2 x6 + x + 2
”DERDE LUS” >
Y:=Gcd(W,C) mod 3; Y := x + 2
>
Z:=Quo(W,Y,x) mod 3; Z := 1
>
Output:=Output*Z^i; Output := x + 1
>
i:=i+1; i := 4
>
W:=Y; W := x + 2
>
C:=Quo(C,Y,x) mod 3; C := x6 + 1
”VIERDE LUS” >
Y:=Gcd(W,C) mod 3; Y := 1
>
Z:=Quo(W,Y,x) mod 3;
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
135
Z := x + 2 >
Output:=Output*Z^i; Output := (x + 1) (x + 2)4
>
i:=i+1; i := 5
>
W:=Y; W := 1
>
C:=Quo(C,Y,x) mod 3; C := x6 + 1
”WE VERLATEN DE LUS” > Expand( (x^2+1)^3 ) mod 3; x6 + 1 >
Output:=Output * (x^2+1)^3; Output := (x + 1) (x + 2)4 (x2 + 1)3
3. de procedure SquareFreeFF Voor de kwadraatvrije factorisatie van polynomen over eindige velden kunnen we in Maple gebruik maken van de onderstaande procedure SquareFreeFF. Deze procedure is volledig gebaseerd op het algoritme uit de cursus. > SquareFreeFF := proc(a,x,p) > # door S.Van > > > > >
Wonterghem (1998) local i,output,b,c,w,y,z,f; i := 1; output := 1; b := modp(diff(a,x),p);
136
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
>
if testeq(b,0)=false then
>
c := Gcdex(a,b,x) mod p;
>
w := Quo(a,c,x) mod p;
>
while testeq(w,1)=false do
>
y := Gcdex(w,c,x) mod p;
>
z := Quo(w,y,x) mod p;
>
output := output*z^i;
>
i := i+1;
>
w := y;
>
c := Quo(c,y,x) mod p;
>
od;
>
if testeq(c,1)=false then
>
f := Factors(c) mod p;
>
c := 1;
> >
for i from 1 to nops(f[2]) do c :=
>
c*f[2][i][1]^(f[2][i][2]/p);
> >
od; output :=
>
output*SquareFreeFF(c,x,p)^p;
>
fi;
>
else a := 1;
>
f := Factors(a) mod p;
> >
for i from 1 to nops(f[2]) do a :=
>
a*f[2][i][1]^(f[2][i][2]/p);
>
od;
>
output := SquareFreeFF(a,x,p)^p;
>
fi;
>
output;
>
end:
>
SquareFreeFF(A,x,3); (x + 1) (x + 2)4 (x2 + 1)3
4.6. KWADRAATVRIJE FACTORISATIE OVER EINDIGE VELDEN
4.6.7
137
Voorbeeld
Stel dat A, B, C, D kwadraatvrije polynomen voorstellen in GF(3)[x] en stel a = A B 3 C 5 D9 We tonen nu aan dat SquareFreeFF de kwadraatvrije ontbinding berekent van a. Initieel berekent het algoritme b = a0 = A0 B 3 C 5 D 9 + 2 A B 3 C 4 C 0 D 9 De grootste gemene deler wordt derhalve: c = B 3 C 4 D9. De kwadraatvrije componenten (met uitsluiting van deze die voorkomen in een macht die deelbaar is door de modulus) worden gegeven door w = a/c = A C. We gaan nu de while-lus binnen, en berekenen y = GGD(c, w) = C, z = w/C = A zodat Output = A en de nieuwe waarden voor de variabelen worden: i = 2, w = C, c = B 3 C 3 D 9 . We gaan voor de tweede maal de while-lus in, en krijgen y = C, z = 1 hetgeen Output onveranderd laat, terwijl de nieuw waarden voor de variabelen gegeven worden door: i = 3, w = C, c = B 3 C 2 D 9 . Als we de derde keer de lus verlaten is Output nog steeds onveranderd en zijn de variabelen i = 4, w = C, c = B 3 C D9 . Na de vierde lus hebben nog steeds Output = A en i = 5, w = C, c = B 3 D 9 . In de vijfde while-lus krijgen we y = 1, c = C en derhalve Output = A C 5 met de variabelen i = 6, w = 1, c = B 3 D 9 . Aangezien w = 1 gaat het algoritme uit de while-lus. Aangezien c 6= 1, wordt nu de kwadraatvrije factorisatie recursief berekend van de derdemachtswortel uit c, dus van B D 3 . Wanneer we terug het algoritme doorlopen krijgen we B D 3 . Daarvan wordt de derdemacht toegevoegd aan Output. Uiteindelijk krijgen we dan Output = A C 5 B 3 D 9 wat reeds voorspeld was.
qed
138
4.7 4.7.1
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Berlekamps’ factorisatiealgoritme Inleiding
We beschrijven hier een gekend algoritme, dat ontworpen is door Berlekamp, dat de factorisatie geeft van polynomen uit GF(q)[x], waarbij GF(q) een eindig veld is van de orde q = pm met p priem. Dit algoritme is een prachtige illustratie van de elegantie van computeralgebra, die ontstaat door het combineren van eigenschappen van eindige velden en vectorruimten over eindige velden. Stel dat a(x) ∈ GF(q)[x] een polynoom is dat we wensen te factoriseren. Gelet op de voorgaande sectie, mogen we aannemen dat a(x) reeds kwadraatvrij is. We merken nu op dat de quotientring (zie voorbeeld comp471.mws) V = GF(q)[x]/ha(x)i een eindig-dimensionale vectorruimte is over het veld GF(q), met dimensie n = deg(a(x)) (Bewijs dit als oefening) We stellen nu W = {v(x) ∈ GF(q)[x] : v(x)q = v(x) mod a(x)}.
(4.27)
We kunnen dan W identificeren met de verzameling {[v(x)] ∈ V : [v(x)]q = [v(x)]}.
(4.28)
We kunnen deze verzameling terug W noteren, en elke restklasse [v(x)] = [v(x)]a(x) identificeren met zijn unieke representant met graad kleiner dan n. Deze verzameling W speelt een centrale rol in het algoritme van Berlekamp.
4.7.2
Stelling
De verzameling W is een deelruimte van V . Bewijs: Stel dat v1 (x) en v2 (x) elementen zijn van W . Gebruikmakend van analoge argumenten als bij het bewijs van (4.26) krijgen we: (v1 (x) + v2 (x))q = v1 (x)q + v2 (x)q = v1 (x) + v2 (x)
(4.29)
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
139
en dus v1 (x) + v2 (x) ∈ W. Als c ∈ GF(q) en v(x) ∈ W , hebben we gelet op (4.24) (c v(x))q = cq v(x)q = c v(x)
(4.30)
en dus ook c v(x) ∈ W. Dit toont dus aan dat W een deelruimte is van V .
4.7.3
Een andere voorstelling van GF(q)
Stel dat a(x) irreductibel is in GF(q)[x], dan is bovendien V een veld. Daartoe volstaat het op te merken dat als a(x) irreductibel is, voor een willekeurige v(x) ∈ V \{0}, GGD(v(x), a(x)) = 1 Gelet op het uitgebreid algoritme van Euclides, bestaan er dan s(x), t(x) ∈ GF(q)[x] z´o dat s(x) v(x) + t(x) a(x) = 1. Als we die uitdrukking modulo a(x) beschouwen, volgt daaruit het bestaan van σ(x) ∈ V z´o dat σ(x) v(x) = 1. Beschouwen we nu het polynoom p(z) = z q − z ∈ V [z]
(4.31)
dan heeft die hoogstens q wortels in V . Gelet op Lemma (4.6.3) is elk element van GF(q) een wortel van (4.31), en aangezien er zo juist q zijn, zijn dat alle wortels van die vergelijking. Bovendien voldoen alle elementen uit W aan de uitdrukking (4.31), zodat dus W kan ge¨ıdentificeerd worden met de elementen uit GF(q) zelf. Het resultaat is dat W een deelruimte is van V van de dimensie 1.
qed
Dit geeft ons nu een criterium om uit te maken of a(x) irreductibel is. Het volstaat een basis voor W te berekenen. Als er slechts ´e´en basiselement gevonden wordt, is a(x) irreductibel. Als dimensie(W ) > 1 dan zal de Chinese reststelling een methode opleveren om W op een analoge manier te beschrijven als hierboven. Stel dat a(x) kwadraatvrij is en dat de factorisatie gegeven wordt door a(x) = a1 (x) . . . ak (x) waarbij ai (x) irreductibele, onderling ondeelbare factoren zijn. Stellen we nu voor elke i Vi = GF(q)[x]/hai (x)i
140
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
dan leert de Chinese Reststelling ons dat de afbeelding Φ : V 7→ V1 × . . . × Vk gedefinieerd door Φ(v(x) mod a(x)) = (v(x) mod a1 (x), . . . , v(x) mod ak (x)) een ringisomorfisme is. Derhalve hebben we v(x)q ≡ v(x) mod a(x) =⇒ v(x)q ≡ v(x) mod ai (x) ∀i ∈ {1, . . . , k} Dus induceert Φ een ringmorfisme ΦW : W 7→ W1 × · · · × Wk
(4.32)
waarbij voor elke i, Wi = {s ∈ Vi : sq = s}.
Aangezien ai (x) irreductibel is, is elke Vi een veld. Derhalve kan op dezelfde manier als in (4.7.3) besloten worden dat elke Wi te identificeren is met het basisveld GF(q)
4.7.4
Stelling
De ge¨ınduceerde afbeelding ΦW in (4.32) is een ringisomorfisme, en dus ook een vectorruimte-isomorfisme. In het bijzonder is dus de dimensie van W het aantal irreductibele factoren van a(x). Bewijs: Dat ΦW een injectie is, volgt uit het feit dat Φ reeds die eigenschap heeft. We moeten nu nog aantonen dat het een surjectie is. Zij (s1 , . . . , sk ) ∈ W1 × · · · × Wk . Aangezien Φ een opafbeelding is, bestaat er een v(x) ∈ V z´o dat Φ(v(x)) = (s1 , . . . , sk ). Het volstaat nog aantonen dat v(x) ∈ W . We hebben
Φ(v(x)q ) = (sq1 , . . . , sqk ) = (s1 , . . . , sk ) = Φ(v(x)).
Aangezien Φ een injectie is, volgt daaruit dat v(x)q = v(x) moet zijn, zodat derhalve v(x) ∈ W . Aangezien het ringisomorfisme hier ook een vectorruimte-isomorfisme is, volgt het tweede deel van de stelling uit de opmerking dat elke Wi de dimensie 1 heeft als vectorruimte over GF(q), zodat W1 × · · · × Wk de dimensie k heeft. qed Stelling (4.7.4) is nuttig in het bepalen van het aantal factoren dat we in a(x) zullen vinden. Het blijft evenwel nog steeds een open vraag, om uit te rekenen wat die factoren zijn als we W kennen, en hoe we W zelf moeten bepalen. We beginnen met de eerste vraag te beantwoorden.
141
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
4.7.5
Stelling
Zij a(x) een kwadraatvrij polynoom in GF(q)[x] en v(x) een niet-constant polynoom in W , dan is Y GGD(v(x) − s, a(x)). a(x) = s∈GF(q) Bewijs: Het polynoom xq − x is in GF(q)[x] te factoriseren als xq − x =
Y
s∈GF(q)
(x − s)
derhalve is v(x)q − v(x) =
Y
s∈GF(q)
(v(x) − s)
Aangezien ai (x) | a(x) voor elke i hebben we gelet op (4.27) ai (x) | v(x)q − v(x) =
Y
(v(x) − s)
(4.33)
GGD(v(x) − s, v(x) − t) = 1 als s 6= t
(4.34)
s∈GF(q)
We merken op dat
Uit (4.33) en (4.34) volgt nu dat voor een gegeven i, ai (x) een term v(x) − si moet delen voor juist ´e´en si . Derhalve hebben we voor i ∈ {1, . . . , k} ai (x) | GGD(a(x), v(x) − si ) dus hebben we a(x) |
k Y
GGD(v(x) − si , a(x))
i=1
!
|
Het is duidelijk dat voor elke s ∈ GF(q)
Y
s∈GF(q)
GGD(v(x) − s, a(x)) .
(4.35)
GGD(v(x) − s, a(x)) | a(x) zodat gelet op (4.34)
Y
s∈GF(q)
GGD(v(x) − s, a(x)) | a(x).
Uit (4.35) en (4.36) volgt de stelling.
(4.36) qed
Stelling (4.7.5) reduceert nu het probleem van de factorisatie van a(x) naar het bepalen van alle v(x) ∈ W , en een aantal GGD berekeningen. Wanneer er echter
142
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
k factoren zijn, is het vinden van de q k elementen van W een te zware opgave. Aangezien evenwel W een vectorruimte is van dimensie k, volstaat het k lineair onafhankelijke basisvectoren te vinden en dan Stelling (4.7.5) toe te passen. Dit maakt het probleen handelbaar. Bepaal een basis voor W .// We gaan nu op zoek naar een methode om de basis van W te bepalen. Voor elk polynoom v(x) ∈ GF(q)[x] hebben we v(x)q = (v0 + v1 x + . . . + vn−1 xn−1 )q q = v0q + v1q xq + . . . + vn−1 (x(n−1) )q = v0 + v1 xq + . . . + vn−1 (x(n−1) )q = v(xq ) Derhalve kunnen we schrijven dat W = {v(x) ∈ GF(q)[x] : v(xq ) − v(x) = 0 mod a(x)} We zullen nu daaruit een beschrijving van W afleiden in de vorm van een oplossingsruimte van een stelsel van n vergelijkingen met n onbekenden, waarbij n = deg(a(x)). We beschouwen daartoe de matrix Q = [qi,j : 0 ≤ i, j ≤ n − 1] waarvan de elementen qi,j voldoen aan de volgende betrekkingen: xq j = qj,0 + qj,1 x + . . . + qj,n−1 xn−1 mod a(x)
(4.37)
m.a.w. de rijen van de co¨effici¨entenmatrix Q worden bepaald door de co¨effici¨enten van de resten van de achtereenvolgende delingen van x0 , xq , x2q , . . . , x(n−1)q door a(x). (zie voorbeeld in comp475.mws)
4.7.6
Stelling
Zij W gegeven door de gelijkheid (4.27). Als dan Q bepaald wordt door (4.37) hebben we W = {v = (v0 , . . . , vn−1 ) : v(Q − I) = 0}. (4.38) Bewijs: De vergelijking v(xq ) − v(x) ≡ 0 mod a(x)
(4.39)
143
4.7. BERLEKAMPS’ FACTORISATIEALGORITME is equivalent met
0 ≡
≡
≡ en dus
n−1 X
qj
−
vj x
j=0
n−1 X
i=0
n−1 X
i
i=0
n−1 X
j=0
!
j
vj x
j=0
qj,ix
vj
j=0
n−1 X
n−1 X
−
mod a(x)
n−1 X
vj x
j=0
i
vj qj,i − vi x
j
mod a(x)
mod a(x)
n−1 X j=0
vj qj,i − vi ≡ 0, ∀ i ∈ {0, . . . , n − 1}
(4.40)
(4.41)
De vergelijking (4.41) is equivalent met (v0 , . . . , vn−1 ) Q − (v0 , . . . , vn−1 ) = (0, . . . , 0), d.i. v (Q − I) = 0. De equivalentie van (4.39) en (4.42) geeft ons (4.38).
(4.42) qed
Om nu het algoritme van Berlekamp te vervolledigen, moeten we de drie basisstappen van het algoritme in detail bespreken. 1. Generatie van de matrix Q Om de matrix Q te genereren, moeten we de volgende berekeningen maken: xq mod a(x), x2q mod a(x), . . . , x(n−1)q mod a(x). We kunnen daarbij gebruik maken van een eenvoudig iteratief algoritme, dat de machten xk+1 mod a(x) berekent, wanneer xk mod a(x) reeds berekend is. Als a(x) = a0 + a1 x + . . . + an−1 xn−1 + xn en xk = rk,0 + rk,1 x + . . . + rk,n−1xn−1 mod a(x) dan kunnen we moda(x) de volgende berekeningen maken: xk+1 ≡ rk,0 x + rk,1 x2 + . . . + rk,n−1 xn ≡ rk,0 x + rk,1 x2 + . . . + rk,n−1 (−a0 − a1 x − . . . − an−1 xn−1 ) ≡ −rk,n−1 a0 + (rk,0 − rk,n−1a1 )x + . . . + (rk,n−2 − rk,n−1an−1 )xn−1 ≡ rk+1,0 + rk+1,1 x + . . . + rk+1,n−1xn−1
144
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
waarbij rk+1,0 = −rk,n−1 a0 , rk+1,i = rk,i−1 − rk,n−1 ai voor i = 1, . . . , n − 1. We kennen derhalve Q door als volgt een reeks van vectoren met elementen in GF (q) te berekenen. r ← (r0 , . . . , rn−1 ) Initialisatie: r ← (1, 0, . . . , 0) Iteratiestap: r ← (−rn−1 a0 , r0 − rn−1 a1 , r1 − rn−1 a2 , . . . rn−2 − rn−1 an−1 ). In dit proces vraagt de berekening van elke nieuwe rij uit Q, dus van elk nieuw element xiq q n vermenigvuldigingen. De kost voor het genereren van de matrix Q is dus O(q n2 ) veldbewerkingen. We kunnen dit algoritme als volgt samenvatten:
procedure (a(x), q) # a(x) ∈ GF(q)[x], deg(a(x)) = n, q = pm # Output : matrix Q voor Berlekamp n ← deg(a(x)); r ← (1, 0, . . . , 0); Row(0, Q) ← r; for k from 1 to (n − 1)q do { r ← (−rn−1 a0 , r0 − rn−1 a1 , . . . , rn−2 − rn−1 an−1 ); if q|k then Row(k/q, Q) ← r} return(Q) end
4.7.7
Voorbeeld FormMatrixQ in Maple
Zij a(x) een polynoom in GF(11)[x] = Z11 [x] a(x) = x6 − 3x5 + x4 − 3x3 − x2 − 3x + 1.
(4.43)
Dan berekenen we de matrix Q (een 6 × 6 matrix) voor a(x) volgens het hierboven beschreven algoritme. De volgende Maple-sessie (comp477.mws)geeft ons de gevraagde matrix
145
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
Q=
> >
restart; with(linalg):
1 0 0 0 0 3 5 8 8 6 3 6 6 1 10 9 4 10 3 7 7 8 10 0 0 8 10 7 8 10
0 5 0 9 8 8
(4.44)
Warning, the protected names norm and trace have been redefined and unprotected
Genereren van de matrix Q (onmiddellijk vertrekkend van het polynoom) > > > > > > > > > > > > > > > > > > > > > > > > > > >
FormMatrixQ := proc(a,x,p,q) # door S.Van Wonterghem local n,r,h,i,k,Q,A; n := degree(a,x); r := array(1..1,0..n-1); h := array(1..1,0..n-1); A := array(1..1,0..n-1); A[1,0] := subs(x=0,a); for i from 1 to n-1 do A[1,i] := coeff(a,x^i); od; r[1,0] := 1; for i from 1 to n-1 do r[1,i] := 0; od; Q := array(1..n,1..n); for i from 1 to n do Q[1,i] := r[1,i-1]; od; for k from 1 to (n-1)*q do k; h[1,0] := modp(-1*r[1,n-1]*A[1,0],p); for i from 1 to n-1 do h[1,i] := modp(r[1,i-1]-r[1,n-1]*A[1,i],p); od; for i from 0 to n-1 do r[1,i] := h[1,i]; od; if irem(k,q)=0 then for i from 1 to n do Q[iquo(k,q)+1,i] := r[1,i-1]; od; fi; od; evalm(Q); end: A := x^6-3*x^5+x^4-3*x^3-x^2-3*x+1;
146
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN A := x6 − 3 x5 + x4 − 3 x3 − x2 − 3 x + 1
>
Q_A := FormMatrixQ(A,x,11,11);
Q A :=
1 0 0 0 0 3 5 8 8 6 3 6 6 1 10 9 4 10 3 7 7 8 10 0 0 8 10 7 8 10
0 5 0 9 8 8
2. Eens Q gevonden is, moeten we nu een basis bepalen voor de oplossingen van (4.42).
4.7.8
Driehoeks-idempotente matrix
Gebruikmakend van elementaire kolombewerkingen kunnen we de matrix Q − I herleiden tot een matrix L in driehoeks-idempotente vorm. Een dergelijke matrix is een beneden-driehoeks matrix, met op de diagonaal 0 of 1. Bovendien, als het i-de diagonaalelement 1 is, dan is dit het enige van nul verschillende element op de corresponderende rij, als het i-de diagonaalelement 0 is, dan is de i-de kolom een 0-kolom. Algemeen kunnen we stellen dat een driehoeks-idempotente matrix de volgende gedaante heeft:
a1,1 0 0 ai,1
...
an,1
...
...
0
... ai,i 0 . . . 0 ... ... an,n
Daarbij zijn ai,j = 0 als i < j en de diagonaalelementen ai,i ∈ {0, 1}. Als ai,i = 1 dan zijn op de i-de rij de overige elementen ai,j = 0 (j 6= i). Als ai,i = 0 dan zijn op de i-de kolom alle elementen ak,i = 0.
4.7.9
Voorbeeld
Zo is bijvoorbeeld de volgende matrix een driehoeks-idempotente matrix.
147
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
L=
4.7.10
1 3 0 2 0
0 0 0 0 0
0 0 1 4 0
0 0 0 0 0
0 0 0 0 1
Eigenschap
Een driehoeks-idempotente matrix is idempotent, d.i L2 = L. Bewijs: Bij het bepalen van de L2 is duidelijk dat de k-de kolom van het product gegeven wordt door
a1,1 0 0 ai,1
...
an,1
...
...
0
... ai,i 0 . . . 0 ... ... an,n
0 .
ak,k . an,k
Het is duidelijk, dat als ak,k = 1 dan precies de k-de kolom uit L gekopieerd wordt, terwijl als ak,k = 0 alle elementen uit die kolom 0 zijn en dus ook de resulterende kolom 0 is. qed We merken nog op dat bij de reductie van Q − I naar een driehoeks-idempotente vorm L, de kern behouden blijft, en dus kern(Q − I) = kern(L)
4.7.11
Stelling
Zij L een driehoeks-idempotente matrix, dan vormen de van nul verschillende rijen van I − L een basis voor kern(L). Bewijs: We merken op dat kern(L) = {v|vL = 0}. Stel v [1] , . . . , v [k] de verzameling van de van nul verschillende rijen van I − L. Aangezien L idempotent is, hebben we (I − L)L = 0.
148
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Derhalve geldt v [i] L = 0 voor alle i, en zijn de v [i] vectoren van de kern. We tonen nu aan dat deze vectoren lineair onafhankelijk zijn. Stel dat er constanten c1 , c2 , . . . , ck bestaan z´o dat c1 v [1] + . . . + ck v [k] = 0 Dan construeren we een vector v op de volgende manier: vj = 0 als de j-de rij van (I − L) nul is vj = ci als de i-de niet-nulrij de j-de rij is van (I − L) Dan is v (I − L) = 0 d.i. v = v L Stel dat de j-de rij, de i-de niet-nulrij is van (I − L). Dan is i ≤ j. Volgens de definitie van driehoeks-idempotente vorm, is dan de j-de kolom van L: L ,j een nulkolom. Derhalve is dan ook de j-de component van v L, d.i. ci = 0. Aangezien dit het geval is voor alle niet-nulrijen, hebben we c1 = . . . = ck = 0, hetgeen aantoont dat de vectoren v [i] lineair onafhankelijk zijn. Zij nu Li,i het i-de diagonaal element van de matrix L. Dan is duidelijk dat de corresponderende i-de rij van de matrix (I − L): (I − L)i, = 0 a.s.a. Li,i = 1. Analoog is Li,i = 0 a.s.a. de i-de kolom van (I − L), (I − L)
,i
=I
,i
De rang van L is derhalve n − k, zodat gelet op de dimensiestelling, de dimensie van kern(L) = k is. Aangezien de niet-nulrijen van (I − L) een stel van k lineair onafhankelijke vectoren van kern(L) vormen, vormen ze ook een basis.
4.7.12
Voorbeeld
De matrix uit het voorbeeld (4.7.9) is van de rang 3, zodat derhalve de rang van kern(L) 2 is. De twee niet-nulrijen van (I − L) worden gegeven door v [1] = (−3, 1, 0, 0, 0), v [2] = (−2, 0, −4, 1, 0).
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
4.7.13
149
Algoritme voor basis van de kern
We kunnen het algoritme voor het bepalen van de basis van de kern van Q − I als volgt beschrijven:
procedure KernelBasis(M) # Gegeven de matrix M # Output= {v [1] , . . . , v [k]}: basis voor kern(M) n ← RowSize(M); for k from 1 to n do { # zoek pivot for i from k to n while Mk,i = 0 do i ← i + 1 if i ≤ n then { # Normeer kolom i en verwissel die met kolom k −1 Column(i, M) ← Column(i, M) ∗ Mk,i ; SwitchColumn(i, k, M); # elimineer de rest van de k-de rij door kolombewerkingen for i from 1 to n with i 6= k do Column(i, M) ← Column(i, M) − Column(k, M) ∗ Mk,i}} # Controleer op nulkolommen: # Ga na of kolommen met 0 op de diagonaal 0 zijn # Indien NIET: NORMEER EN VERWISSEL DE KOLOMMEN if Mi,i = 0 and for j ≥ i Mj,i 6= 0 # Normeer kolom i en verwissel die met kolom J −1 Column(j, M) ← Column(i, M) ∗ Mj,i ; # elimineer de rest van de J-de rij door kolombewerkingen for h from 1 to n with h 6= J do Column(h, M) ← Column(h, M) − Column(j, M) ∗ Mj,h }} # Transformeer M naar I − M M ← I − M; # Zoek de niet-nulrijen van M i ← 0; j ← 1 while j ≤ n do { while Row(j, M) = 0 and j ≤ n do j ← j + 1; if j ≤ n then { i ← i + 1; v [i] ← Row(j, M)}} return({v [1] , . . . , v [i]}) end
150
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Voorbeeld De volgende Maple-sessie (zie comp4713.mws), geeft ons de reductie van (Q − I), voor Q uit (4.44) >
restart;
>
with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected
1. Manueel bepalen van een basis voor W = Q − I, voor de matrix Q uit paragraaf 4.7.7 : >
NORM := proc(a,x,p)
>
map(modp,mulcol(a,x,a[x,x]^(-1) mod p),p);
>
end:
>
K_Reduce := proc(a,x,p)
>
map(modp,transpose(pivot(transpose(a),x,x)),p);
>
end:
>
switchcol := proc(i,j,a)
>
local b,n,k;
>
b:=col(a,i);
>
n:=coldim(a);
>
for k from 1 to n do a[k,i]:=a[k,j]; a[k,j]:=b[k] od;
>
evalm(a);
> >
end: Q :=
>
array(1..6,1..6,[[1,0,0,0,0,0],[3,5,8,8,6,5],[3,6,6,1,10,0],[9,4,10,3,
>
7,9],[7,8,10,0,0,8],[8,10,7,8,10,8]]);
Q :=
Bereken A = Q − I
1 0 0 0 0 3 5 8 8 6 3 6 6 1 10 9 4 10 3 7 7 8 10 0 0 8 10 7 8 10
0 5 0 9 8 8
151
4.7. BERLEKAMPS’ FACTORISATIEALGORITME >
I6 := array(1..6,1..6,identity); I6 := array(identity, 1..6, 1..6, [])
>
A := Q - I6; A := Q − I6
>
A := evalm(A); 0 0 0 0 0 0 3 4 8 8 6 5 3 6 5 1 10 0 9 4 10 2 7 9 7 8 10 0 −1 8 8 10 7 8 10 7
A :=
>
0 0 0 0 1 8 8 6 7 5 1 10 1 10 2 7 2 10 0 10 8 7 8 10
0 5 0 9 8 7
0 0 4 6 1 6
0 1 7 1 2 8
0 0 0 0 4 0 2 5 5 6 9 10
0 0 1 1 9 6
0 0 9 4 9 0
0 0 4 6 1 6
0 1 7 1 2 8
0 0 0 0 1 0 6 5 4 6 5 10
0 0 1 1 9 6
0 0 9 4 9 0
0 0 0 4 7 8
0 1 0 3 7 6
0 0 0 0 1 0 6 5 4 6 5 10
0 0 0 0 0 0 6 5 5 6 1 10
A:=K_Reduce(A,3,11);
A :=
>
0 3 3 9 7 8
A:=NORM(A,3,11);
A :=
>
A:=K_Reduce(A,2,11);
A :=
>
A:=NORM(A,2,11);
A :=
>
A:=NORM(A,4,11);
152
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
A :=
0 0 0 4 7 8
0 1 0 3 7 6
0 0 0 0 0 0 0 0 1 0 0 0 6 1 6 5 4 10 5 6 5 2 1 10
>
A:=K_Reduce(A,4,11);
>
0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 A := 0 0 0 1 0 0 0 10 10 10 0 0 0 0 4 2 0 0 Id := evalm(array(identity, 1..6,1..6));
Id :=
>
A:=evalm(Id-A);
A :=
>
A:=NORM(A,1,11);
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 −10 −10 −10 1 0 0 −4 −2 0
A :=
1 0 0 0 0 0
0 0 0 0 1 0
0 0 0 0 1 7
0 0 0 0 1 9
0 0 0 0 1 0
0 0 0 0 0 1
0 0 0 0 0 1
De basis voor kern wordt nu gegeven door de van nul verschillende rijen uit die matrix: > [vector([1, 0, 0, 0, 0, 0]), vector([0, 1, 1, 1, 1, 0]), vector([0, >
0, 7, 9, 0, 1])]; [[1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0], [0, 0, 7, 9, 0, 1]]
De corresponderende polynomen uit W zijn dus:
4.7. BERLEKAMPS’ FACTORISATIEALGORITME > > >
v_1(x):=1; v_2(x):=x^4+x^3+x^2+x; v_3(x):=x^5+9*x^3+7*x^2; v 1(x) := 1 v 2(x) := x4 + x3 + x2 + x v 3(x) := x5 + 9 x3 + 7 x2
2. Aan de hand van de procedure KernelBasis voor de matrix Q uit paragraaf 4.7.7 : > KernelBasis := proc(Q,p) > # door S.Van Wonterghem (1998) > local n,k,i,j,Ident,l,v,H,som,hulp,M,verz,N; > n := rowdim(Q); M := array(1..n,1..n); > for i from 1 to n do > for j from 1 to n do > M[i,j] := eval(Q[i,j]); > od; od; evalm(M); > for k from 1 to n do i := 0; > for j from n to k by -1 do if M[k,j]<>0 then i := j; fi; od; > if (i<=n and i<>0) then hulp := M[k,i]; > for j from 1 to n do > M[j,i] := modp(M[j,i]/hulp,p); > od; > M := evalm(swapcol(M,i,k)); > for l from 1 to n do hulp := M[k,l]; > if l<>k then > for j from 1 to n do k; i; > M[j,l] := modp(M[j,l]-M[j,k]*hulp,p); > od; > fi; > od; evalm(M); > fi; > od; evalm(M); > Ident := array(1..n,1..n,identity); > N := evalm(Ident-M); > i := 0; j := 1; > while j<=n do > som := 0; > for l from 1 to n do
153
154 > > > > > > > > > > > >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN if N[j,l]=0 then som := som+0; else som := som+1; fi; od; if (j<=n and som<>0) then i := i+1; v||i := vector(n); for l from 1 to n do v||i[l] := modp(N[j,l],p); od; fi; j := j+1; od; H := [seq(evalm(v||l),l=1..i)]; evalm(M),H; end:
Het resultaat van de procedure KernelBasis bestaat uit twee delen :
1. de matrix M die de gereduceerde matrix is van Q - I
2. de basisvectoren van de kern van Q - I > Q := >
array(1..6,1..6,[[1,0,0,0,0,0],[3,5,8,8,6,5],[3,6,6,1,10,0],[9,4,10,3,
>
7,9],[7,8,10,0,0,8],[8,10,7,8,10,8]]); 1 0 0 0 0 0 5 8 8 6 5 3 3 6 6 1 10 0 Q := 9 4 10 3 7 9 7 8 10 0 0 8 8 10 7 8 10 8 I6 := array(1..6,1..6,identity); I6 := array(identity, 1..6, 1..6, []) H := Q - I6; H := Q − I6 KernelBasis(evalm(H),11);
>
>
>
0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 , [[1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0], [0, 0, 7, 9, 0, 1]] 0 0 0 1 0 0 0 10 10 10 0 0 0 0 4 2 0 0 > v_2(x):=x^4+x^3+x^2+x;
4.7. BERLEKAMPS’ FACTORISATIEALGORITME >
155
v_3(x):=x^5+9*x^3+7*x^2; v 2(x) := x4 + x3 + x2 + x v 3(x) := x5 + 9 x3 + 7 x2
Controle op de nulkolommen In een aantal gevallen krijgen we een 0 op de diagonaal, zonder dat de corresponderende kolom de 0-kolom is. In dat geval moeten we dit in orde brengen door het verwisselen van kolommen. Zie COMP4713B.MWS >
restart;
>
with(linalg):
>
NORM := proc(a,x,p)
>
map(modp,mulcol(a,x,a[x,x]^(-1) mod p),p);
>
end:
> >
K_Reduce := proc(a,x,p) map(modp,transpose(pivot(transpose(a),x,x)),p
>
);
>
end:
>
switchcol := proc(i,j,a)
>
local b,n,k;
>
b:=col(a,i);
> >
n:=coldim(a); for k from 1 to n do a[k,i]:=a[k,j];
>
a[k,j]:=b[k] od;
>
evalm(a);
>
end:
>
Q:=
>
array(1..3,1..3,[[1,0,0],[1,1,0],[0,1,1]]);
1 0 0 Q := 1 1 0 0 1 1 >
Id:=evalm(array(identity, 1..3,1..3));
156
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
1 0 0 Id := 0 1 0 0 0 1 >
A:=evalm(Q-Id); 0 0 0 A := 1 0 0 0 1 0
>
A:=switchcol(1,2,A); 0 0 0 A := 0 1 0 1 0 0
>
A:=switchcol(1,3,A); 0 0 0 A := 0 1 0 0 0 1
>
A:=evalm(Id-A); 1 0 0 A := 0 0 0 0 0 0
>
A:=NORM(A,1,3); 1 0 0 A := 0 0 0 0 0 0
We vinden we dus een basis voor W = kern(Q − I):
v [1] = (1, 0, 0).
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
4.7.14
157
Algoritme van Berlekamp
We kunnen nu de factorisatie van het polynoom a(x) uit (4.43) be¨eindigen door toepassing van het algoritme van Berlekamp, dat we als volgt kunnen samenvatten:
procedure Berlekamp(a(x), q) # Gegeven het kwadraatvrij polynoom a(x) ∈ GF(q)[x] # Output= a1 (x), . . . , ak (x): a(x) = a1 (x) . . . ak (x) Q ← FormMatrixQ(a(x), q); [v [1] , . . . , v [k] ] ← KernelBasis(Q − I) # Note: v [1] = (1, 0, . . . , 0). factors ← {a(x)} r←2 while SizeOf(factors) < k do { foreach u(x) ∈ factors do { foreach s ∈ GF(q) do { g(x) ← GGD(v [r] (x) − s, u(x)); if g(x) 6= 1 and g(x) 6= u(x) then { Remove(u(x), factors); u(x) ← u(x)/g(x); Add({u(x), g(x)}, factors)} if SizeOf(factors) = k then return(factors)} r ← r + 1}} end
4.7.15
Voorbeeld
Wanneer we het algoritme van Berlekamp nu toepassen op het voorbeeld 4.43 krijgen we de volgende Maple-sessie (COMP4715.MWS): > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected
1. manueel uitvoeren aan de hand van het algoritme van Berlekamp In paragraaf
158
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN 4.7.13
vonden we de volgende resultaten : > a(x):=x^6-3*x^5+x^4-3*x^3-x^2-3*x+1; a(x) := x6 − 3 x5 + x4 − 3 x3 − x2 − 3 x + 1 > v1(x):=1; v1(x) := 1 > v2(x):=x^4+x^3+x^2+x; v2(x) := x4 + x3 + x2 + x > v3(x):=x^5+9*x^3+7*x^2; v3(x) := x5 + 9 x3 + 7 x2 > g(x):=Gcd(a(x),v2(x)) mod 11; g(x) := x + 1 > quo(a(x),g(x),x) mod 11; >
>
>
>
>
>
>
>
>
>
>
>
x5 + 7 x4 + 5 x3 + 3 x2 + 7 x + 1 Factoren:=[x^5+7*x^4+5*x^3+3*x^2+7*x+1,x+1]; Factoren := [x5 + 7 x4 + 5 x3 + 3 x2 + 7 x + 1, x + 1] a1(x):=x^5+7*x^4+5*x^3+3*x^2+7*x+1; a1(x) := x5 + 7 x4 + 5 x3 + 3 x2 + 7 x + 1 g(x):=Gcd(a1(x),v2(x)) mod 11; g(x) := 1 v(x):=v2(x)+1; v(x) := x4 + x3 + x2 + x + 1 g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 2 g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 3 g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 4 g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 5
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
>
g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 6 g(x):=Gcd(a1(x),v(x)) mod 11; g(x) := 1 v(x):=v(x)+1; v(x) := x4 + x3 + x2 + x + 7 g(x):=Gcd(a1(x),v(x)) mod 11;
>
g(x) := x3 + 2 x2 + 3 x + 4 quo(a1(x),g(x),x) mod 11;
>
>
>
>
>
x2 + 5 x + 3 Factoren:=[x^3+2*x^2+3*x+4,x^2+5*x+3,x+1]; Factoren := [x3 + 2 x2 + 3 x + 4, x2 + 5 x + 3, x + 1]
Controle : > collect((x^3+2*x^2+3*x+4)*(x^2+5*x+3)*(x+1),x) mod 11; x6 + 8 x5 + x4 + 8 x3 + 10 x2 + 8 x + 1 2. Door gebruik te maken van de procedure Alg Berlekamp
1. Genereren van de matrix Q (zie comp477.mws) > > > > > > > > > > > > > > > > > >
FormMatrixQ := proc(a,x,p,q) # door S.Van Wonterghem local n,r,h,i,k,Q,A; n := degree(a,x); r := array(1..1,0..n-1); h := array(1..1,0..n-1); A := array(1..1,0..n-1); A[1,0] := subs(x=0,a); for i from 1 to n-1 do A[1,i] := coeff(a,x^i); od; r[1,0] := 1; for i from 1 to n-1 do r[1,i] := 0; od; Q := array(1..n,1..n); for i from 1 to n do Q[1,i] := r[1,i-1]; od; for k from 1 to (n-1)*q do k; h[1,0] := modp(-1*r[1,n-1]*A[1,0],p); for i from 1 to n-1 do h[1,i] := modp(r[1,i-1]-r[1,n-1]*A[1,i],p);
159
160 > > > > > > > >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN od; for i from 0 to n-1 do r[1,i] := h[1,i]; od; if irem(k,q)=0 then for i from 1 to n do Q[iquo(k,q)+1,i] := r[1,i-1]; od; fi; od; evalm(Q); end:
2. Algoritme voor basis van de kern (zie comp4713.mws) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
KernelBasis := proc(Q,p) # door S.Van Wonterghem (1998) local n,k,i,j,Ident,l,v,H,som,hulp,M,verz,N; n := rowdim(Q); M := array(1..n,1..n); for i from 1 to n do for j from 1 to n do M[i,j] := eval(Q[i,j]); od; od; evalm(M); for k from 1 to n do i := 0; for j from n to k by -1 do if M[k,j]<>0 then i := j; fi; od; if (i<=n and i<>0) then hulp := M[k,i]; for j from 1 to n do M[j,i] := modp(M[j,i]/hulp,p); od; M := evalm(swapcol(M,i,k)); for l from 1 to n do hulp := M[k,l]; if l<>k then for j from 1 to n do k; i; M[j,l] := modp(M[j,l]-M[j,k]*hulp,p); od; fi; od; evalm(M); fi; od; evalm(M); Ident := array(1..n,1..n,identity); N := evalm(Ident-M); i := 0; j := 1; while j<=n do som := 0; for l from 1 to n do
4.7. BERLEKAMPS’ FACTORISATIEALGORITME > > > > > > > > > > > >
161
if N[j,l]=0 then som := som+0; else som := som+1; fi; od; if (j<=n and som<>0) then i := i+1; v||i := vector(n); for l from 1 to n do v||i[l] := modp(N[j,l],p); od; fi; j := j+1; od; H := [seq(evalm(v||l),l=1..i)]; evalm(M),H; end:
3. Algoritme van Berlekamp > > > > > > > > > > > > > > > > > > > > > > > > > >
Alg_Berlekamp := proc(a,x,p,q) # door S.Van Wonterghem (1998) local Q,H,k,K,i,j,factors,r,u,g,n,s,L,output; Q := FormMatrixQ(a,x,p,q); H := KernelBasis(evalm(Q-array(1..rowdim(Q),1..coldim(Q),identity)),p)[2]; k := nops(H); n := nops(H[1]); L := [seq(0,i=1..k)]; for i from 1 to k do K[i] := convert(H[i],list); L[i] := K[i][1]; n := nops(K[i]); for j from 2 to n do L[i] := L[i] + K[i][j]*x^(j-1); od; od; factors := {a}; r := 2; while (nops(factors)
162
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
>
od; output := 1;
>
for i from 1 to nops(factors) do
>
output := output*factors[i];
>
od;
>
output;
>
end:
>
A := x^6-3*x^5+x^4-3*x^3-x^2-3*x+1; A := x6 − 3 x5 + x4 − 3 x3 − x2 − 3 x + 1
>
Alg_Berlekamp(A,x,11,11); (x3 + 2 x2 + 3 x + 4) (x2 + 5 x + 3) (x + 1)
2de voorbeeld : >
B := x^8+x^6+10*x^4+10*x^3+8*x^2+2*x+8; B := x8 + x6 + 10 x4 + 10 x3 + 8 x2 + 2 x + 8
>
Sqrfree(B) mod 13; [1, [[x8 + x6 + 10 x4 + 10 x3 + 8 x2 + 2 x + 8, 1]]]
>
Q := FormMatrixQ(B,x,13,13);
Q :=
>
H := evalm(Q-array(1..8,1..8,identity));
H :=
>
1 0 0 0 0 0 0 0 2 1 7 11 10 12 5 11 3 6 4 3 0 4 7 2 4 3 6 5 1 6 2 3 2 11 8 8 3 1 3 11 6 11 8 6 2 7 10 9 5 11 7 10 0 11 7 12 3 3 12 5 0 11 9 12
0 0 0 0 0 0 0 0 2 0 7 11 10 12 5 11 3 6 3 3 0 4 7 2 4 3 6 4 1 6 2 3 2 11 8 8 2 1 3 11 6 11 8 6 2 6 10 9 5 11 7 10 0 11 6 12 3 3 12 5 0 11 9 11
KernelBasis(H,13);
4.7. BERLEKAMPS’ FACTORISATIEALGORITME
>
0 0 0 0 0 0 0 0
0 1 0 0 0 0 8 4
0 0 1 0 0 0 8 2
0 0 0 1 0 0 0 4
0 0 0 0 1 0 4 3
0 0 0 0 0 1 8 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
163
,
[[1, 0, 0, 0, 0, 0, 0, 0], [0, 5, 5, 0, 9, 5, 1, 0], [0, 9, 11, 9, 10, 12, 0, 1]] Alg_Berlekamp(B,x,13,13); (x3 + 8 x2 + 4 x + 12) (x + 3) (x4 + 2 x3 + 3 x2 + 4 x + 6)
Controle : > modp(expand(%),13); x8 + x6 + 10 x4 + 10 x3 + 8 x2 + 2 x + 8 3. het commando Berlekamp in Maple > Berlekamp(A,x) mod 11; >
{x + 1, x3 + 2 x2 + 3 x + 4, x2 + 5 x + 3} Berlekamp(B,x) mod 13; {x3 + 8 x2 + 4 x + 12, x + 3, x4 + 2 x3 + 3 x2 + 4 x + 6}
Daarbij merken we op dat indien we GGD(a1 (x), v [2] (x) + s) = 1 zouden gevonden hebben voor alle s ∈ GF(11), we het proces zouden moeten verder zetten hebben met het beschouwen van GGD(a1 (x), v [3] (x) + s).
4.7.16 >
Berlekamp in Maple
a:=x^6-3*x^5+x^4-3*x^3-x^2-3*x+1; a := x6 − 3 x5 + x4 − 3 x3 − x2 − 3 x + 1
>
Berlekamp(a,x) mod 11; {x + 1, x3 + 2 x2 + 3 x + 4, x2 + 5 x + 3}
164
4.8
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
TOEPASSING I Voorstelling van EINDIGE VELDEN
4.8.1
Inleiding
In (4.5.1) hebben we opgemerkt dat voor een gegeven q := pm met p priem, GF(q) ∼ = Zp [x]/hr(x)i voor een zekere r(x) ∈ Zp [x], r(x) irreductibel over Zp en deg(r(x)) = m. Beschouwen we b.v. GF(4). Gelet op x2 + x + 1 irreductibel over Z2 en deg(x2 + x + 1) = 2, hebben we GF(4) ∼ = Z2 [x]/hx2 + x + 1i = {0, 1, x, x + 1} In de context van Computer Algebra is dit de meest voor de hand liggende voorstelling van het eindig veld GF(q), aangezien de bewerkingen op polynomen reeds ge¨ımplementeerd zijn. In de wiskunde zien we evenwel meestal de voorstelling GF(q) = {0, 1, α, α2, . . . , αq−2 | αq−1 = 1} Het element α dat GF(q) voortbrengt, wordt een primitief element genoemd. We hebben reeds gezien dat voor elk element s ∈ GF(q) sq − s = 0, m.a.w. elk element s van GF(q) is een nulpunt van het polynoom xq − x ∈ Zp [x]. Een element van GF(q) kan evenwel ook nog nulpunt zijn van een polynoom a(x) ∈ Zp [x] met deg(a(x)) < q. Definitie: Zij nu voor een gegeven s ∈ GF(q) ms (x) ∈ Zp [x] het polynoom met de laagste graad waarvoor ms (s) = 0, dan wordt ms (x) een minimaalpolynoom voor s genoemd.
4.8.2
Eigenschappen van het minimaalpolynoom
1. ms (x) is irreductibel; 2. zij a(x) ∈ Zp [x] z´o dat a(s) = 0, dan is ms (x) een deler van a(x): ms (x)|a(x);
165
4.8. TOEPASSING I 3. ms (x)|(xq − x); 4. zij q = pm , dan is deg(ms (x)) ≤ m
5. zij α een primitief element van GF(q), dan wordt het minimaalpolynoom mα (x) van α ook nog primitief-polynoom2 genoemd. Er geldt: deg(mα (x)) = m 6. zij mα (x) een primitief-polynoom, dan is GF(q) ∼ = Zp [x]/hmα (x)i Uit deze eigenschappen kunnen we nu een algoritme afleiden om een voorstelling voor een gegeven GF(q) op te bouwen.
4.8.3
Voorstelling van een eindig veld: een algoritme
1. Beschouw xq−1 − 1 als polynoom van Zp [x] en bepaal met behulp van het algoritme van Berlekamp de factorisatie van xq−1 − 1 in irreductibele factoren. Als voorbeeld beschouwen we GF(32 ), en we vinden:
x8 − 1 = (x + 1)(x + 2)(x2 + 1)(x2 + x + 2)(x2 + 2x + 2) 2. De factoren met de graad = m zijn kandidaat primitief-polynoom voor GF(q). We illustreren dit aan de hand van het polynoom x2 + 2x + 2, daarbij construeren we Z3 [x]/hx2 + 2x + 2i, waarbij we de corresponderende polynomen noteren met hun co¨effici¨entenvector over Z3 0 0 ↔ 0 0 1 ↔ 1 1 0 ↔ α Gelet op het feit dat we modulo x2 + 2x + 2 rekenen, moeten we nu het bij α2 horende polynoom bepalen aan de hand van de uitdrukking α2 + 2α + 2 = 0; derhalve is α2 = α + 1. Op analoge manier berekenen we de overige machten αt : 0 ≤ t ≤ q − 2. 2
niet te verwarren met het begrip primitief polynoom zoals ingevoerd in (4.3.3).
166
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
1 2 0 2 2 1
1 1 2 0 2 2
↔ ↔ ↔ ↔ ↔ ↔
α2 α3 α4 α5 α6 α7
Berekenen we α8 dan vinden we 1, waaruit we besluiten dat representatie van alle elementen uit GF(9) gevonden zijn. We merken op dat uit de voorgaande constructie volgt dat het polynoom x2 +2x+2 een primitief-polynoom voor GF(9) is. In het algoritme beschouwen we de test αt = 1, waarbij we kunnen besluiten dat als de test opgaat voor t < q − 1, het beschouwde polynoom geen primitief-polynoom is, en derhalve niet in aanmerking komt voor de hierboven beschouwde voorstelling. Opgave Toon aan (met behulp van Maple) dat x2 + 1 geen primitief-polynoom is voor GF(9). 3. De bewerkingstabellen voor de som en het product volgen nu uit de bewerkingen op de polynomen modulo het primitief-polynoom x2 + 2x + 2.
4.8.4
Maple-sessie
De volgende Maple-sessie (comp484.mws) toont aan hoe we met behulp van de Berlekamp procedure de factorisatie van x8 − 1 bepalen, en daaruit de voorstelling van GF(9) kunnen afleiden. >
restart;
m
In deze paragraaf gaan we steeds het polynoom x(p −1) − 1 beschouwen als polynoom over Zp [x] en met behulp van het algoritme van Berlekamp de factorisatie van dit polynoom in irreduciebele factoren bepalen.
Alle factoren van de graad m zijn kandidaat primitief-polynoom voor GF( pm ).
Beschouwen we α als wortel van dit primitief-polynoom, dan kunnen we elk element van GF( pm ) schrijven als een ’veelterm’ in α waarvan de graad kleiner is dan de graad van het primitief-polynoom.
167
4.8. TOEPASSING I
Gebruikmakend van de procedure Normal not kunnen we de elementen van GF( pm ) eveneens schrijven als een lijst van elementen uit GF( p) zodanig dat de elementen van de lijst corresponderen met de co fficinten van de ’veelterm’ in α. Het betreft hier enkel een andere vorm van notatie. Merk bovendien op dat Maple niet in staat is om bewerkingen uit te voeren op deze ’veeltermen’ in α.
> > > > > > > > > > >
Normal_not := proc(m,y,n,p) # door S.Van Wonterghem (1998) local h,i,q; h := vector(n); q := Normal(m) mod p; h[n] := subs(y=0,q); for i from n-1 to 1 by -1 do q := simplify((q-h[i+1])/y); h[i] := subs(y=0,q); od; evalm(h); end:
De procedure Normal not heeft 4 argumenten : 1. het element van GF( pm ) uitgedrukt als ’veelterm’ in y 2. de constante y waarin elk element van GF( pm ) wordt uitgedrukt 3. de graad van het primitief-polynoom 4. de waarde van p
Voorbeeld: GF(3ˆ2) > A := x^8-1; >
Berlekamp(A,x) mod 3;
A := x8 − 1
{x + 1, x + 2, x2 + 1, x2 + 2 x + 2, x2 + x + 2}
168
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Uit de bovenstaande ontbinding blijkt dat er drie mogelijke primitief-polynomen zijn. We onderzoeken deze polynomen. > alias(alpha=RootOf(x^2+2*x+2,x)); α > Normal(0) mod 3; Normal_not(0,alpha,2,3); 0 [0, 0] > Normal(1) mod 3; Normal_not(1,alpha,2,3); 1 [0, 1] > Normal(alpha) mod 3; Normal_not(alpha,alpha,2,3); α [1, 0] > Normal(alpha^2) mod 3; Normal_not(alpha^2,alpha,2,3); α+1 [1, 1] > Normal(alpha^3) mod 3; Normal_not(alpha^3,alpha,2,3); 2α+1 [2, 1] > Normal(alpha^4) mod 3; Normal_not(alpha^4,alpha,2,3); 2 [0, 2] > Normal(alpha^5) mod 3; Normal_not(alpha^5,alpha,2,3); 2α [2, 0] > Normal(alpha^6) mod 3; Normal_not(alpha^6,alpha,2,3); 2α+2 [2, 2] > Normal(alpha^7) mod 3; Normal_not(alpha^7,alpha,2,3); α+2 [1, 2] > Normal(alpha^8) mod 3; Normal_not(alpha^8,alpha,2,3); 1 [0, 1] We vinden dat x2 + 2 x + 2 een primitief-polynoom is.
We onderzoeken nu x2 + x + 2 : Opmerking :
4.8. TOEPASSING I Het is veiliger eerst α ’vernietigen’.
Het bestaan van α zou de resultaten van het vervolg kunnen benvloeden ! > alias(alpha=alpha); >
>
>
>
>
>
>
>
alias(beta=RootOf(x^2+x+2,x)); β Normal(beta^2) mod 3; Normal_not(beta^2,beta,2,3); 2β +1 [2, 1] Normal(beta^3) mod 3; Normal_not(beta^3,beta,2,3); 2β +2 [2, 2] Normal(beta^4) mod 3; Normal_not(beta^4,beta,2,3); 2 [0, 2] Normal(beta^5) mod 3; Normal_not(beta^5,beta,2,3); 2β [2, 0] Normal(beta^6) mod 3; Normal_not(beta^6,beta,2,3); β+2 [1, 2] Normal(beta^7) mod 3; Normal_not(beta^7,beta,2,3); β+1 [1, 1] Normal(beta^8) mod 3; Normal_not(beta^8,beta,2,3); 1 [0, 1]
Hieruit volgt dus dat x2 + x + 2 eveneens een primitief-polynoom is.
Tenslotte onderzoeken we x2 + 1 : > alias(beta=beta); > alias(gamma=RootOf(x^2+1,x)); γ > Normal(gamma^2) mod 3; Normal_not(gamma^2,gamma,2,3); 2 [0, 2]
169
170 >
>
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN Normal(gamma^3) mod 3; Normal_not(gamma^3,gamma,2,3); 2γ [2, 0] Normal(gamma^4) mod 3; Normal_not(gamma^4,gamma,2,3); 1 [0, 1]
We vinden dat x2 + 1 geen primitief-polynoom is van GF(9).
4.8.5
Opgave
Verifieer (in Maple) de volgende voorstelling voor GF(23 ) 0 0 0 1 0 1 1 1
4.8.6
GF(23 ) 0 0 0 0 1 1 1 0 α 0 0 α2 1 1 α3 1 0 α4 1 1 α5 0 1 α6
Opgave
Bewijs met behulp van Maple dat GF(27) kan voorgesteld worden aan de hand van het primitief-polynoom y 3 + 2y + 1 ∈ Z3 [y]. Beschouw dan
y 2x + 1 ∈ GF(27)[x] y x + 2y x + 2y + y + 1 ∈ GF(27)[x] 2 2
2
(maak gebruik van > alias (y=RootOf(x^3+2*x+1,x)); I, y
)
4.8. TOEPASSING I
171
en bereken in Maple de GGD(y 2x + 1, y 2x2 + 2y x + 2y 2 + y + 1). Onderzoek in Maple het berekenen van som en het product van polynomen uit GF(q)[x], waarbij GF(q) gedefinieerd wordt aan de hand van het primitiefpolynoom m = m(y) en p (priem) de karakteristiek van het polynoom voorstelt.
172
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
173
4.9. TOEPASSING II
4.9
TOEPASSING II Hensel Lifting Lemma
4.9.1
Inleiding
Het factoriseren van polynomen over Q[x] blijft een belangrijk probleem. Gelet op het feit dat we door te vermenigvuldigen met het kleinste gemeen veelvoud van de noemers van de co¨effici¨enten, dit probleem kunnen herleiden tot het factoriseren van polynomen over Z[x], beschouwen we nu verder het probleem van de factorisatie van a(x) ∈ Z[x]. In de vorig sectie hebben we gezien hoe met behulp van het algoritme van Berlekamp de factorisatie van a(x) mod p kan bekomen worden voor p priem. Wanneer nu a(x) irreducibel is over Zp [x], kunnen we besluiten dat a(x) ook irreducibel moet zijn in Z[x]. Stel nu dat a(x) = up (x)vp (x)(modp) dan gaan we nu aantonen hoe we een dergelijke factorisatie kunnen “liften” naar een factorisatie over Z[x]. Het uitgangspunt voor de oplossing van dit probleem is het morfisme Φp : Z[x] 7→ Zp [x] waarbij voor a(x) = an xn + . . . + a0 Φp (a(x)) = Φp (an )xn + . . . + Φp (a0 ) met Φp (ai ) ∈ Zp , en Φp (ai ) = ai mod p. Het is duidelijk dat dit morfisme geen monomorfisme is, zodat er derhalve geen invers-morfisme gedefinieerd is. Nochtans zullen we trachten aan de hand van de ontbinding Φp (a(x)) = Φp (u(x))Φp (v(x)) (modp) de ontbinding a(x) = u(x)v(x) te bepalen. Vooreerst moeten we opmerken dat de voorstelling van Zp hierbij een belangrijke rol speelt.
174
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Om dit te illustreren, beschouwen we Z3 := {0, 1, 2}, en het polynoom a(x) = x2 − 1 ∈ Z[x] Het is duidelijk dat Φ3 (a(x)) = (x + 1)(x + 2)(mod3) Bij het “liften” van (x + 2) is het voor dit voorbeeld duidelijk dat we (x + 2) = Φ3 (x − 1) moeten beschouwen, en dus (x + 2) moeten liften naar (x − 1). Als we Z3 = {−1, 0, 1} hadden genomen, dan hadden we voor het voorgaande voorbeeld Φ3 (a(x)) = (x + 1)(x − 1)(mod3)
geschreven, wat bij het “liften” geen enkel probleem oplevert. De tot nu toe beschouwde voorstelling van Zp = {0, 1, 2, . . . , p − 1} blijkt dus een slechte keuze te zijn.
We zullen derhalve werken met de volgende definitie van de mods functie: mods(a,p) :=if(mod(a, p)
p−1 p−1 , . . . , −1, 0, 1, . . . , } 2 2
Het is duidelijk dat dit enkel zin heeft voor p > 2. De functie Φp : Z 7→ Zp laten we in het vervolg overeenstemmen met de bovenvermelde implementatie van mods(a,p). Merk op dat deze functie mods(a,p) beschikbaar is in Maple.
4.9.2
p−adische voorstelling van gehele getallen
We merken op dat voor een gegeven priemgetal p(> 2), en een gegeven u ∈ Z, er een (n + 1)−tal (u0 , . . . , un ) ∈ Zp n+1 kan gevonden worden, z´o dat u = u 0 + u 1 p + u 2 p2 + . . . + u n pn met pn+1 > 2|u|. Een aantal van die ui kunnen 0 zijn, we zullen aannemen dat un 6= 0. Deze voorstelling wordt de p−adische voorstelling van u genoemd Gelet op de hierboven gemaakte afspraken is duidelijk dat u0 = Φp (u).
(4.45)
175
4.9. TOEPASSING II Beschouwen we
u − u0 = u1 + u2 p + . . . + un pn−1 p
dan volgt daaruit dat u1 = Φp
u − u0 p
!
Op die manier hebben ui = Φp
u − [u0 + u1 p + . . . + ui−1 pi−1 ] , i = 1, . . . , n pi !
(4.46)
Merk op dat in (4.46) alle bewerkingen uitgevoerd worden in Z, en dat pas dan de functie Φp wordt toegepast. De volgende Maple-functies geven een implementatie van deze definitie (comp492.mws): >
restart;
4.9.2 p-adische voorstelling van gehele getallen Voor een gegeven priemgetal p en een gegeven geheel getal u kunnen we een lijst [ u0 , u1 , ... , un ] van n + 1 elementen over Zp vinden zodanig dat u = u0 + u1 p + u2 p2 + ... + un pn met un 6= 0. Het natuurlijke getal n wordt bepaald door de voorwaarde 2 |u| < p(n+1) . In Maple kunnen we de p-adische voorstelling van een geheel getal bepalen door gebruik te maken van de onderstaande procedure p adic : > p_adic := proc(u,p) > # door S.Van Wonterghem (1998) > local a,u0,teller,n,i,v; > teller := 0; n := 1; > while teller=0 do > if p^(n+1)<=2*abs(u) then teller := 0; > else teller := 1; > fi; > n := n+1; > od; > a := vector(n); > a[1] := mods(u,p); > v||1 := u; > for i from 2 to n do > v||i := (v||(i-1)-a[i-1])/p; > a[i] := mods(v||i,p); > od;
176 > >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN evalm(a); end:
Voorbeeld : > p_adic(-272300,97); [−21, 6, −29] Controle : > -21+6*97-29*97^2; −272300
4.9.3
p−adische voorstelling van gehele polynomen
We kunnen nu de voorgaande definitie uitbreiden voor polynomen uit Z[x], en u(x) ∈ Z[x] voorstellen als u(x) = u0 (x) + u1 (x)p + u2 (x)p2 + . . . + un (x)pn
(4.47)
met ui (x) ∈ Zp [x] Op dezelfde manier als hiervoor hebben we u0 (x) = Φp (u(x)) u1(x) = Φp ui (x) = Φp
u(x) − u0 (x) p
!
u(x) − [u0 (x) + u1 (x)p + . . . + ui−1 (x)pi−1 , i = 1, . . . , n pi !
In Maple (comp493.mws): > restart;
4.9.3 p-adische voorstelling van gehele polynomen Voor een gegeven priemgetal p en een gegeven polynoom u(x) uit Z[x] kunnen we een lijst [ u0 (x), u1 (x), ... , un (x)] van n + 1 elementen over Zp [x] vinden zodanig dat u(x) = u0 (x) + u1 (x) p + u2 (x) p2 + ... + un (x) pn . Het natuurlijke getal n P u(x)−(
n−1
u (x) pi )
i i=0 . In Maple kunnen wordt bepaald door de voorwaarde un (x) = pn we de p-adische voorstelling van een polynoom bepalen door gebruik te maken van de onderstaande procedure p adic poly :
177
4.9. TOEPASSING II >
p_adic_poly := proc(u,p)
>
# door S.Van Wonterghem (1998)
>
local v,a,i,b,j;
>
v||1 := u;
>
a||1 := mods(u,p);
>
i := 1;
>
while testeq(v||i,mods(v||i,p))=false do
>
i := i+1;
>
v||i := (v||(i-1)-a||(i-1))/p;
>
a||i := mods(v||i,p);
>
od;
>
b := vector(i);
>
for j from 1 to i do
>
b[j] := a||j;
>
od;
>
evalm(b);
>
end:
Voorbeeld : >
u := 14*x^2-11*x-15; u := 14 x2 − 11 x − 15
>
p_adic_poly(u,5); [−x2 − x, −2 x2 − 2 x + 2, x2 − 1]
Controle : >
(-x^2-x)+(-2*x^2-2*x+2)*5+(x^2-1)*5^2; 14 x2 − 11 x − 15
Uit (4.47) volgt nu u(x) ≡ u0 (x) (modp) en u(x) ≡ [u0 (x) + u1 (x)p + u2 (x)p2 + . . . + uk−1(x)pk−1 ] (modpk )
178
4.9.4
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Definitie
Voor gegeven a(x) ∈ Z[x], als b(x) ∈ Z[x] z´o dat a(x) ≡ b(x) (modpk ) noemen we b(x) de p−adische benadering van a(x) van de k-de orde. a(x) − b(x) ∈ Z[x] noemen we de fout op de benadering van a(x) door b(x).
4.9.5
Hensel Lemma
Voor een gegeven a(x) ∈ Z[x] stellen we dat er factoren u0 (x), w0 (x) ∈ Zp [x] gevonden zijn z´o dat a(x) = u0 (x)w0 (x) (modp) en we wensen deze factoren u0 (x), w0 (x) uit het beelddomein Zp [x] van Φp te liften naar factoren u(x), w(x) ∈ Z[x] z´o dat a(x) = u(x)w(x) Stel dat u(x) = u0 (x) + u1 (x)p + u2 (x)p2 + . . . + un (x)pn w(x) = w0 (x) + w1 (x)p + w2 (x)p2 + . . . + wn (x)pn
(4.48)
waarbij n groot genoeg is, z´o dat 1 n+1 p > ai , uj,k , wj,k 2 d.i. 12 pn+1 is een bovengrens voor al de co¨effici¨enten in de polynomen a(x), uj (x), wj (x). We wensen nu de p−adische co¨effici¨enten ui (x), wi(x) ∈ Zp [x] te bepalen voor i = 1, 2, . . . n. De p−adische benaderingen van de orde k voor u(x) en w(x) zullen we noteren als u(k) en w (k) resp. Dit zijn de eerste k termen uit (4.48). We zoeken nu naar de aanvullende termen uk (x), wk (x) Gelet op de uitdrukkingen (4.48) hebben we a(x) − u(k) w (k) = 0 (modpk )
179
4.9. TOEPASSING II
Derhalve is u(k) w (k) de p-adische benadering voor a(x) van de orde k, en is a(x) − u(k) w (k) deelbaar door pk . (u(k) + uk (x)pk )(w (k) + wk (x)pk ) is de p-adische benadering van a(x) van de orde k + 1. Derhalve hebben we a(x) − (u(k) + uk (x)pk )(w (k) + wk (x)pk ) ≡ 0 (modpk+1) (k) (k) (k) k (k) k a(x) − (u w + uk (x)w p + wk (x)u p ) ≡ 0 (modpk+1) (wk (x)u(k) + uk (x)w (k) )pk ≡ a(x) − u(k) w (k) (modpk+1) Aangezien a(x) − u(k) w (k) deelbaar is door pk , volgt daaruit (wk (x)u(k) + uk (x)w (k) ) ≡
a(x) − u(k) w (k) (modp) pk
Laten we nu Φp inwerken op beide leden, dan krijgen we gelet op Φp (w (k) ) = w0 (x) en Φp (u(k) ) = u0 (x) dat we de volgende diofantische polynoom vergelijking moeten oplossen over Zp [x] wk (x)u0 (x) + uk (x)w0 (x) = Φp
a(x) − u(k) w (k) pk
!
Als p priem is, is Zp [x] een Euclidisch domein, derhalve is ook daarvoor stelling (4.2.4) geldig. Als dan u0 (x), w0 (x) ∈ Zp [x] onderling ondeelbaar zijn, kunnen we unieke polynomen σ(x), τ (x) ∈ Zp [x] vinden, zodanig dat σ(x)u0 (x) + τ (x)w0 (x) = Φp
a(x) − u(k) w (k) pk
!
en deg(σ(x)) < deg(w0 (x)) Stellen we dan u(k+1) = u(k) + τ (x)pk , w (k+1) = w (k) + σ(x)pk dan hebben we daar de p−adische benadering van de orde k + 1 voor u(x) en w(x) respectievelijk. Gelet op het feit dat deg(a(x)) = deg(u0 (x)) + deg(w0 (x)) hebben we deg Φp
a(x) − u(k) w (k) pk
!!
< deg(u0 (x)) + deg(w0 (x))
en dus ook deg(τ (x)) < deg(u0 (x)) qed
180
4.9.6
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Stelling
Zij p een priemgetal in Z, en a(x) ∈ Z[x]. Zijn u(1) (x), w (1) (x) ∈ Zp [x] twee onderling ondeelbare polynomen over het veld Zp z´o dat
a(x) ≡ u(1) (x)w (1) (x) (modp)
Dan bestaan er voor elke k ≥ 1 polynomen u(k) (x), w (k) (x) ∈ Zpk [x] z´o dat
a(x) ≡ u(k) (x)w (k) (x) (modpk )
(4.49)
u(k) (x) ≡ u(1) (x) (modp), w (k) (x) ≡ w (1) (x) (modp)
(4.50)
en
Als a(x) ∈ Z[x] monisch is, en u(1) (x), w (1) (x) ∈ Zp [x] onderling ondeelbaar en monisch, dan kunnen ook de bovenvermelde u(k) (x), w (k) (x) ∈ Zpk [x] monisch gekozen worden en zijn die uniek.
4.9.7
Het Hensel Lifting Algoritme
We behandelen hier enkel het algoritme voor monisch polynomen, en verwijzen voor het algemene algoritme naar [8].
4.9. TOEPASSING II
procedure MonicHensel(a, p, u(1), w(1) , B) # INPUT: # (1) Monisch polynoom a(x) ∈ Z[x]. # (2) Een priemgetal p. # (3) u(1) (x), w(1) (x) ∈ Zp [x] z´o dat # a(x) ≡ u(1) (x)w(1) (x) (modp). # (4) Een positief geheel getal B: bovengrens van de absolute waarden # van de co¨effi¨enten van a(x) # en de mogelijke factoren. # OUTPUT: # (1) Indien ze bestaan, u(x), w(x) ∈ Z[x] z´o dat # a(x) = u(x)w(x) ∈ Z[x] # en # u(x) ≡ u(1) (x) (modp), w(x) ≡ w(1) (x) (modp). # (2) Anders: “Geen factorisatie gevonden!”. # 1. UAE_POLY op u(1) (x), w(1) (x) ∈ Zp [x] . s(x), t(x) ← polynomen in Zp [x] z.d. s(x)u(1) (x) + t(x)w(1) (x) ≡ 1 (modp) # 2. Initialisatie voor de iteratie: u(x) ← u(1) ; w(x) ← w(1) ; e(x) ← a(x) − u(x).w(x); modulus ← p; # 3. Iteratie tot de factorisatie gevonden is, # of de bovengrens voor modulus bereikt is. while e(x) 6= 0 and modulus < 2.B do { # 3.1. Los op over Zp [x] : # σ(x)u(1) + τ (x)w(1) (x) ≡ c(x) (modp) # met c(x) = e(x)/modulus c(x) ← e(x)/modulus; σ(x) ← Φp (s(x).c(x)); τ (x) ← Φp (t(x).c(x)); q(x), r(x) ← oplossingen van: σ(x) = w(1) (x)q(x) + r(x) ∈ Zp [x] σ(x) ← r(x); τ (x) ← Φp (τ (x) + q(x)u(1) (x)); # 3.2. Update de factoren en bereken de fout op de benadering u(x) ← u(x) + τ (x).modulus; w(x) ← w(x) + σ(x).modulus; e(x) ← a(x) − u(x).w(x) modulus ← modulus.p } 4. Test de eindstatus: if e(x) = 0 then { return(u(x), w(x)) else return “Geen factorisatie gevonden! }” end
4.9.8
Voorbeeld
We illustreren dit algoritme aan de hand van het volgende voorbeeld:
181
182
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Stel dat we a(x) = x3 + 10x2 − 432x + 5040 ∈ Z[x]
willen factoriseren over Z[x].
Dan kiezen we een priemgetal p, bijvoorbeeld p = 5. We berekenen het polynoom Φ5 (a(x)) = x3 − 2x ∈ Z5 [x] We bepalen nu twee onderling ondeelbare factoren u(1) (x), w (1) (x) ∈ Zp [x] z´o dat a(x) ≡ u(1) (x)w (1) (x) (modp)
We moeten daarbij onderzoeken of Φp (a(x)) kwadraatvrij is over Zp [x], en dan het Berlekamp algoritme toepassen om de factorisatie te verkrijgen. In het voorbeeld hebben we: Φ5 (a(x)) = x(x2 − 2) ∈ Z5 [x] We stellen dan
u(1) (x) = x, w (1) (x) = x2 − 2
Aangezien u(1) (x) en w (1) (x) onderling ondeelbaar zijn en monisch, kunnen we het Hensel-algoritme toepassen. Met behulp van Maple bepalen we in de eerste plaats de polynomen s(x) en t(x) z´o dat s(x)u(1) (x) + t(x)w (1) (x) ≡ 1 (modp). We gebruiken daartoe mods(Gcdex(u1(x),w1(x),x,’s1’,’t1’),p); We vinden (comp498A.mws) > mods(Gcdex(u1(x),w1(x),x,’s1’,’t1’),p); > s(x):= s1; > t(x):=t1; 1
s(x) := −2 x t(x) := 2
We stellen nu:
183
4.9. TOEPASSING II > > >
u(x):=u1(x); w(x):=w1(x); e(x):=collect(a(x)-u(x)*w(x),x); u(x) := x
w(x) := x2 − 2 e(x) := 10 x2 − 430 x + 5040 We starten nu de iteratie-lus uit het algoritme, die in de Maple-sessie overeenstemt met de “executie-groep” 1-3. We vatten de resultaten samen in de volgende tabel: stap referentie modulus 0 1 2 3
− 5 25 125
stap1 stap2 stap3
σ(x) − x−1 −x + 2 1
τ (x) − 1 1 0
u(x)
w(x)
e(x)
x x+5 x + 30 x + 30
x2 − 2 x2 + 5x − 7 x2 − 20x + 43 x2 − 20x + 168
10x2 − 430x + 5040 −450x + 5075 125x + 3750 0
Merk op dat aan het einde van iedere stap k e(x) deelbaar is door de modulus = 5k+1, zoals vereist wordt bij het begin van de volgende iteratiestap. De bovenstaande iteratie stopt met u(x) = x + 30 en w(x) = x2 − 20x + 168. Derhalve hebben we de factorisatie: x3 + 10x2 − 432x + 5040 = (x + 30)(x2 − 20x + 168) Maple-sessie comp498.mws:
Hensel Lifting Lemma
Voorbeeld 4.9.8
>
restart;
184
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
1. manueel uitvoeren van het Hensel Lifting Algoritme Merk op dat we hierna mods zullen gebruiken i.p.v. modp! > modp(11, 7); 4 > mods(11,7); −3 > a(x):=x^3+10*x^2-432*x+5040; p:=5;
>
>
a(x) := x3 + 10 x2 − 432 x + 5040 p := 5 mods(Berlekamp(mods(a(x),p),x),p); u1(x):=x; w1(x):=x^2-2;
{x, x2 − 2} u1(x) := x
w1(x) := x2 − 2 OPGELET! u1(x) staat hier voor u(1)(x) en dus voor u 0(x) analoog staat w1(x) voor w(1)(x) en dus voor w 0(x)
> > >
mods(Gcdex(u1(x),w1(x),x,’s1’,’t1’),p); s(x):= s1; t(x):=t1; 1 s(x) := −2 x t(x) := 2
> > >
u(x):=u1(x); w(x):=w1(x); e(x):=collect(a(x)-u(x)*w(x),x); u(x) := x w(x) := x2 − 2
>
modulus:=p;
e(x) := 5040 + 10 x2 − 430 x modulus := 5
185
4.9. TOEPASSING II We voeren nu de volgende ¨executiegroep¨ uit tot e(x)=0 wordt. Stap 1 > c(x):=e(x)/modulus: > sigma(x):=mods(collect(s(x)*c(x),x),p): > tau(x):=mods(collect(t(x)*c(x),x),p): > q(x):=mods(quo(sigma(x),w1(x),x),p): > r(x):=mods(rem(sigma(x),w1(x),x),p): > sigma(x):=r(x); > tau(x):=mods(collect(tau(x)+q(x)*u1(x),x),p); > u(x):=collect(u(x)+tau(x)*modulus,x); > w(x):=collect(w(x)+sigma(x)*modulus,x); > e(x):=collect(a(x)-u(x)*w(x),x); > modulus:=modulus*p; σ(x) := x − 1 τ (x) := 1
u(x) := x + 5 w(x) := x2 − 7 + 5 x
e(x) := 5075 − 450 x modulus := 25
Merk op dat het volstaat om in een Maple sessie terug te keren naar bovenstaande
executiegroep en deze terug uit te voeren.
We hebben deze executiegroep hieronder gecopieerd voor de duidelijkheid, omdat anders de output overschreven wordt met de nieuwe output.
Stap 2 > c(x):=e(x)/modulus: > sigma(x):=mods(collect(s(x)*c(x),x),p): > tau(x):=mods(collect(t(x)*c(x),x),p): > q(x):=mods(quo(sigma(x),w1(x),x),p): > r(x):=mods(rem(sigma(x),w1(x),x),p): > sigma(x):=r(x); > tau(x):=mods(collect(tau(x)+q(x)*u1(x),x),p);
186 > > > >
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN u(x):=collect(u(x)+tau(x)*modulus,x); w(x):=collect(w(x)+sigma(x)*modulus,x); e(x):=collect(a(x)-u(x)*w(x),x); modulus:=modulus*p; σ(x) := −x + 2 τ (x) := 1
u(x) := x + 30 w(x) := x2 + 43 − 20 x e(x) := 3750 + 125 x modulus := 125
Stap 3 > c(x):=e(x)/modulus: > sigma(x):=mods(collect(s(x)*c(x),x),p): > tau(x):=mods(collect(t(x)*c(x),x),p): > q(x):=mods(quo(sigma(x),w1(x),x),p): > r(x):=mods(rem(sigma(x),w1(x),x),p): > sigma(x):=r(x); > tau(x):=mods(collect(tau(x)+q(x)*u1(x),x),p); > u(x):=collect(u(x)+tau(x)*modulus,x); > w(x):=collect(w(x)+sigma(x)*modulus,x); > e(x):=collect(a(x)-u(x)*w(x),x); > modulus:=modulus*p; σ(x) := 1 τ (x) := 0 u(x) := x + 30 w(x) := x2 + 168 − 20 x e(x) := 0 modulus := 625
We vinden e(x)=0, waaruit we mogen besluiten dat de ontbinding van a(x) gevonden is. We kunnen dit testen: > testeq(a(x),collect(u(x)*w(x),x)); true
4.9. TOEPASSING II
187
2. Het Hensel Lifting Algoritme aan de hand van de procedure MonicHensel > MonicHensel := proc(a,p,x,u1,w1,B) > # door S.Van Wonterghem (1998) > local >
s,t,S,T,u,w,e,modulus,c,sigma_,tau_,q,Q,r,R,sigma,tau,i,j,k,H,Hmod,Hta
>
u,Hsigma,Hu,Hw,He; Gcdex(u1,w1,x,’s’,’t’) mod p; S := mods(s,p); T := mods(t,p); i := 1; u := u1; Hu||i := u; w := w1; Hw||i := w; e := sort(expand(a-u*w),x); He||i := e; modulus := p; while (e<>0) and (modulus<2*B) do i := i+1; c := e/modulus; sigma_ := mods(expand(S*c),p); tau_ := mods(expand(T*c),p); q := Quo(sigma_,w1,x) mod p; Q := mods(q,p); r := Rem(sigma_,w1,x) mod p; R := mods(r,p); sigma := R; Hsigma||i := sigma; tau := mods(expand(tau_+Q*u1),p); Htau||i := tau; u := sort(expand(u+tau*modulus),x); Hu||i := u; w := sort(expand(w+sigma*modulus),x); Hw||i := w; e := sort(expand(a-u*w),x); He||i := e; modulus := modulus*p; Hmod||i := modulus/p; od; if testeq(e,0) then H := array(1..i+1,1..6); for j from 1 to i+1 do for k from 1 to 6 do H[j,k] := ‘_‘; od; od; for j from 1 to i do if j<>1 then
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
188
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN H[j+1,1] := Hmod||j; H[j+1,2] := Htau||j; H[j+1,3] := Hsigma||j; fi; H[j+1,4] := Hu||j; H[j+1,5] := Hw||j; H[j+1,6] := He||j; od; H[1,1] := ’modulus’; H[1,2] := ’tau’; H[1,3] :=’sigma’; H[1,4] := ’u’; H[1,5] := ’w’; H[1,6] := ’e’; evalm(H); else RETURN(‘Geen factorisatie mogelijk ¡); fi; end:
> > > > > > > > > > > > > >
Voorbeeld : Factoriseer het polynoom a(x) = x3 + 10 x2 − 432 x + 5040 over Z[x] en kies als priemgetal p = 5. > a := x^3+10*x^2-432*x+5040; a := x3 + 10 x2 − 432 x + 5040 > mods(a,5); x3 − 2 x > factor(%);
x (x2 − 2)
>
p:=5;
>
p := 5 mods(Berlekamp(mods(a,p),x),p); {x, x2 − 2}
>
u1 := x; w1 := x^2-2;
>
u1 := x w1 := x2 − 2 MonicHensel(a,5,x,u1,w1,5^100);
modulus τ 5 25 125
σ
u w e x x2 − 2 10 x2 − 430 x + 5040 1 x−1 x+5 x2 + 5 x − 7 −450 x + 5075 2 1 −x + 2 x + 30 x − 20 x + 43 125 x + 3750 0 1 x + 30 x2 − 20 x + 168 0
189
4.9. TOEPASSING II Controle : > expand((x+30)*(x^2-20*x+168)); x3 + 10 x2 − 432 x + 5040
Extra Voorbeeld : Factoriseer de veelterm b(x) = x3 + 1190 x2 − 30508 x + 3325 over Z[x] en ga zelf op zoek naar een geschikt priemgetal p. > b := x^3+1190*x^2-30508*x+3325; b := x3 + 1190 x2 − 30508 x + 3325 Veronderstel p = 2 : > mods(b,2); x3 + 1 >
factor(%); (x + 1) (x2 − x + 1)
>
p:=2;
>
p := 2 mods(Berlekamp(mods(b,p),x),p);
>
>
{x + 1, x2 + x + 1} u1 := x+1; w1 := x^2+x+1; u1 := x + 1 w1 := x2 + x + 1 MonicHensel(b,2,x,u1,w1,2^50); Geen factorisatie mogelijk !
Veronderstel p = 3 : > mods(b,3); >
> >
factor(%);
x3 − x2 − x + 1 (x + 1) (x − 1)2
p:=3; mods(Berlekamp(mods(b,p),x),p); p := 3
Error, (in mod/Berlekamp) input must be square free
190
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
>
>
u1 := (x+1); w1 := (x-1)^2; u1 := x + 1 w1 := (x − 1)2 MonicHensel(b,3,x,u1,w1,3^50); Geen factorisatie mogelijk !
Veronderstel p = 5 : > mods(b,5); x3 + 2 x >
factor(%); x (x2 + 2)
>
u1 := x; w1 := x^2+2;
>
u1 := x w1 := x2 + 2 MonicHensel(b,5,x,u1,w1,5^20);
modulus 5 25 125 625
τ
σ
u w e x x2 + 2 1190 x2 − 30510 x + 3325 0 −2 x − 2 x x2 − 10 x − 8 1200 x2 − 30500 x + 3325 2 −1 −x x − 25 x − 35 x − 8 1250 x2 − 31375 x + 3125 0 −1 x − 25 x2 − 35 x − 133 1250 x2 − 31250 x 2 0 2x x − 25 x + 1215 x − 133 0
Controle : > expand((x-25)*(x^2+1215*x-133)); x3 + 1190 x2 − 30508 x + 3325 Opmerking :
De mogelijkheden voor p zijn niet talrijk. Behalve p = 5 is voor p < 100 enkel p = 19 mogelijk ! Bovendien kan men in dit geval de veelterm b(x) schrijven als een product van drie factoren en enkel de eerste combinatie levert een factorisatie op !
Veronderstel p = 19 : > mods(b,19); >
factor(%);
x3 − 7 x2 + 6 x
x (x − 1) (x − 6)
4.9. TOEPASSING II >
>
191
u1 := x*(x-1); w1 := (x-6); u1 := x (x − 1) w1 := x − 6 MonicHensel(b,19,x,u1,w1,19^50);
modulus
τ
σ
u w e x (x − 1) x − 6 1197 x2 − 30514 x + 3325 19 7 x − 7 −1 x2 + 132 x − 133 x − 25 1083 x2 − 27075 x 2 361 3x 0 x + 1215 x − 133 x − 25 0 > u1 := x-1; w1 := x*(x-6); u1 := x − 1 w1 := x (x − 6) > MonicHensel(b,19,x,u1,w1,19^50); Geen factorisatie mogelijk ! > u1 := (x-1)*(x-6); w1 := x; u1 := (x − 1) (x − 6) w1 := x > MonicHensel(b,19,x,u1,w1,19^50); Geen factorisatie mogelijk !
192
HOOFDSTUK 4. ALGEBRA VAN POLYNOMEN
Hoofdstuk 5 Gr¨ obnerbasis voor polynoom-idealen 5.1
Inleiding
Zij R een ring met eenheidselement, dan wordt een niet-ledige deelverzameling I ⊆ R een ideaal van R genoemd als (i) p, q ∈ I =⇒ p − q ∈ I (ii) p ∈ I, r ∈ R =⇒ rp ∈ I Een eindige verzameling van polynomen over een veld F P = {p1 , . . . , pk } ⊂ F[x1 , . . . , xn ] brengt altijd een ideaal voort: hP i = hp1 , . . . , pk i = {
k X i=1
ai pi : ai ∈ F[x1 , . . . , xn ]}
(Bewijs als oefening) P wordt ook nog een basis voor het ideaal genoemd. Jammer genoeg, geeft dit begrip basis niet veel inzicht in de structuur van het ideaal, in tegenstelling tot het begrip basis uit de theorie van de vectorruimten. Als voorbeeld beschouwen we het volgende probleem. Stel P = {p1 = x3 yz − xz 2 , p2 = xy 2 z − xyz, p3 = x2 y 2 − z 2 } een verzameling van polynomen uit Q[x, y, z]. Dan is hP i = hp1 , p2 , p3 i = {a1 p1 + a2 p2 + a3 p3 : ai ∈ Q[x, y, z]} 193
194
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
We vragen ons nu af of een gegeven q = x2 yz − z 3 een element is van dit ideaal. M.a.w. zoeken we a, b, c ∈ Q[x, y, z] z´o dat q = ap1 + bp2 + cp3 Wanneer we dit proberen op te lossen met de “probeer-en-verwerp” methode zien we dat (−x)p2 = −x2 y 2z + x2 yz zp3 = x2 y 2 z − z 3 zodat
q = (−x)p2 + zp3 In het algemeen is het evenwel een moeilijk probleem om te beslissen of voor een gegeven q en een verzameling van polynomen hpi : i = 1, . . . , ki q ∈ hp1 , . . . , pk i
(5.1)
We merken op dat dit probleem correspondeert met het zero-normaal probleem. D.w.z. dat de vraag uit (5.1) beantwoorden equivalent is met het beslissen of q naar nul kan gereduceerd worden als x3 yz − xz 2 = 0 xy 2 z − xyz = 0 x2 y 2 − z 2 = 0 Deze reductie steunt op een formeel afleidingssyteem waarvan we de basisregels als volgt kunnen neerschrijven.
f =g f = g, g = h f =g f =g 0 f = f , g = g0 f = f 0, g = g0
` ` ` ` ` ` ` `
f =g (f = g axioma’s) f =f g=f f =h f h = gh f +h=g+h f + g = f 0 + g0 f g = f 0g0
Het is gemakkelijk om aan te tonen dat voor een vaste verzameling van polynomen P, ` q1 = q2 ⇐⇒ q1 − q2 ∈ hP i. Het probleem (5.1) is derhalve opgelost als we een zero-normalisatie over F[x1 , . . . , xn ] kunnen uitwerken.
195
5.2. TERM-ORDENING
Het was Buchberger die in 1965 in zijn doctoraatsthesis [2] voor het eerst een algoritme voorstelde om de gevraagde transformatie te realiseren. Daartoe was het nodig om een speciale basis voor het ideaal hP i te construeren, een basis die Gr¨obnerbasis genoemd werd naar de promotor van de thesis. Vandaag vinden we de implementatie van het Buchberger algoritme terug in de meeste computeralgebra systemen. Voor onze voorbeelden zullen we gebruik maken van Maple. Voor meer gespecialiseerde toepassingen verwijzen we naar CoCoA, een ”SpecialPurpose”systeem voor berekeningen in Commutatieve Algebra, dat ontwikkeld is aan de Universiteit van Genua (Itali¨e) en vrij te verkrijgen is via anonymous ftp op de machine lancelot.dima.unige.it onder de directory cocoa.
5.2 5.2.1
Term-ordening Zero-reductie probleem
Voor polynomen in ´e´en variabele, is de zero-reductie eenvoudig op te lossen, gelet op het feit dat F[x] een Euclidisch domein is (voor twee polynomen f, g ∈ F[x]∃q, r ∈ F[x]|f = gq + r) . Stel P = {p1 (x), p2 (x), . . . , pk (x)} en stel dat we voor een gegeven q ∈ F[x] ai (x) ∈ F[x] zoeken z´o dat q(x) := a1 (x)p1 (x) + . . . ak (x)pk (x) dan geeft de Euclidische deling q(x) = a1 (x)p1 (x) + r1 (x) r1 (x) = a2 (x)p2 (x) + r2 (x) ... ... rk−1 (x) = ak (x)pk (x) + rk (x) Dan hebben we q(x) ∈ hP i als rk (x) = 0 Nu is F[x1 , . . . , xn ] echter geen Euclidisch domein, gelukkig is het wel een Noethersideaal-domein, d.w.z.: elk ideaal heeft een eindige basis We zullen nu verder gebruik maken van de notatie F[x]
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
196
waarbij x het geordend n−tal (x1 , x2 , . . . , xn ) voorstelt. We noteren de verzameling van termen over x als Tx = {xi11 . . . xinn : i1 , . . . , in ∈ N}
Merk op dat in deze notatie
x0i = 1 en dat 1 = x01 . . . x0n ∈ Tx
Tx kan opgevat worden als een basis voor F[x], maar dan wel beschouwd als vectorruimte over F. Het is duidelijk dat in het geval van polynomen in meerdere variabelen we een duidelijke afspraak moeten maken inzake de ordeningen van de termen van het polynoom
5.2.2
Definitie: Toelaatbare ordening
Een toelaatbare ordening >T op Tx is een orderelatie op Tx z´o dat
voor alle s, t, u ∈ Tx
(i) ` t ≥T 1; (ii) s >T t ` s u >T t u
Een eenvoudige manier om een dergelijke ordening te realiseren, is het gebruik van een n × n matrix, als n het aantal variabelen is. Stel
u1 u2 .. .
un een matrix van n rijen ui ∈ R , dan wordt de rangschikking van twee termen n
als volgt bepaald:
t1 ≡ xα1 1 . . . xαnn en t2 ≡ xβ1 1 . . . xβnn
Stel α ≡ (α1 , . . . , αn ) en β ≡ (β1 , . . . , βn ), dan is
t1 > t2 ⇐⇒ (α.u1 , . . . , α.un ) >t (β.u1, . . . , β.un )
Waarbij >t de ordening op Rn gegeven wordt door
(a1 , . . . , an ) >t (b1 , . . . , bn ) ⇐⇒ de meest linkse niet-nul component van (a1 − b1 , . . . , an − bn ) is positief Merk op dat >t een termordening zal definieren a.s.a. de eerste van nul verschillende elementen uit de kolommen van de defini¨erende matrix positief zijn.
197
5.2. TERM-ORDENING
5.2.3
Definitie: Lexicografische ordening : >L (plex).
Dit is de klassieke ordening waarop het rangschikken van woorden in een woordenboek gebaseerd is. Met de voorgaande definitie en de variabelen x, y, z, gebruiken we daarbij de volgende matrix
1 0 0 0 1 0 0 0 1 Daarbij gaan we uit van basisordening x>y>z Merk op dat volgens deze definitie het polynoom (x + y)2 + x + y + 1 als volgt zal voorgesteld worden: x2 + 2xy + x + y 2 + y + 1 waarbij de termen gerangschikt zijn in dalende volgorde. In Maple hebben we het volgende (comp523.mws): > restart; Merk op dat het Groebner-pakket niet tot de kern van Maple behoort, en derhalve moet opgeladen worden. Merk ook op dat in een oude versie van Maple, dit pakket werd opgeroepen met with(grobner). Dit wordt nog steeds ondersteund, maar geeft niet altijd de gewenste resultaten! > with(Groebner); [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > >
var:=[x,y,z]; ord:=’plex’; var := [x, y, z] ord := plex
198 > >
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN p1:=(x+y)^2+x+y+1; p2:=x^3+3*x^2*y+x*y*z+x*y+3*x*z^2+x+2*y^2*z; p1 := (x + y)2 + x + y + 1
> >
p2 := x3 + 3 x2 y + x y z + x y + 3 x z 2 + x + 2 y 2 z sort(expand(p1),var,ord); sort(expand(p2),var,ord); x2 + 2 x y + x + y 2 + y + 1 x3 + 3 x2 y + x y z + x y + 3 x z 2 + x + 2 y 2 z
Merk op dat we de initiele volgorde van de variabelen kunnen vastleggen: > var:=[z,y,x]; var := [z, y, x] > sort(expand(p1),var,ord); > sort(expand(p2),var,ord); y 2 + 2 y x + y + x2 + x + 1 3 z 2 x + 2 z y 2 + z y x + 3 y x2 + y x + x3 + x
Het is duidelijk dat de bovenstaande voorstelling niet de gebruikelijke voorstelling is. Om die te bekomen beschouwen we de
5.2.4
Definitie: Totale-graad ordening >D (tdeg)
Bij deze ordening laten we de graad van de term primeren boven de lexicografische ordening. Zie voorbeelden in 5.2.7 Beschouw de term t ≡ xα1 1 . . . xαnn , dan defini¨eren we de graad van t als |t| = Σi=1n αi en defini¨eren we
|s| >D |t| s >D t a.s.a of |s| = |t| en s >L t
Voor drie variabelen x, y, z wordt deze ordening gedefinieerd door de volgende matrix:
1 1 1 1 0 0 0 1 0
199
5.2. TERM-ORDENING In Maple krijgen we (comp524.mws): > restart; Merk op dat het grobner-pakket niet tot de kern van Maple behoort, en derhalve moet opgeladen worden. > with(Groebner);
[fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > >
var:=[x,y,z]; ord:=’tdeg’; var := [x, y, z] ord := tdeg
> >
p1:=(x+y)^2+x+y+1; p2:=x^3+3*x^2*y+x*y*z+x*y+3*x*z^2+x+2*y^2*z; p1 := (x + y)2 + x + y + 1
> >
p2 := x3 + 3 x2 y + x y z + x y + 3 x z 2 + x + 2 y 2 z sort(expand(p1),var,ord); sort(expand(p2),var,ord); x2 + 2 x y + y 2 + x + y + 1 x3 + 3 x2 y + x y z + 3 x z 2 + 2 y 2 z + x y + x
Als we de initiele volgorde van de variabelen omdraaien krijgen we: > var:=[z,y,x]; var := [z, y, x] > sort(expand(p1),var,ord); > sort(expand(p2),var,ord); y 2 + 2 y x + x2 + y + x + 1 3 z 2 x + 2 z y 2 + z y x + 3 y x2 + x3 + y x + x
We merken op dat in Maple 6 nog andere ordeningen (wdeg([w1 , ..., wp ], [v1 , ..., vp ]), lexdeg([v1 , ..., vp ], [w1 , ..., wq ])) beschikbaar zijn, en dat de gebruiker aan de hand van een matrix, willekeurige ordeningen kan invoeren.
5.2.5
Definitie: monoom
Voor het vervolg noemen we een polynoom met slechts ´e´en term een monoom
200
5.2.6
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
Definitie: hoofdmonoom
Het hoofdmonoom van een polynoom p ∈ F[x] is het monoom waarvan de term maximaal is onder de termen van p, voor de beschouwde term-ordening >T . We noteren dit monoom als MT (p), of kortweg M(p) als de term-ordening >T duidelijk is. De corresponderende term noemen we de hoofdterm, en noteren we als hterm(p), de corresponderende co¨effici¨ent noteren we als hcoeff(p). M(p) = hcoeff(p) hterm(p) We nemen aan dat M(0) = 0 1, en dus hcoeff(0) = 0 en hterm(0) = 1. In Maple (comp526): > restart; > with(Groebner); [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] >
var:=[x,y,z];ord:=’plex’; var := [x, y, z] ord := plex
>
tord:=’plex(x,y,z)’; tord := plex(x, y, z) p1:=(x+y)^2+x+y+1;
>
p1 := (x + y)2 + x + y + 1 sort(expand(p1),var,ord);
>
x2 + 2 x y + x + y 2 + y + 1 >
leadmon(p1,tord); 1, x2
> > > > > > >
M:=proc(r) local lmr; lmr := leadmon(r,tord); lmr[1]*lmr[2]; end: p1:=(x+y)^2+x+y+1; p2:=x^3+3*x^2*y+x*y*z+x*y+3*x*z^2+x+2*y^2*z; p1 := (x + y)2 + x + y + 1 p2 := x3 + 3 x2 y + x y z + x y + 3 x z 2 + x + 2 y 2 z
201
5.2. TERM-ORDENING >
M(p1); x2
>
M(p2); x3
>
>
var:=[z,y,x];ord:=’plex’; var := [z, y, x] ord := plex tord:=’plex(z,y,x)’; tord := plex(z, y, x)
>
M(p1); y2
>
M(p2); 3 x z2
>
sort(expand(p1),var,ord);
>
y 2 + 2 y x + y + x2 + x + 1 sort(expand(p2),var,ord);
>
>
>
3 z 2 x + 2 z y 2 + z y x + 3 y x2 + y x + x3 + x var:=[x,y,z];ord:=’tdeg’; var := [x, y, z] ord := tdeg tord:=’tdeg(x,y,z)’; tord := tdeg(x, y, z) M(p1); x2
>
M(p2); x3
>
sort(expand(p1),var,ord);
>
x2 + 2 x y + y 2 + x + y + 1 sort(expand(p2),var,ord); x3 + 3 x2 y + x y z + 3 x z 2 + 2 y 2 z + x y + x
5.2.7
Voorbeelden van ordeningen in Maple
comp527.mws 5.2.7 Voorbeelden van ordeningen van termen in Maple
202
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
We genereren de lijst van alle termen in x,y,z van de graad kleiner of gelijk aan 3.
>
L:=[op(subs(u=1,convert(map(expand,series(1/((1-x*u)*(1-y*u)*(1-z*u))
>
,u,4)),polynom)))];
L := [1, x, y, z, x2 , y x, y 2 , z x, z y, z 2 , x3 , y x2 , y 2 x, y 3 , z x2 , z y x, z y 2, z 2 x, z 2 y, z 3 ] > with(Groebner):
We sorteren nu de lijst volgens verschillende ordeningen in Maple > T:=’plex(x,y,z)’: sort(L,(t1,t2)->testorder(t1,t2,T)); [1, z, z 2 , z 3 , y, z y, z 2 y, y 2 , z y 2 , y 3 , x, z x, z 2 x, y x, z y x, y 2 x, x2 , z x2 , y x2 , x3 ] > T:=’plex(z,y,x)’: >
sort(L,(t1,t2)->testorder(t1,t2,T)); [1, x, x2 , x3 , y, y x, y x2 , y 2, y 2 x, y 3 , z, z x, z x2 , z y, z y x, z y 2 , z 2 , z 2 x, z 2 y, z 3 ] > T:=’tdeg(x,y,z)’: >
sort(L,(t1,t2)->testorder(t1,t2,T)); [1, z, y, x, z 2 , z y, z x, y 2 , y x, x2 , z 3 , z 2 y, z 2 x, z y 2, z y x, z x2 , y 3, y 2 x, y x2 , x3 ] > T:=’tdeg(z,y,x)’: >
sort(L,(t1,t2)->testorder(t1,t2,T)); [1, x, y, z, x2 , y x, z x, y 2, z y, z 2 , x3 , y x2 , z x2 , y 2 x, z y x, z 2 x, y 3, z y 2 , z 2 y, z 3 ] >
We controleren nu de sortering van de termen in de polynomen:
> > > >
var:=[z,y,x]:ord:=’tdeg’: 1 + x + y + z + x^2 + y*x + z*x + y^2 + z*y + z^2 + x^3 + y*x^2 + z*x^2 + y^2*x + z*y*x + z^2*x + y^3 + z*y^2 + z^2*y + z^3: sort(%,var,ord);
z 3 + z 2 y + z 2 x + z y 2 + z y x + z x2 + y 3 + y 2 x + y x2 + x3 + z 2 + z y + z x + y 2 + y x + x2 + z + y + x + 1 > var:=[x,y,z]:ord:=’tdeg’: > sort(%%%,var,ord); x3 + x2 y + x2 z + x y 2 + x y z + x z 2 + y 3 + y 2 z + y z 2 + z 3 + x2 + x y + x z + y 2 + y z + z2 + x + y + z + 1 > var:=[x,y,z]:ord:=’plex’:
203
5.3. REDUCTIE >
sort(%%%,var,ord);
x3 + x2 y + x2 z + x2 + x y 2 + x y z + x y + x z 2 + x z + x + y 3 + y 2 z + y 2 + y z 2 + y z + y + z3 + z2 + z + 1 > var:=[z,y,x]:ord:=’plex’: > sort(%%%,var,ord); z 3 + z 2 y + z 2 x + z 2 + z y 2 + z y x + z y + z x2 + z x + z + y 3 + y 2 x + y 2 + y x2 + y x + y + x3 + x2 + x + 1
5.3
Reductie
Voor p, q ∈ F[x] − {0} zeggen we dat p reduceert modulo q, (met betrekking tot een gekozen term-ordening), als er een monoom in p bestaat dat deelbaar is door hterm(q) Als p = αt + r met α ∈ F − {0}, t ∈ Tx , r ∈ F[x] en t = u ∈ Tx , hterm(q)
dan noteren we p →q p −
α αt q =p− uq = p0 M(q) hcoeff(q)
om aan te geven dat p naar p0 reduceert (modulo q). Als p naar p0 reduceert modulo een q ∈ Q = {q1 , . . . , qm }, zeggen we dat p naar p0 reduceert modulo Q, en we noteren p → Q p0 , anders zeggen we dat p niet reduceerbaar is modulo Q, of dat p irreductibel is modulo Q. We nemen aan dat 0 altijd irreductibel is. Klaarblijkelijk beschrijft deze reductie het aftrekken van een “gepast” veelvoud van een polynoom van een ander, om een “kleiner” polynoom te bekomen. We krijgen hier een soort veralgemeende deling. Om dit te illustreren beschouwen we een voorbeeld van polynomen over Q[x]. Voorbeeld p = 6x4 + 13x3 − 6x + 1, q = 3x2 + 5x − 1 We hebben p →q p − 2x2 q = 3x3 + 2x2 − 6x + 1
204
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
maar we krijgen ook p →q p −
65 5 13 xq = 6x4 − x2 − x + 1 3 3 3
Wanneer we de eerste reductie verder zetten, krijgen we p →q 3x3 + 2x2 − 6x + 1 →q −3x2 − 5x + 1 →q 0 wat tot het besluit leidt dat q|p. Wanneer we de tweede reductie verder zetten, krijgen we 65 2 5 x − x+1 3 3 59 2 5 3 −10x − x − x + 1 3 3 −3x2 − 5x + 1 0
p →q 6x4 − →q
→q →q Voorbeeld Stel
p = 2y 2z − xz 2 , q = 7y 2 + yz − 4, r = 2yz − 3x + 1 en beschouw de ordening >D op T(x,y,z), dan staan de termen daar in afdalende orde. Stel Q = {q, r} We hebben dan 2 2 8 p →q p − zq = −xz 2 − yz 2 + z = p1 7 7 7 3 9 1 2 →r p1 + zr = −xz − xz + z = p2 7 7 7 met p2 niet reduceerbaar moduloQ. p →r p − yr = −xz 2 + 3xy − y = p3 met p3 niet reduceerbaar modulo Q. We hebben dus p →Q p2 en p →Q p3 , maar het resultaat is niet op unieke manier bepaald. We hebben nu de volgende fundamentele eigenschap
205
5.4. STELLING
5.4
Stelling
Voor een gegeven verzameling Q en een ordening >T , bestaat er geen oneindige rij van reducties p0 → Q p1 → Q p2 → Q . . . Bewijs:
We bewijzen dit door inductie op i, het aantal variabelen in p0 . i=0 Als Q een element bevat met hoofdterm 1, hebben we p0 →Q 0, in het ander geval is p0 niet reduceerbaar modulo Q. (Voor het vervolg mogen we aannemen dat hQi = 6 h1i. i=1 Bewijs door inductie op de graad van p0 . graad(p0 ) = 0 (zie hiervoor). Stel dat er geen oneindige rij van reducties bestaat voor een polynoom in F[x1 ] van de graad k − 1 en stel dat p0 ∈ F[x1 ] en deg(p0 ) = k. Bij inductie is er geen oneindige rij van afleidingen op de termen van lagere graad in p0 . Derhalve zou een oneindige rij van reducties op p0 moeten ontstaan uit de term van de graad k, maar een dergelijke reductie verlaagt de graad van de term, zodat ook deze reducties zullen eindigen na een eindig aantal stappen. i=2 Analoog nemen we nu aan dat er geen oneindige reductierijen bestaan voor polynomen uit F[x1 , x2 ] van de graad l − 1 in x2 en beschouwen dan p0 ∈ F[x1 , x2 ] met deg2 (p0 ) = l als element van F[x1 ][x2 ]. (Hiervoor hebben we het geval behandeld waarbij l = 0 was.) De termen in p0 van de graad l in x2 vormen een polynoom van een zekere graad m in x1 , maal xl2 . Als er een oneindige reductierij bestaat, is het een reductie betreffende deze term, aangezien er geen oneindige reductierijen bestaan voor termen met een graad in x2 die kleiner is dan l. Om dezelfde redenen als hiervoor (verlaging van de graad bij reductie), kunnen ook hieruit geen oneindige reductierijen ontstaan. We kunnen dit zo verder uitbreiden voor i = 3, 4, . . .. Merk op dat het bewijs niet afhangt van de term-ordening >T .
qed
Gevolg Gelet op stelling (5.4) kunnen we nu een reductie-algoritme vinden om p →∗Q q te construeren. Om de effici¨entie te verhogen, is het zinvol om de grootste monomen het eerst
206
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
te reduceren, aangezien deze ook de lagere monomen be¨ınvloeden (zie voorgaande voorbeelden). We reduceren derhalve eerst M(p). We voeren de volgende notatie in: Gelet op 0 irreductibel , stellen we R0,Q = { } Voor p 6= 0 stellen we Rp,Q = {q ∈ Q − {0} : hterm(q)|hterm(p)} dit is de verzameling van reducers voor p Daarbij merken we op dat als |Rp,Q | > 1, elke reducer kan gekozen worden. De keuze kan de effici¨entie van het algoritme be¨ınvloeden. De optimale selectie zal ook afhangen van de term-ordening. We noteren een zekere keuze voor de reducer als selectpoly(Rp,Q ) . We kunnen dan het algoritme als volgt beschrijven:
procedure normalf(p, Q) r ← p; q ← 0; while r 6= 0 do { while Rr,Q 6= { } do { f ← selectpoly(Rr,Q ); M(r)f r←r− } M(f ) q ← q + M(r); r ← r − M(r) } return(q) end
5.5
Voorbeeld
Beschouw Q = {p1 , p2 } ⊂ Q[x, y] met p1 = x2 y + 5x2 + y 2, p2 = 7xy 2 − 2y 3 + 1; voor de lexicografische term-ordening (x >L y). q = 3x3 y + 2x2 y 2 − 3xy + 5x,
207
5.5. VOORBEELD Dan hebben we: normalf(q, Q) = q 0 ⇐⇒ q →∗Q q 0 init while1 Rr,Q = {p1 } while2 Rr,Q = { } r 6= 0
r 6= 0
r 6= 0
r ← 3x3 y + 2x2 y 2 − 3xy + 5x q←0 f ← x2 y + 5x2 + y 2 r ← r − 3xf = −15x3 + 2x2 y 2 − 3xy 2 − 3xy + 5x q ← −15x3 r ← 2x2 y 2 − 3xy 2 − 3xy + 5x
Rr,Q = {p1 , p2 } while2 f ← x2 y + 5x2 + y 2 r ← r − 2yf = −10x2 y − 3xy 2 − 3xy + 5x − 2y 3 Rr,Q = {p1 } f ← x2 y + 5x2 + y 2 r ← r + 10f = 50x2 − 3xy 2 − 3xy + 5x − 2y 3 + 10y 2 Rr,Q = { } q ← −15x3 + 50x2 r ← −3xy 2 − 3xy + 5x − 2y 3 + 10y 2 Rr,Q = {p2 } while2 f ← 7xy 2 − 2y 3 + 1 3 20 3 r ← r + f = −3xy + 5x − y 3 + 10y 2 + 7 7 7 Rr,Q = { } q ← −15x3 + 50x2 − 3xy 20 3 r ← 5x − y 3 + 10y 2 + 7 7 Rr,Q = { } q ← −15x3 + 50x2 − 3xy + 5x 20 3 r ← − y 3 + 10y 2 + 7 7
r 6= 0
Rr,Q = { }
r 6= 0
Rr,Q = { }
r 6= 0
Rr,Q = { }
return
20 q ← −15x3 + 50x2 − 3xy + 5x − y 3 7 3 2 r ← +10y + 7 20 q ← −15x3 + 50x2 − 3xy + 5x − y 3 + 10y 2 7 3 r←+ 7 q ← −15x3 + 50x2 − 3xy + 5x −
20 3 3 y + 10y 2 + 7 7
q = −15x3 + 50x2 − 3xy + 5x −
3 20 3 y + 10y 2 + 7 7
r←0
208
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
Het resultaat normalf(q, Q), is de volledig gereduceerde vorm van q modulo Q. Merk op dat in elk polynoom de termen geschreven zijn in dalende orde volgens >L . Voorbeeld 5.5 in Maple (comp55.mws). Merk op dat we de operator M(r) zelf moeten implementeren. Verder maken we gebruik van de operator redu(r,f) om de reductie r-M(r)/M(f)*f uit te voeren. > restart; > with(Groebner); [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > var:=[x,y]; > ord:=’plex’; var := [x, y] ord := plex > tord:=’plex(x,y)’; tord := plex(x, y) > M:=proc(r) > local lmr; > lmr:=leadmon(r,tord); > lmr[1]*lmr[2]; > end: > redu:=proc(r,f) > sort(expand(r-(M(r)/M(f))*f),var,ord); > end: > p1:=x^2*y+5*x^2+y^2; > p2:=7*x*y^2-2*y^3+1; p1 := x2 y + 5 x2 + y 2 p2 := 7 x y 2 − 2 y 3 + 1
>
Q:=[p1,p2];
>
Q := [x2 y + 5 x2 + y 2 , 7 x y 2 − 2 y 3 + 1] p:=3*x^3*y+2*x^2*y^2-3*x*y+5*x;
>
r:=p;
p := 3 x3 y + 2 x2 y 2 − 3 x y + 5 x
209
5.5. VOORBEELD >
q:=0; r := 3 x3 y + 2 x2 y 2 − 3 x y + 5 x q := 0
R(r,Q):={p1} > f:=p1; f := x2 y + 5 x2 + y 2 >
>
>
r:=redu(r,f); r := −15 x3 + 2 x2 y 2 − 3 x y 2 − 3 x y + 5 x q:=q+M(r);
q := −15 x3
r:=r-M(r);
r := 2 x2 y 2 − 3 x y 2 − 3 x y + 5 x r/=0, R(r,Q)={p1,p2} >
f:=p1; f := x2 y + 5 x2 + y 2
>
>
>
>
r:=redu(r,f); r := −10 x2 y − 3 x y 2 − 3 x y + 5 x − 2 y 3
r:=redu(r,f); r := 50 x2 − 3 x y 2 − 3 x y + 5 x − 2 y 3 + 10 y 2 q:=q+M(r); q := −15 x3 + 50 x2
r:=r-M(r);
r := −3 x y 2 − 3 x y + 5 x − 2 y 3 + 10 y 2 r/=0, R(r,q)={p2} > f:=p2; >
r:=redu(r,f);
f := 7 x y 2 − 2 y 3 + 1 r := −3 x y + 5 x −
> >
3 20 3 y + 10 y 2 + 7 7
q:=q+M(r); r:=r-M(r); q := −15 x3 + 50 x2 − 3 x y 20 3 3 r := 5 x − y + 10 y 2 + 7 7
r/=0,R(r,Q)={} >
q:=q+M(r);
210 >
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN r:=r-M(r); q := −15 x3 + 50 x2 − 3 x y + 5 x 3 20 r := − y 3 + 10 y 2 + 7 7
r/=0,R(r,Q)={}
>
q:=q+M(r);
>
r:=r-M(r); q := −15 x3 + 50 x2 − 3 x y + 5 x − r := 10 y 2 +
20 3 y 7
3 7
r/=0,R(r,Q)={} >
q:=q+M(r);
>
r:=r-M(r); q := −15 x3 + 50 x2 − 3 x y + 5 x − r :=
20 3 y + 10 y 2 7
3 7
r/=0,R(r,Q)={} >
q:=q+M(r);
>
r:=r-M(r); q := −15 x3 + 50 x2 − 3 x y + 5 x −
3 20 3 y + 10 y 2 + 7 7
r := 0 normalf is gemplementeerd in Maple. Ter controle beschouwen we: >
normalf(p,Q,tord); −15 x3 + 50 x2 − 3 x y + 5 x −
3 20 3 y + 10 y 2 + 7 7
Het volgende voorbeeld illustreert een ernstige tekortkoming in het algoritme
211
5.6. VOORBEELD
5.6
Voorbeeld
We beschouwen de graad-ordening (tdeg) op T(x,y,z) en stellen Q = {p1 , p2 , p3 } ⊂ Q[x, y, z] met p1 = x3 yz − xz 2 , p2 = xy 2 z − xyz, p3 = x2 y 2 − z 2 . Verder stellen we q = x2 y 2z − z 3 , r = −x2 y 2 z + x2 yz. Dan is q →p3 x2 y 2z − z 3 − z(x2 y 2 − z 2 ) = 0 analoog is ook r →p2 0 Maar q + r = x2 yz − z 3 is niet reduceerbaar modulo Q. We merken op dat in Maple de problemen kennenlijk nog op een andere manier naar voor komen: Voorbeeld 5.6 in Maple (comp56.mws). > restart; > with(Groebner); > var:=[x,y,z]; [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] var := [x, y, z] >
> > > >
tord:=’tdeg(x,y,z)’; tord := tdeg(x, y, z) p1:=x^3*y*z-x*z^2; p2:=x*y^2*z-x*y*z; p3:=x^2*y^2-z^2; Q:=[p1,p2,p3]: p1 := x3 y z − x z 2
p2 := x y 2 z − x y z > >
p3 := x2 y 2 − z 2
q:=x^2*y^2*z-z^3; r:=-x^2*y^2*z+x^2*y*z;
q := x2 y 2 z − z 3
212
>
>
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
normalf(q,Q,tord);
r := −x2 y 2 z + x2 y z
normalf(r,Q,tord);
−z 3 + x2 y z 0
>
>
normalf(q+r,Q,tord); Q:=[p3,p1,p2];
−z 3 + x2 y z
Q := [x2 y 2 − z 2 , x3 y z − x z 2 , x y 2 z − x y z]
>
normalf(q,Q,tord);
0 >
normalf(r,Q,tord); −z 3 + x2 y z
5.7
Gr¨ obnerbasis
Het is duidelijk dat als p →+ Q 0 dan p ∈ hQi (het reductiealgoritme is getrouw), maar het voorbeeld (5.6) toont aan dat het omgekeerde niet waar is, of m.a.w. dat het reductiealgoritme niet volledig is. We schrijven dit probleem niet toe aan het algoritme zelf, maar aan de keuze van de ideaalbasis Q. Definitie Een ideaalbasis G ⊆ F[x] wordt een Gr¨obnerbasis genoemd (voor een gekozen termordening >T ) als p ∈ hGi ⇐⇒ p →+ G 0 Eigenschap G is een Gr¨obnerbasis wanneer het enige niet reduceerbare polynoom in hGi p = 0 is. Bewijs: Stel dat G een Gr¨obnerbasis is, en p ∈ hGi een niet reduceerbaar polynoom. Dan moet gelet op de definitie van Gr¨obnerbasis toch p →+ G 0 gelden en dus p = 0 zijn. Omgekeerd, stel p ∈ hGi en bereken p →∗G q. Dan is q ∈ hGi en niet verder reduceerbaar. Als 0 het enige niet reduceerbare polynoom van hGi is hebben we dus qed q = 0 en dus p →+ G 0.
213
5.8. VOORBEELD
5.8
Voorbeeld
Beschouw Q = {p1 , p2 , p3 } ⊂ Q[x, y, z] en q en r uit het voorbeeld (5.6). Stellen we G = {p1 , p2 , p3 , x2 yz − z 3 , xz 3 − xz 2 , yz 3 − z 3 , xyz 2 − xz 2 , x2 z 2 − z 4 , z 5 − z 4 } dan is hQi = hGi en hebben we voor de graad-ordening dat q →∗G 0, r →∗G 0, q + r →∗G 0. We hebben evenwel nog geen methode om aan te tonen dat bovenstaande G een Gr¨obnerbasis is.
5.9
Alternatieve karakterisatie van Gro ¨bnerbasis
We hebben reeds gezien dat een gegeven ideaalbasis P niet noodzakelijk een Gr¨obnerbasis is. Het idee achter het Buchberger algoritme is de gegeven basis P aan te vullen met een eindig aantal nieuwe polynomen. Buchbergers’ bijdrage bestond erin aan te tonen dat deze completie slechts een eindig aantal controles van de volgende aard vereist: Definitie Een S-polynoom voor p, q ∈ F[x] is #
"
q p − . spoly(p, q) = KGV(M(p), M(q)) M(p) M(q)
5.10
Voorbeeld
Voor de volgende polynomen p1 , p2 ∈ Q[x, y] p1 = 3x2 y − y 3 − 4, p2 = xy 3 + x2 − 9 en de graad-ordening op T(x,y) hebben we !
p1 p2 − spoly(p1 , p2 ) = 3x y 3x2 y xy 3 2 2 = y (3x y − y 3 − 4) − 3x(xy 3 + x2 − 9) = −y 5 − 3x3 − 4y 2 + 27x 2 3
Voorbeeld 5.10 in Maple (comp510.mws).
(5.2)
214
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
>
restart;
>
with(Groebner):
>
ord:=’tdeg’; ord := tdeg
>
p1:=3*x^2*y-y^3-4;
>
p2:=x*y^3+x^2-9; p1 := 3 x2 y − y 3 − 4
>
p2 := x y 3 + x2 − 9
p:=spoly(p1,p2,tdeg(x,y));
p := term order S −poly ([3 x2 y − y 3 − 4, 3, 3, x2 y, 0], [x y 3 + x2 − 9, 2, 1, x y 3 , 0], y 3 x2 , term order )1 > p; −y 5 − 4 y 2 − 3 x3 + 27 x Merk op dat Maple zich niet bekommert om de ordening van de termen bij het uitschrijven van het resultaat! Om de correcte ordening te zien, moeten we ”sorteren”! >
sort(%,[x,y],ord); −y 5 − 3 x3 − 4 y 2 + 27 x
5.11
Stelling
Alternatieven voor het karakteriseren van een Gr¨obnerbasis. De volgende uitspraken zijn equivalent: (i) G is een Gr¨obnerbasis; (ii) spoly(p, q) →+ G 0 voor alle p, q ∈ G; (iii) Als p →∗G q en p →∗G r dan is q = r. Bewijs Voor het bewijs verwijzen we naar [8].
215
5.12. GEVOLG
5.12
Gevolg
1. G is een Gr¨obnerbasis a.s.a. ∀f, g ∈ G ofwel (1) spoly(f,g) →+ G 0 ofwel (2) ∃h ∈ G, f 6= h 6= g, z´o dat hterm(h)|KGV(hterm(f ), hterm(g)), + spoly(f, h) →+ G 0, spoly(h, g) →G 0. 2. Als G een Gr¨obnerbasis is dan geldt: normalf(p, G) = normalf(q, G) ⇐⇒ p − q ∈ hGi
5.13
Buchberger algoritme
De tweede karakterisatie uit stelling (5.11) geeft ons een manier om een willekeurige ideaalbasis te transformeren naar een Gr¨obnerbasis. Gegeven een eindige verzameling P ⊂ F[x], dan kunnen we testen of spoly(p, q) →+ P 0 voor alle p, q ∈ P, p 6= q Wanneer we een paar (p, q) vinden z´o dat spoly(p, q) →∗P r 6= 0 hebben we hP i = hP, ri en spoly(p, q) →+ P ∪{r} 0. Daaruit volgt dat we elk niet-nul resultaat zullen toevoegen aan de basis en zullen doorgaan met het testen van de uitgebreide verzameling. Om te zien dat dit proces zal eindigen, noteren we Hi de verzameling van de hoofdtermen van de basis, nadat het i−de nieuw polynoom is toegevoegd. Aangezien de nieuwe hoofdtermen geen veelvouden zijn van de oude hebben we hH1 i ⊂ hH2 i ⊂ . . . Aangezien nu F[x] een Noethers integriteitsgebied is, moet een dergelijke keten van idealen eindigen. Voor de uitgebreide theorie daarrond verwijzen we naar van der Waerden [17]. We kunnen dan het algoritme als volgt beschrijven
216
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
procedure Gbasis(P ) G ← P ; k ← length(G); # uit G
We stellen Gi het i−de element
B ← {[i, j] : 1 ≤ i < j ≤ k}; while B 6= { } do { [i,j]← selectpair(B, G); B ← B − {[i, j]}; h ← normalf(spoly(Gi , Gj ), G); if h 6= 0 then { G ← G ∪ {h}; k ← k + 1; B ← B ∪ {[i, k] : 1 ≤ i < k} } } return(G) end
Merk op dat we daarbij gebruik maken van een hulpfunctie “selectpair”, die een paar elementen selecteert uit een niet-ledige verzameling B. In een eerste benadering van het probleem kunnen we bijvoorbeeld het eerste paar nemen. De reden waarom G als argument genomen wordt, zal bij het optimaliseren van dit algoritme uitgelegd worden.
5.14
Voorbeeld
Beschouw P ⊂ Q[x, y, z] met P = {x2 + yz − 2, y 2 + xz − 3, xy + z 2 − 5} en de tdeg-ordening voor de ordening van de termen, uitgaande van basisordening [z, y, x] van de variabelen. (Zoals gebruikelijk zijn de termen geordend in afdalende orde.) We stellen eerst G = P , k = 3, en B = {[1, 2], [1, 3], [2, 3]}. Voorbeeld 5.14 in Maple (comp514.mws) > restart; with(Groebner); [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > p1:=x^2+y*z-2; > p2:=y^2+x*z-3;
217
5.14. VOORBEELD >
p3:=x*y+z^2-5; p1 := x2 + y z − 2
p2 := y 2 + x z − 3
p3 := x y + z 2 − 5
>
var:=[z,y,x];
>
ord:=’tdeg’;tord:=’tdeg(z,y,x)’; var := [z, y, x] ord := tdeg tord := tdeg(z, y, x)
>
sort(p1,var,ord);
>
>
>
z y + x2 − 2
sort(p2,var,ord);
z x + y2 − 3
sort(p3,var,ord);
z2 + y x − 5
G:=[p1,p2,p3];
G := [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5] B={[1,2],[1,3],[2,3]} >
>
>
p:=spoly(G[1],G[2],tord):normalf(p,G,tord); 2 y x2 − 2 y + 3 z − 5 x
p4:=2*x^2*y-2*y+3*z-5*x;
p4 := 2 y x2 − 2 y + 3 z − 5 x
G:=[p1,p2,p3,p4];
G := [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x] B={[1,3],[2,3],[1,4],[2,4],[3,4]} >
>
p:=spoly(G[1],G[3],tord):normalf(p,G,tord); 2 z x2 − 2 z + 5 y − 3 x
p5:=5*y+2*x^2*z-2*z-3*x;
p5 := 2 z x2 − 2 z + 5 y − 3 x We voegen dit polynoom toe aan G: >
G:=[p1,p2,p3,p4,p5]; G := [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x, 2 z x2 − 2 z + 5 y − 3 x]
218
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
We moeten nu de volgende koppels nog onderzoeken: B={[2,3],[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5]} > p:=spoly(G[2],G[3],tord):normalf(p,G,tord); 0 B={[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5]} > p:=spoly(G[1],G[4],tord):normalf(p,G,tord); >
2 x4 + 5 z x + 3 y x − 6 x2 − 11 p6:=2*x^4+5*z*x-6*x^2-11+3*y*x; p6 := 2 x4 + 5 z x + 3 y x − 6 x2 − 11
We voegen p6 toe aan G: > G:=[p1,p2,p3,p4,p5,p6]; G := [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x, 2 z x2 − 2 z + 5 y − 3 x, 2 x4 + 5 z x + 3 y x − 6 x2 − 11] B={[2,4],[3,4],[1,5],[2,5],[3,5],[4,5],[1,6],[2,6],[3,6],[4,6],[5,6] } > p:=spoly(G[2],G[4],tord):normalf(p,G,tord); 0 > p:=spoly(G[3],G[4],tord):normalf(p,G,tord); 0 > p:=spoly(G[1],G[5],tord):normalf(p,G,tord); 0 > p:=spoly(G[2],G[5],tord):normalf(p,G,tord); 0 > p:=spoly(G[3],G[5],tord):normalf(p,G,tord); 0 > p:=spoly(G[4],G[5],tord):normalf(p,G,tord); 0 > p:=spoly(G[1],G[6],tord):normalf(p,G,tord); 0 > p:=spoly(G[2],G[6],tord):normalf(p,G,tord); 0 > p:=spoly(G[3],G[6],tord):normalf(p,G,tord); 0 > p:=spoly(G[4],G[6],tord):normalf(p,G,tord); 0 > p:=spoly(G[5],G[6],tord):normalf(p,G,tord); 0
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME
219
B={ } Alle s-polynomen reduceren naar 0.
De gevonden G is een Grobner basis > G; [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x, 2 z x2 − 2 z + 5 y − 3 x, 2 x4 + 5 z x + 3 y x − 6 x2 − 11] Controle : > gbasis([p1,p2,p3],tord); [z x + y 2 − 3, z y + x2 − 2, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x, 2 z x2 − 2 z + 5 y − 3 x, 2 x4 + 5 z x + 3 y x − 6 x2 − 11]
5.15
Verbetering van het Buchberger Algoritme
5.15.1
Gr¨ obnerbasis niet uniek
Hernemen we het voorbeeld (5.8), en laten Maple een Gr¨obnerbasis GB bepalen van G voor de tdeg-ordening, dan vinden we dat GB = G − {p1 } terwijl G ook reeds een Gr¨obnerbasis is.
5.15 Verbetering van het Buchberger algoritme (comp515.mws)
> > >
restart; with(Groebner); var:=[x,y,z];
[fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] >
var := [x, y, z] ord:=’tdeg’;tord:=tdeg(x,y,z);
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
220
ord := tdeg tord := tdeg(x, y, z) > > > >
p1:=x^3*y*z-x*z^2; p2:=x*y^2*z-x*y*z; p3:=x^2*y^2-z^2; G:=[p1,p2,p3]; p1 := x3 y z − x z 2
p2 := x y 2 z − x y z p3 := x2 y 2 − z 2
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 ] >
B ={[1,2],[1,3],[2,3]}
>
>
>
p:=spoly(G[1],G[2],tord):normalf(p,G,tord); p4:=x*z^2-y*x*z^2; G:=[p1,p2,p3,p4];
−y x z 2 + x z 2 p4 := −y x z 2 + x z 2
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 ] >
B={[1,3],[2,3],[1,4],[2,4],[3,4]}
>
>
>
p:=spoly(G[1],G[3],tord):normalf(p,G,tord); p5:=z^3*x-x*z^2; G:=[p1,p2,p3,p4,p5];
x z3 − x z2 p5 := x z 3 − x z 2
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 ] >
B={[2,3],[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5]}
>
p:=spoly(G[2],G[3],tord):normalf(p,G,tord); −x2 y z + z 3
>
p6:=-x^2*y*z+z^3;
>
p6 := −x2 y z + z 3 G:=[p1,p2,p3,p4,p5,p6];
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 , −x2 y z + z 3 ]
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME >
B ={[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5],[1,6],
>
[2,6],[3,6],[4,6],[5,6]};
>
221
p:=spoly(G[1],G[4],tord):normalf(p,G,tord); −x3 z 2 + x z 2
>
p7:=-x^3*z^2+x*z^2;
>
p7 := −x3 z 2 + x z 2 G:=[p1,p2,p3,p4,p5,p6,p7];
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 , −x2 y z + z 3 , −x3 z 2 + x z 2 ] >
B={[2,4],[3,4],[1,5],[2,5],[3,5],[4,5],[1,6],[2,6],
>
[3,6],[4,6],[5,6],[1,7],[2,7],[3,7],[4,7],[5,7],
>
[6,7]}
>
>
p:=spoly(G[2],G[4],tord):normalf(p,G,tord); 0 p:=spoly(G[3],G[4],tord):normalf(p,G,tord); z 4 − x2 z 2
>
p8:=-x^2*z^2+z^4;
>
p8 := z 4 − x2 z 2 G:=[p1,p2,p3,p4,p5,p6,p7,p8];
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 , −x2 y z + z 3 , −x3 z 2 + x z 2 , z 4 − x2 z 2 ] >
B={[1,5],[2,5],[3,5],[4,5],[1,6],[2,6],[3,6],[4,6],
>
[5,6],[1,7],[2,7],[3,7],[4,7],[5,7],[6,7],[1,8],
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
222 >
[2,8],[3,8],[4,8],[5,8],[6,8],[7,8]}
>
>
>
p:=spoly(G[1],G[5],tord):normalf(p,G,tord); 0 p:=spoly(G[2],G[5],tord):normalf(p,G,tord); 0 p:=spoly(G[3],G[5],tord):normalf(p,G,tord); −z 5 + z 4
>
p9:=-z^5+z^4;
>
p9 := −z 5 + z 4 G:=[p1,p2,p3,p4,p5,p6,p7,p8,p9];
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 , −x2 y z + z 3 , −x3 z 2 + x z 2 , z 4 − x2 z 2 , −z 5 + z 4 ] >
B={[4,5],[1,6],[2,6],[3,6],[4,6],[5,6],[1,7],[2,7],
>
[3,7],[4,7],[5,7],[6,7],[1,8],[2,8],[3,8],[4,8],
>
[5,8],[6,8],[7,8],[1,9],[2,9],[3,9],[4,9],[5,9],
>
[6,9],[7,9],[8,9]}
>
>
>
p:=spoly(G[4],G[5],tord):normalf(p,G,tord); 0 p:=spoly(G[1],G[6],tord):normalf(p,G,tord); 0 p:=spoly(G[2],G[6],tord):normalf(p,G,tord); −z 3 y + z 3
>
p10:=-y*z^3+z^3;
>
p10 := −z 3 y + z 3 G:=[p1,p2,p3,p4,p5,p6,p7,p8,p9,p10];
G := [x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −y x z 2 + x z 2 , x z 3 − x z 2 , −x2 y z + z 3 , −x3 z 2 + x z 2 , z 4 − x2 z 2 , −z 5 + z 4 , −z 3 y + z 3 ] >
B={[3,6],[4,6],[5,6],[1,7],[2,7],[3,7],[4,7],[5,7],
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME >
[6,7],[1,8],[2,8],[3,8],[4,8],[5,8],[6,8],[7,8],
>
[1,9],[2,9],[3,9],[4,9],[5,9],[6,9],[7,9],[8,9],
>
[1,10],[2,10],[3,10],[4,10],[5,10],[6,10],[7,10],
>
[8,10],[9,10]}
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
p:=spoly(G[3],G[6],tord):normalf(p,G,tord); 0 p:=spoly(G[4],G[6],tord):normalf(p,G,tord); 0 p:=spoly(G[5],G[6],tord):normalf(p,G,tord); 0 p:=spoly(G[1],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[2],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[3],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[4],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[5],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[6],G[7],tord):normalf(p,G,tord); 0 p:=spoly(G[1],G[8],tord):normalf(p,G,tord); 0 p:=spoly(G[2],G[8],tord):normalf(p,G,tord); 0 p:=spoly(G[3],G[8],tord):normalf(p,G,tord); 0 p:=spoly(G[4],G[8],tord):normalf(p,G,tord); 0 p:=spoly(G[5],G[8],tord):normalf(p,G,tord); 0 p:=spoly(G[6],G[8],tord):normalf(p,G,tord);
223
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
224
0 >
p:=spoly(G[7],G[8],tord):normalf(p,G,tord); 0
>
p:=spoly(G[1],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[2],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[3],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[4],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[5],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[6],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[7],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[8],G[9],tord):normalf(p,G,tord); 0
>
p:=spoly(G[1],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[2],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[3],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[4],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[5],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[6],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[7],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[8],G[10],tord):normalf(p,G,tord); 0
>
p:=spoly(G[9],G[10],tord):normalf(p,G,tord); 0
B = {}
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME
225
Dit geeft ons een gr¨obnerbasis: >
sort(G);
[−x3 z 2 + x z 2 , z 4 − x2 z 2 , x z 3 − x z 2 , x3 y z − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , −x2 y z + z 3 , −z 5 + z 4 , −z 3 y + z 3 , −y x z 2 + x z 2 ]
Laten we dit nu vergelijken met de gr¨obnerbasis die door Maple wordt gevonden : >
GB:=sort(gbasis([p1,p2,p3],tord));
GB := [x z 3 − x z 2 , x y 2 z − x y z, x2 y 2 − z 2 , x2 y z − z 3 , z 3 y − z 3 , x2 z 2 − z 4 , y x z2 − x z2, z5 − z4]
Besluit : GB = G − {p1 , p7 }
Gr¨ obnerbasissen zijn dus niet uniek.
5.15.2
Gereduceerde gr¨ obnerbasis
Zij G ⊂ F[x], dan wordt G “gereduceerd” genoemd als ∀g ∈ G
g = normalf(g, G − {g})
G heet “monisch” als ∀g ∈ G
5.15.3
hcoeff(g) = 1
Stelling (Buchberger)
Als G, H gereduceerde monische Gr¨obnerbasissen zijn, z´o dat hGi = hHi, dan is G = H. De constructie van een gereduceerde ideaalbasis kan als volgt worden beschreven:
226
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
procedure ReduceSet(E) # Gegeven E: niet noodzakelijk Gr¨obnerbasis ˜ en # Bereken E˜ z.d. hEi = hEi ˜ # E is gereduceerd # Verwijder eerst de overbodige elementen! R ← E; P ← { }; while R 6= { } do { h ← selectpoly(R); R ← R − {h}; h ← normalf(h, P ); if h 6= 0 then { Q ← {q ∈ P : hterm(h)|hterm(q)}; R ← R ∪ Q; P ← P − Q ∪ {h} } } # Zorg dat elk element gereduceerd is modulo de andere. E˜ ← { }; S ← P; foreach h ∈ P do { h ← normalf(h, S − {h}) E˜ ← E˜ ∪ {h} } ˜ return(E) end
Er valt nu nog op te merken dat voor een groot aantal 0-reducties, deze reductie niet effectief moet uitgevoerd worden. Buchberger toont immers aan:
5.15.4
Stelling
Als KGV(hterm(p), hterm(q)) = hterm(p) hterm(q) dan geldt spoly(p, q) →+ {p,q} 0 We kunnen derhalve twee criteria invoeren, waarbij de reductie niet moet uitgerekend worden: [i, j] moet niet beschouwd worden wanneer de volgende voorwaarde niet vervuld is:
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME
227
criterium1([i, j], G) ⇐⇒ KGV(hterm(Gi ), hterm(Gj )) 6= hterm(Gi ) hterm(Gj ) Gelet op gevolg (5.12) mogen we ook Spoly(i, j) overslaan als [i, j] niet voldoet aan: criterium2([i, j], B, G) ⇐⇒ ¬∃k, 1 ≤ k ≤ length(G) z´o dat {i 6= k 6= j, hterm(Gk )|KGV(hterm(Gi ), hterm(Gj )), [i, k] 6∈ B, [k, j] 6∈ B} We krijgen dan het volgende verbeterde Buchberger algoritme:
procedure Gbasis(P ) G ← ReduceSet(P ); k ← length(G); B ← {[i, j] : 1 ≤ i < j ≤ k}; while B 6= { } do { [i,j]← selectpair(B, G); B ← B − {[i, j]}; if criterium1([i, j], G) and criterium2([i, j], B, G) then { h ← normalf(spoly(Gi , Gj ), G); if h 6= 0 then { G ← G ∪ {h}; k ← k + 1; B ← B ∪ {[i, k] : 1 ≤ i < k} } } } R ← {g ∈ G : Rg,G − {g} = 6 { }} return(ReduceSet(G − R)) end
228
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
5.15.5
Voorbeeld
5.15.5 Voorbeeld uitgewerkt in Maple (comp5155.mws)
Zoek een grobnerbasis met het vereenvoudigde Buchbergeralgoritme, en toon aan dat dit aanleiding geeft tot het resultaat dat in Maple gevonden wordt. > restart; > with(Groebner); [fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > var:=[x,y,z]; var := [x, y, z] > ord:=’plex’; ord := plex > tord:=’plex(x,y,z)’; tord := plex(x, y, z) >
p1:= y^2+y*z-2;
>
p2:= y^2+2*x*y+1;
>
p3:= x*y+y*z-1; p1 := y 2 + y z − 2
p2 := y 2 + 2 x y + 1 p3 := x y + y z − 1
>
P:=[p1,p2,p3];
>
P := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1] G:=[p1,p2,p3]; G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1]
B={[1,2],[1,3],[2,3]} > sp:=spoly(G[1],G[2],tord):normalf(sp,G,tord); −4 x − 3 y − z > p4:=%; p4 := −4 x − 3 y − z > G:=[p1,p2,p3,p4]; G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1, −4 x − 3 y − z]
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME
229
B={[1,3],[2,3],[1,4],[2,4],[3,4]} >
>
>
sp:=spoly(G[1],G[2],tord):normalf(sp,G,tord); 3 5 y + y z2 − 3 z 2 2 p5:=%; 3 5 p5 := y + y z 2 − 3 z 2 2 G:=[p1,p2,p3,p4,p5];
G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1, −4 x − 3 y − z,
5 3 y + y z 2 − 3 z] 2 2
B={[2,3],[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5]} >
>
sp:=spoly(G[2],G[3],tord):normalf(sp,G,tord); 5−3yz
p6:=%;
p6 := 5 − 3 y z
>
G:=[p1,p2,p3,p4,p5,p6];
G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1, −4 x − 3 y − z, 5 − 3 y z] B= {[1,4],[2,4],[3,4],[1,5],[2,5],[3,5],[4,5],[1,6],[2,6],[3,6],[4,6],[5 ,6]} >
sp:=spoly(G[1],G[4],tord):normalf(sp,G,tord); 0
>
sp:=spoly(G[2],G[4],tord):normalf(sp,G,tord); 0
>
sp:=spoly(G[3],G[4],tord):normalf(sp,G,tord); 0
>
sp:=spoly(G[1],G[5],tord):normalf(sp,G,tord); 0
>
sp:=spoly(G[2],G[5],tord):normalf(sp,G,tord); 0
>
sp:=spoly(G[3],G[5],tord):normalf(sp,G,tord); 3 2 25 z − 4 4 p7:= %; 3 25 p7 := z 2 − 4 4 G:= [p1,p2,p3,p4,p5,p6,p7];
>
>
3 5 y + y z 2 − 3 z, 2 2
230
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1, −4 x − 3 y − z, 5 − 3 y z,
3 2 5 y z + y − 3 z, 2 2
3 2 25 z − ] 4 4
B:= {[4,5],[1,6],[2,6],[3,6],[4,6],[5,6],[1,7],[2,7],[3,7],[4,7],[5,7],[6 ,7]} > sp:=spoly(G[4],G[5],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[1],G[6],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[2],G[6],tord):normalf(sp,G,tord); 1 5 − z+ y 2 2 > p8:= %; 5 1 p8 := − z + y 2 2 > G:=[p1,p2,p3,p4,p5,p6,p7,p8]; G := [y 2 + y z − 2, y 2 + 2 x y + 1, x y + y z − 1, −4 x − 3 y − z, 5 − 3 y z,
5 3 y + y z 2 − 3 z, 2 2
1 5 3 2 25 z − , − z + y] 4 4 2 2
B= {[3,6],[4,6],[5,6],[1,7],[2,7],[3,7],[4,7],[5,7],[6,7],[1,8],[2,8],[3 ,8],[4,8],[5,8],[6,8][7,8]} > sp:=spoly(G[3],G[6],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[4],G[6],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[5],G[6],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[1],G[7],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[2],G[7],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[3],G[7],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[4],G[7],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[5],G[7],tord):normalf(sp,G,tord); 0 > sp:=spoly(G[6],G[7],tord):normalf(sp,G,tord); 0
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME >
>
>
>
>
>
>
>
231
sp:=spoly(G[1],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[2],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[3],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[4],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[5],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[6],G[8],tord):normalf(sp,G,tord); 0 sp:=spoly(G[7],G[8],tord):normalf(sp,G,tord); 0 sort(G);
5 3 3 25 1 5 [ y + y z 2 − 3 z, −4 x − 3 y − z, 5 − 3 y z, z 2 − , − z + y, x y + y z − 1, 2 2 4 4 2 2 2 2 y + 2 x y + 1, y + y z − 2] > GB:= sort(gbasis([p1,p2,p3],tord)); GB := [3 z 2 − 25, 5 x + 2 z, −z + 5 y]
>
>
>
>
> >
>
>
> >
normalf(p1,[p2,p3,p4,p5,p6,p7,p8],tord); 0 normalf(p2,[p3,p4,p5,p6,p7,p8],tord); 0 normalf(p3,[p4,p5,p6,p7,p8],tord); 0 normalf(p4,[p5,p6,p7,p8],tord); 8 −4 x − z 5 p4:=%: normalf(p5,[p4,p6,p7,p8],tord); 0 normalf(p6,[p4,p7,p8],tord); 0 normalf(p7,[p4,p8],tord); 3 2 25 z − 4 4 p7:=%: normalf(p8,[p4,p7],tord);
232
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN 5 1 − z+ y 2 2
> >
p8:=%: q1:=p4;q2:=p7;q3:=p8; 8 z 5 3 25 q2 := z 2 − 4 4 1 5 q3 := − z + y 2 2 q1 := −4 x −
> > > > > >
>
monic:=proc(r) local lmr; lmr:=leadmon(r,tord); sort(expand(r/lmr[1]),var,ord); end: monic(q1); monic(q2); monic(q3); 2 x+ z 5 25 z2 − 3 1 y− z 5 monic(GB[1]); monic(GB[2]); monic(GB[3]); 25 z2 − 3 2 x+ z 5 1 y− z 5
Besluit : We vinden dezelfde grobnerbasis terug !
5.15. VERBETERING VAN HET BUCHBERGER ALGORITME
233
234
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
5.16
Toepassing van Gr¨ obnerbasissen
5.16.1
I. Berekeningen in Quotientringen
Stel dat we berekeningen moeten uitvoeren in de quotientring F[x]/hGi, dan kunnen we gebruik maken van de volgende stelling: Stelling Stel G een Gr¨obnerbasis, en definieer U = {[u] : u ∈ Tx , ¬∃g ∈ G hterm(g)|u}
(5.3)
waarbij [u] de congruentieklasse van u modulo G voorstelt. Dan is U een basis voor F[x]/hGi beschouwd als vectorruimte. Voorbeeld 1. Beschouwen we de Gr¨obnerbasis uit het voorbeeld (5.14) > gbasis([p1,p2,p3],tord); [z x + y 2 − 3, z y + x2 − 2, z 2 + y x − 5, 2 y x2 − 2 y + 3 z − 5 x, 2 z x2 − 2 z + 5 y − 3 x, 2 x4 + 5 z x + 3 y x − 6 x2 − 11]
dan is dit een gereduceerde Gr¨obnerbasis voor door graad-ordening >D . Dan is U = {[1], [z], [y], [x], [zx], [yx], [x2 ], [x3 ]} een basis voor Q[z, y, x]/hGi. We berekenen dan bijvoorbeeld [zx].[yx] als volgt: 5 3 11 normalf(zx.yx, G) = zx + yx − x2 − ; 2 2 2 waaruit volgt dat 5 3 11 [zx].[yx] = [zx] + [yx] − 1[x2 ] − [1]. 2 2 2 2. We berekenen nu uitgaande van hetzelfde voorbeeld als hierboven, het ringinverse voor [x]. Dit inverse heeft de volgende gedaante: [x].(a0 [1] + a1 [z] + a2 [y] + a3 [x] + a4 [zx] + a5 [yx] + a6 [x2 ] + a7 [x3 ]) = 1. Gelet op stelling (5.3) moet p = x.(a0 1 + a1 z + a2 y + a3 x + a4 zx + a5 yx + a6 x2 + a7 x3 ) − 1
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN
235
naar nul reduceren. Gelet op normalf(p, G) = (−1 + 11 a ) + a6 x3 (a2 − 23 a5 )z 2 7 +(a2 − 23 a7 )yx + (a3 + 3a7 )x2 +(a0 + 23 a4 + 25 a5 )x + (a1 − 25 a7 )zx + (− 52 a4 + a5 )y moeten dus de co¨effici¨enten van het inverse van [x] voldoen aan het volgende stelsel: 11 a = 1, a6 = 0, 2 7 3 3 a2 − 2 a7 = 0, a4 − 2 a5 = 0, a3 + 3a7 = 0, a0 + 23 a4 + 25 a5 = 0, a1 − 25 a7 = 0, − 25 a4 + a5 = 0 Daaruit volgt dan dat
a0 = a4 = a5 = a6 = 0, a1 = en dus [x]−1 =
5 3 6 2 , a2 = , a3 = − , a7 = ; 11 11 11 11
3 6 2 5 [z] + [y] − [x] + [x3 ]. 11 11 11 11
In Maple COMP5161.MWS.
5.16.1 Berekeningen in Quotientringen > >
restart; with(Groebner);
[fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > var:=[z,y,x]; var := [z, y, x] >
ord:=’tdeg’; ord := tdeg
>
tord:=’tdeg(z,y,x)’; tord := tdeg(z, y, x)
zie worksheet comp514.mws : > G:=[z*y+x^2-2,z*x+y^2-3,z^2+y*x-5,2*x^2*y-2*y+3*z-5*x,5*y+2*x^2*z-2*z >
-3*x,2*x^4+5*z*x-6*x^2-11+3*y*x];
G := [z y + x2 − 2, z x + y 2 − 3, z 2 + y x − 5, 2 x2 y − 2 y + 3 z − 5 x, 5 y + 2 x2 z − 2 z − 3 x, 2 x4 + 5 z x − 6 x2 − 11 + 3 y x] > leadmon(G[1],tord); 1, z y
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
236 >
leadmon(G[2],tord); 1, y 2
>
leadmon(G[3],tord); 1, z 2
>
leadmon(G[4],tord); 2, x2 y
>
leadmon(G[5],tord); 2, x2 z
>
leadmon(G[6],tord); 2, x4
dus U = {[1], [z], [y], [x], [zx ], [yx ], [x2 ], [x3 ]} 1. >
normalf((z*x)*(y*x),G,tord); 5 11 3 −x2 + z x − + yx 2 2 2
>
p:=x*(a0*1+a1*z+a2*y+a3*x+a4*z*x+a5*y*x+a6*x^2+a7*x^3)-1;
>
p := x (a0 + a1 z + a2 y + a3 x + a4 z x + a5 y x + a6 x2 + a7 x3 ) − 1 normalf(p,G,tord);
2.
3 5 3 5 3 11 a7 − 1 + (a4 − a5 ) z + (− a7 + a1 ) z x + (− a7 + a2 ) y x + (a0 + a5 + a4 ) x 2 2 2 2 2 2 5 + (a5 − a4 ) y + (a3 + 3 a7 ) x2 + a6 x3 2 > solve( >
{-1+11/2*a7=0,a2-3/2*a7=0,a1-5/2*a7=0,a6=0,a0+3/2*a4+5/2*a5=0,a4-3/2*
a5=0,-5/2*a4+a5=0,a3+3*a7=0}); −6 3 5 2 {a4 = 0, a3 = , a2 = , a5 = 0, a1 = , a0 = 0, a7 = , a6 = 0} 11 11 11 11
>
Besluit : [x](−1) =
5 [z] 11
+
3 [y] 11
−
6 [x] 11
+
2 [x3 ] 11
Controle : > inv_x := 5/11*z+3/11*y-6/11*x+2/11*x^3; 3 6 2 3 5 z+ y− x+ x inv x := 11 11 11 11
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN >
normalf(inv_x*x,G,tord); 1
>
sort(G[2],[y,x,z],tdeg);
>
y2 + x z − 3 leadterm(G[2],tdeg(z,y,x)); y2
237
238
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
5.16.2
II. Oplossen van stelsels van polynoomvergelijkingen
Beschouw pi (x1 , x2 , . . . , xn ) = 0, 1 ≤ i ≤ k,
een stelsel van polynoomvergelijkingen over F , dan kunnen we eigenschappen van de oplossingen uitdrukken in functie van het ideaal hp1 , p2 , . . . , pk i. Zo is het o.m. duidelijk dat als hP i = hQi, dat dan de verzameling van gemeenschappelijke nulpunten van P en Q samenvallen. We hebben nu de volgende stelling: Stelling Als G een monische Gr¨obnerbasis is voor hP i = hp1 , p2 , . . . , pk i ⊂ F[x]. Dan is P , beschouwd als stelsel van polynoomvergelijkingen oplosbaar a.s.a. 1 6∈ G. Bewijs Als toepassing van Hilbert’s Nullstellensatz (zie van der Waerden [17]) weten we dat P onoplosbaar is a.s.a er over F[x] een combinatie van de pi kan gevonden worden, die een van nul verschillende constante oplevert, die we 1 kunnen stellen. Aangezien hP i = hGi is dit equivalent met 1 ∈ hGi. Aangezien G een Gr¨obnerbasis is, impliceert dit dat normalf(1, G) = 0 moet zijn, hetgeen slechts mogelijk is als 1 ∈ G. Gelet op voorgaande stelling is het stelsel niet oplosbaar. qed Voorbeeld 1 De gereduceerde monische Gr¨obnerbasis over Q[xy] voor hp1 , p2 , p3 i met p1 = x2 y + 4y 2 − 17, p2 = 2xy − 3y 3 + 8, p3 = xy 2 − 5xy + 1 is {1}, onafhankelijk van de gebruikte termordening. Derhalve heeft het corresponderende systeem van polynoomvergelijkingen p1 = 0, p2 = 0, p3 = 0 geen oplossingen. Stelling Zij G een Gr¨obnerbasis voor hP i ⊂ F[x], en H de verzameling H = {hterm(g) : g ∈ G} Dan heeft het stelsel van polynoomvergelijkingen, dat correspondeert met P eem eindig aantal oplossingen a.s.a.
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN
239
∀i 1 ≤ i ≤ n, ∃m ∈ N : (xi )m ∈ H (Bewijs: zie Geddes [8]). Voorbeeld 2 Beschouwen we P = {x2 + yz − 2, y 2 + xz − 3, xy + z 2 − 5} ⊂ Q[x, y, z] dan hebben we met betrekking tot de graad-ordening >D de gereduceerde Gr¨obnerbasis uit voorbeeld (5.14), en dus de hoofdtermen H = {x2 , y 2, xy, xz 2 , yz 2 , z 4 } Aangezien 1 6∈ H is het stelsel oplosbaar, en gelet op de voorgaande stelling zijn er een eindig aantal oplossingen.
5.16.2 Oplossen van stelsels van polynoomvergelijkingen > >
restart; with(Groebner);
[fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] Voorbeeld 1 : > var := [x,y]; var := [x, y] >
p1 := x^2*y+4*y^2-17;
>
p1 := x2 y + 4 y 2 − 17 p2 := 2*x*y-3*y^3+8;
>
p2 := 2 x y − 3 y 3 + 8 p3 := x*y^2-5*x*y+1;
>
>
>
p3 := x y 2 − 5 x y + 1 ord := ’plex’;tord:=plex(x,y); ord := plex tord := plex(x, y) gbasis([p1,p2,p3],tord); [1] ord := ’tdeg’;tord:=tdeg(x,y);
240
>
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN ord := tdeg tord := tdeg(x, y) gbasis([p1,p2,p3],tord); [1]
Het corresponderende systeem van polynoomvergelijkingen heeft dus geen oplossingen : > solve({p1=0,p2=0,p3=0},{x,y});
Voorbeeld 2 : > var := [x,y,z]; >
>
>
var := [x, y, z] ord := ’tdeg’;tord:=tdeg(x,y,z); ord := tdeg tord := tdeg(x, y, z) p1 := x^2+y*z-2; p2 := y^2+x*z-3;
p1 := x2 + y z − 2 p2 := y 2 + x z − 3
>
p3 := x*y+z^2-5;
>
p3 := x y + z 2 − 5 G := gbasis([p1,p2,p3],tord);
G := [y 2 + x z − 3, x y + z 2 − 5, x2 + y z − 2, 2 y z 2 − 5 y + 3 x − 2 z, 2 x z 2 − 5 x + 2 y − 3 z, 2 z 4 + 2 x z + 3 y z − 15 z 2 + 19] > leadmon(G[1],tord); 1, y 2 > leadmon(G[2],tord); 1, x y > leadmon(G[3],tord); 1, x2 > leadmon(G[4],tord); 2, y z 2 > leadmon(G[5],tord); 2, x z 2 > leadmon(G[6],tord); 2, z 4
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN
241
1 is geen hoofdterm, dus het stelsel van polynoomvergelijkingen heeft een eindig aantal oplossingen : > solve({p1=0,p2=0,p3=0},{x,y,z}); 152 300 3403 1132 %15 − %17 − %13 + %1, 117 117 13 117 88 680 186 2081 x=− %17 + %15 − %13 + %1} 117 117 13 117 %1 := RootOf(8 Z 8 − 60 Z 6 + 142 Z 4 − 172 Z 2 + 1) {y = %1, z =
5.16.3
III. Meetkundige bewijsvoering
In de meetkunde kunnen heel wat problemen uitgedrukt worden in de polynoomuitdrukkingen over een veld F. ˜ een algebra¨ısch afgesloten veld dat F omvat, Stel hi ∈ F[x], si ∈ F[x], c ∈ F[x] en F dan bekijken we een uitdrukking van de volgende gedaante: (∗)
˜ 1 = 0, . . . , hk = 0, ∀x1 , . . . , xn ∈ F{h s1 6= 0, . . . , sl 6= 0}
=⇒ c = 0.
Steunend op de volgend regels (a) p1 = 0 en p2 = 0 ⇐⇒ {p1 = 0, p2 = 0} (b) p1 = 0 of p2 = 0 ⇐⇒ {p1 .p2 = 0} (c) p1 6= 0 ⇐⇒ {p1 z − 1 = 0} waarbij z een nieuwe variabele voorstelt, kan Kapur in [11] aantonen dat de bovenstaande uitspraak equivalent is met hh1 , . . . , hk , s1 z1 − 1, . . . , sl zl − 1, cz − 1i = h1i waarbij zi , z nieuwe variabelen voorstellen. Schema van bewijs:
We maken volgende notatieafspraken: Ai ≡ hi = 0 Bj ≡ sj = 0 C ≡ c=0 We hebben dan
242
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
(∗) ≡ A1 ∧ . . . ∧ Ak ∧ ¬B1 ∧ . . . ∧ ¬Bl ⇒ C ≡ ¬(A1 ∧ . . . ∧ Ak ∧ ¬B1 ∧ . . . ∧ ¬Bl ) ∨ C ≡ ¬A1 ∨ ¬A2 ∨ . . . ¬Ak ∨ B1 ∨ . . . ∨ Bl ∨ C We beschouwen nu een bewijs uit het ongerijmde: • neem de negatie van die uitspraak; • toon aan dat dit niet kan, of m.a.w. dat die uitspraak GEEN OPLOSSING heeft We beschouwen derhalve de uitdrukking: A1 ∧ . . . ∧ Ak ∧ ¬B1 . . . ¬Bl ∧ ¬C en tonen aan dat die geen oplossing heeft.
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN
243
Voorbeeld We beschouwen de vertaling van de volgende eigenschap: Als de middelloodlijn van de schuine zijde van een rechthoekige driehoek door de rechte hoek gaat, is deze driehoek een gelijkbenige driehoek Kiezen we een rechthoekig assestelsel, en plaatsen we de rechte hoek in de oorsprong, en de twee andere hoeken resp. op de x-as en y-as, met co¨ordinaten (y1 , 0) en (0, y2). Stellen we (y3 , y4 ) de co¨ordinaten van het midden van de schuine zijde: Dan hebben we de volgende betrekkingen: • (y3 , y4 ) midden van de schuine zijde: y3 = y4 =
y1 y2 2
2
• Middelloodlijn op de schuine zijde: y1 x − y2 y = y1 y3 − y2 y4 Middelloodlijn door de oorsprong: y1 y3 − y2 y4 = 0 • Gelijkbenige driehoek: of
|y1| = |y2 | y12 = y22
Derhalve hebben we hy1 − 2y3 , y2 − 2y4 , y1 y3 − y2 y4 , (y12 − y22 )z − 1i
244
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
te bekijken. Aangezien de gereduceerde monisch Gr¨obnerbasis over Q[y1 , y2, y3 , y4 , z] {1} is, is de beschouwde stelling geldig. Er kan nog opgemerkt worden dat we eventueel moeten uitdrukken dat y1 6= 0 en y2 6= 0, in dat geval hebben we nog s1 = y1 z1 − 1, s2 = y2 z2 − 1 aan de bovenstaande verzameling toe te voegen.
5.16.3 Meetkundige bewijsvoering > >
restart; with(Groebner);
[fglm, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter reduce, is finite, is solvable, leadcoeff , leadmon, leadterm, normalf , pretend gbasis, reduce, spoly, termorder, testorder , univpoly] > var:=[y1,y2,y3,y4,z]; var := [y1 , y2 , y3 , y4 , z] > ord:=’tdeg’; ord := tdeg > tord:=’tdeg(y1,y2,y3,y4,z)’; tord := tdeg(y1 , y2 , y3 , y4 , z) > gbasis([y1-2*y3,y2-2*y4,y1*y3-y2*y4,(y1^2-y2^2)*z-1],tord); [1] > var:=[y1,y2,y3,y4,z,z1,z2]; >
var := [y1 , y2 , y3 , y4 , z, z1 , z2 ] tord:=’tdeg(y1,y2,y3,y4,z,z1,z2)’;
>
tord := tdeg(y1 , y2 , y3 , y4 , z, z1 , z2 ) gbasis([y1-2*y3,y2-2*y4,y1*y3-y2*y4,(y1^2-y2^2)*z-1,y1*z1-1,y2*z2-1],
>
tord); [1]
¨ 5.16. TOEPASSING VAN GROBNERBASISSEN
245
246
¨ HOOFDSTUK 5. GROBNERBASIS VOOR POLYNOOM-IDEALEN
Hoofdstuk 6 Formele integratie van rationale functies 6.1
Inleiding
Formele integratie is een term uit de computeralgebra waarmee het begrip primitivering 1 uit de analyse wordt bedoeld. Hernemen we de analytische definitie
DEFINITIE Een functie f is primitiveerbaar in ]a, b[ als er een functie g bestaat die afleidbaar is in ]a, b[ en waarvoor geldt dat g 0 = f in ]a, b[. Men noemt dan g een primitieve van f in ]a, b[.
Merk hierbij op dat de noties primitieve en primitiveerbaarheid innig verbonden zijn met een open deel van de re¨ele as, b.v. een open interval. Zo is x1 primitiveerbaar in ]0, +∞[, maar niet primitiveerbaar in ] − 1, +1[. Nochtans is het zo dat in de algoritmen voor formele integratie met een CAS [=computeralgebrasysteem] geen aandacht besteed wordt aan het domein van primitiveerbaarheid van een functie; de gebruiker weze dus ervoor gewaarschuwd dat hij/zij zelf dient te waken over het domein waar de machinaal uitgevoerde bewerkingen zinvol zijn. Anderzijds is het uiteraard zo dat in de analyse het volstaat te weten dat een functie f primitiveerbaar is in een open interval, stel ]a, b[, om te kunnen spreken van – meer zelfs : eigenschappen eraan toekennen en gebruiken – een primitieve g van f 1
ook nog onbepaalde integratie genoemd
247
248HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES in ]a, b[, zonder een expliciete gedaante te kennen van g in termen van andere, z.g. elementaire functies. Deze klasse van elementaire functies omvat de rationale functies, de exponenti¨ele functies, de logaritmische functies, de algebra¨ısche functies, de goniometrische functies en hun inversen, de hyperbolische functies en hun inversen, en tenslotte alle samenstellingen van de vermelde functies. Dit louter “existenti¨ele” karakter van een primitieve is vanuit het computeralgebrastandpunt uiteraard onbevredigend. Vandaar de volgende definitie van het formele integratieprobleem uit de computeralgebra.
DEFINITIE - FORMELE INTEGRATIE Gegeven twee verzamelingen van functies, A en B; het formele integratieprobleem bestaat erin een algoritme te bepalen dat voor elke f uit A ofwel een primitieve g ervan uit B genereert, ofwel aantoont dat er geen primitieve van f in de verzameling B te vinden is. Een zeer eenvoudig voorbeeld ter verduidelijking : stel A en B gelijk aan de verzameling van de rationale functies met rationale co¨effici¨enten : A = B = Q(x). Voor f = x12 ∈ A is g = − x1 ∈ B. Daarentegen is er voor f = te vinden in B.
1 x
∈ A geen primitieve
Het formele integratieprobleem werd reeds ongeveer 150 jaar geleden bestudeerd door Liouville. De resultaten van Hermite voor rationale functies worden nog steeds gebruikt in de computeralgebra (6.4.2). De algoritmische primitivering van transcendente functies kreeg, na Liouville, weinig aandacht; er was een aanzet tot algoritme door Hardy (1928). In 1940 startte Ritt de ontwikkeling van de differentiaalalgebra (§ 2). Met de ontwikkeling vanaf 1960 van programmeertalen voor symbolische wiskunde, ontstond een hernieuwde interesse in het onderwerp en sindsdien is het formele integratieprobleem substantieel ontwikkeld. Als vertrekpunt voor deze moderne aanpak neemt men het fundamentele werk van Risch uit 1968; hierin wordt voor het eerst een volledige beslissingsprocedure beschreven (we komen hierop terug in hoofdstuk 7).
6.2
Differentiaalvelden
In de in de inleiding gegeven definitie van het formele integratieprobleem, hebben we gewag gemaakt van twee verzamelingen A en B van functies. Dit is niet precies
6.2. DIFFERENTIAALVELDEN
249
genoeg voor een algoritmische benadering van het probleem. De analytische concepten van ‘afleiden’ en ‘primitiveren’ kunnen ontwikkeld worden in een algebra¨ısch kader, de z.g. differentiaalalgebra. Een kort overzicht.
DEFINITIE Een differentiaalveld F van functies, is een veld met karakteristiek 0, waarop een afbeelding D:F →F is gedefinieerd die voldoet aan : (i) D(f + g) = D(f ) + D(g), voor alle f en g in F (ii) D(f.g) = f.D(g) + D(f ).g, voor alle f en g in F . Deze afbeelding D wordt afleidings- of differentiaaloperator genoemd.
PROPOSITIE Voor een differentiaalveld F met differentiaaloperator D gelden de volgende eigenschappen : (i) D(0) = 0 (ii) D(1) = 0 (iii) D(−f ) = −D(f ), voor alle f in F f (iv) D g
!
=
gD(f ) − f D(g) , voor alle f en alle g 6= 0 in F g2
(v) D(f n ) = nf n−1 D(f ), voor alle f 6= 0 in F en alle n ∈ Z.
DEFINITIE 1. Zij a(x) een irreductibel polynoom over F [x], dan hebben we gezien dat F [x]/ < a(x) > een veld voorstelt. Als α een wortel is van a(x) noteren we nog F (α) = F (x)/ < a(x) > en noemen dit een extensieveld van F . We zeggen nog dat F (α) een uitbreiding is van F met α.
250HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES Voorbeeld. q Q( (2)) is het veld van de rationale getallen, uitgebreid met de vierkantswortel van 2: q Q( (2)) = Q[x]/ < x2 − 2 > .
2. Zijn F en G differentiaalvelden met respectieve differentiaaloperatoren DF en DG , dan is G een differentiaal extensieveld van F als (i) G een extensieveld van F is (ii) DG (f ) = DF (f ), voor alle f in F .
DEFINITIE • Is F een differentiaalveld met differentiaaloperator D, dan is het constantenveld van F het deelveld van F bepaald door K = {c ∈ F : D(c) = 0}
VOORBEELD Beschouw het veld Q(x) van de rationale functies van de re¨ele variabele x over het co¨effici¨entenveld Q van de rationale getallen; beschouw de klassieke afleidingsoperator D op Q(x) gedefinieerd door D(x) = 1. Toon aan (oefening) dat Q(x) een differentiaalveld is, waarvan het constantenveld Q is.
In het kader van differentiaalalgebra komt het formele integratieprobleem neer op het inverteren van de differentiaaloperator : gegeven een differentiaalveld F met differentiaaloperator D en een differentiaalextensieveld G, bepaal dan een algoritme dat voor elke f in F ofwel een g in G genereert waarvoor D(g) = f , ofwel aantoont dat er geen dergelijke g in G te vinden is. vb. Q(x) = F = G 1 1 f = − 2 → g = ∈ Q(x) x x 1 f = → geen g in G x
6.3
Formele integratie van een polynoom
Voor elk polynoom p in Q[x] = F, p = a0 + a1 x + · · · + an xn , aj ∈ Q,
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
251
bestaat er een polynoom q in Q[x] = G gegeven door Z
p = q = a0 x +
an n+1 a1 2 x +···+ x , 2 n+1
waarvoor D(q) = p.
6.4
Formele Integratie van een rationale functie
Dat Q(x) niet gesloten is voor de inverse operator D −1 is eenvoudig aan te tonen.
PROPOSITIE 1 Voor de rationale functie ∈ Q(x) bestaat er geen rationale functie r ∈ Q(x) x 1 waarvoor D(r) = . x Bewijs Onderstel dat r =
p q
∈ Q(x) voldoet aan D(r) =
GGD(p, q) = 1. Dan is
1 , waarbij p en q ∈ Q[x] en x
qD(p) − pD(q) 1 = x q2 of dus xqD(p) − xpD(q) = q 2 . Stel q = xn qˆ met qˆ ∈ Q[x] en GGD(ˆ q , x) = 1; vermits x een deler is van q 2 , en dus ook van q, zal n ≥ 1. Substitutie levert : xn+1 qˆD(p) − nxn qˆp − xn+1 pD(ˆ q) = x2n qˆ2 of nog x(ˆ q D(p) − pD(ˆ q) − xn−1 qˆ2 ) = npˆ q. Nu is GGD(ˆ q , x) = 1 zodat x een deler moet zijn van p. Maar dan hebben p en q qed een gemeenschappelijk factor, een contradictie.
Het is dus duidelijk dat om een primitieve van een rationale functie uit te drukken, het soms (meestal) nodig zal zijn het differentiaalveld Q(x) te extenderen met andere functies; dit blijkt duidelijk uit de nu volgende, na¨ıeve aanpak.
252HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES
6.4.1
De na¨ıeve aanpak
Beschouw de rationale functie f ∈ Q(x) : f=
p q
met p en q twee polynomen uit Q[x]. Met behulp van 2 het euclidisch deel-algoritme bepalen we r en p˜ in Q[x] waarvoor geldt : p = q p˜ + r waarbij ofwel r = 0 ofwel deg(r) <deg(q). Alzo is p r f = = p˜ + ; q q r men noemt p˜ het polynomiale deel en het rationale deel van de rationale functie q f. Gelet op 6.3 zijn we herleid tot de formele integratie van het rationale deel. De volgende stappen worden achtereenvolgens gezet : ∗ ontbinding van de noemer q in lineaire factoren : q(x) =
Y
(x − ci )mi ,
i=1
m1 + · · · + mk = m
[ci niet noodzakelijk in Q!] ∗ splitsing in partieelbreuken van
r : q
r d1,1 d1,m1 = +···+ q x − c1 (x − c1 )m1 d2,1 d2,m2 + +···+ x − c2 (x − c2 )m2 +··· dk,1 dk,mk + +···+ x − ck (x − ck )mk di,j constant, niet noodzakelijk in Q ∗ primitivering Z
2
1 d1,m1 1 r = d1,1 log (x − c1 ) − d1,2 −···− q x − c1 m1 − 1 (x − c1 )m1 −1 +··· 1 dk , mk ) 1 +dk,1 log (x − ck ) − dk,2 −···− x − ck mk − 1 (x − ck )mk −1
Hierna afkort als: m.b.v.
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE wat van de vorm is : primitieve v.e. rationale functie (graad teller < graad noemer) = rationale functie + lineaire combinatie van logaritmen met argument (x − constante)
253
254HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES VOORBEELD 1 f=
x2
1 +2
r = 1, q = x2 √ +2 √ q(x) = (x + i 2)(x − i 2) √ √ 2 i4 −i 42 r 1 √ + √ = 2 = q x + 2 √x + i 2 x − i 2 √ Z √ √ 2 2 1 =i log (x + i 2) − i log (x − i 2) 2 x +2 4 4 1 [Opmerking : uiteraard wordt een primitieve van x2 +2 ook gegeven door de “simpeler” uitdrukking 1 x √ arctan √ , 2 2 maar vanuit algoritmisch standpunt is dit oninteressant en zeker niet eenvoudiger].
Dit, terecht als na¨ıef bestempeld, algoritme vertoont ernstige gebreken : ∗ het volledig factoriseren van het polynoom q in lineaire factoren is een “dure” operatie ∗ dit vergt meestal het invoeren van algebra¨ısche getallenextensies die moeilijker manipuleerbaar zijn ∗ splitsing in partieelbreuken is eveneens een kostelijke bewerking ∗ voor veel primitieven is het invoeren van die algebra¨ısche getallenextensies overbodig, zoals blijkt uit
VOORBEELD 2 Z
5x4 + 1 = log(x5 + x + 1) x5 + x + 1
en leert ons dat ∗ het vaak onoverkomelijk is het functieveld Q(x) te extenderen met de logaritmische functie ∗ het soms nodig is algebra¨ısche getallenextensies in te voeren, maar deze dienen beperkt te worden tot die extensies waarop het uiteindelijk primitiveringsresultaat beroep doet. Vandaar de volgende definities.
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
255
DEFINITIE Is F een differentiaalveld en G een differentiaal extensieveld van F , dan wordt θ ∈ G logaritmisch over F genoemd als er een u 6= 0 in F bestaat waarvoor D(θ) =
D(u) ; u
men noteert dan : θ = log (u).
DEFINITIE Is F een differentiaalveld met differentiaaloperator D, dan bestaat het formele integratieprobleem voor F erin een differentiaal extensieveld G = F (θ1 , . . . , θn ) en een algoritme te bepalen, dat voor elke f in F – ofwel een g in G genereert waarvoor D(g) = f , – ofwel aantoont dat er geen dergelijk extensieveld bestaat binnen een welomlijnde klasse van “toegelaten” extensies. Voor het differentiaalveld F = Q(x) van rationale functies, kan een primitieve steeds uitgedrukt worden • in een differentiaal extensieveld met logaritmische extensies • en met algebra¨ısche getallenextensies (zie de na¨ıeve aanpak). Deze algebra¨ısche getallenextensies zouden overbodig zijn indien het constantenveld gesloten was (zoals het complexe getallenveld C), wat in CAS - waar elk element een eindige exacte representatie heeft - niet het geval is.
Beide soorten extensies kunnen van elkaar gescheiden worden door te noteren G = Q(α1 , . . . , αk )(x, θ1 , . . . , θn ) waarbij elke θj (1 ≤ j ≤ n) een logaritme is, en elke αj (1 ≤ j ≤ k) een algebra¨ısch getal. Hiermee wordt het duidelijk dat het constantenveld van het differentiaal extensieveld G, Q(α1 , . . . , αk ) zal zijn. Refererend naar bovenstaande voorbeelden is dus Z √ √ √ 1 2)(x, log(x + i 2), log(x − i 2)) ∈ Q(i, x2 + 2
256HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES [m.b.v. de na¨ıeve aanpak] en Z
5x4 + 1 ∈ Q(x, log(x5 + x + 1)) 5 x +x+1 [m.b.v. de methode “klare kijk op de zaak”].
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
257
Maplesessie:
6.4.1 De na¨ıeve aanpak >
restart;
Voorbeeld 1 : > r := 1; r := 1 >
>
>
q := x^2+2; q := x2 + 2 q := factor(q,{sqrt(2),I}); √ √ q := (x + I 2) (x − I 2) convert(r/q,parfrac,x); 1 √ −1 √ I 2 I 2 4 √ + 4 √ x+I 2 x−I 2
We kunnen ook de ontbinding bepalen door de onbekenden a en b op te lossen uit de voorwaarde x−Ia √2 + x+Ib √2 = qr : > collect(a*(x+I*sqrt(2))+b*(x-I*sqrt(2))=r,x); √ √ (a + b) x + I a 2 − I b 2 = 1 > solve({a+b=0,I*a*2^(1/2)-I*b*2^(1/2)=1},{a,b}); 1 √ −1 √ {b = I 2, a = I 2} 4 4 Derhalve vinden we als primitieve: R
1 x2 +2
dx = −
I
√
2 log(x−I 4
√
2)
+
I
√
2 log(x+I 4
√
2)
Controle: > -I*sqrt(2)*log(x-I*sqrt(2))/4+I*sqrt(2)*log(x+I*sqrt(2))/4; √ √ 1 √ 1 √ − I 2 ln(x − I 2) + I 2 ln(x + I 2) 4 4
258HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES >
simplify(diff(%,x)); (x + I
√
1 √ 2) (x − I 2)
Maple geeft ons evenwel het antwoord: > int(r/q,x); 1√ 1 √ 2 arctan( x 2) 2 2 Controle: > simplify(diff(%,x)); x2
1 +2
Voorbeeld 2 : > int((5*x^4+1)/(x^5+x+1),x); ln(x5 + x + 1) > simplify(diff(%,x)); 5 x4 + 1 x5 + x + 1
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
6.4.2
259
De hermitemethode (1872)
Uit de na¨ıeve aanpak van het formele integratieprobleem van een rationale functie (§ 6.4.1) halen we : r = g1 + g2 q met g1 : rationale functie met een noemer waarvan alle factoren exponent ´e´en vertonen g2 : rationale functie met een noemer waarvan alle factoren exponent groter dan ´e´en vertonen De hermitemethode laat toe deze beide rationale functies te bepalen zonder algebra¨ısche getallenextensies te moeten invoeren. De start hierbij is de kwadraatvrije factorisatie van de noemer q, die ondersteld wordt monisch te zijn, d.w.z. hoogstegraadsco¨effici¨ent gelijk aan 1 te hebben : q = q1 q22 . . . qkk waarbij elke qi monisch en kwadratenvrij is en GGD(qi, qj ) = 1 voor i 6= j. Deze kwadratenvrije factorisatie gebeurt in het polynoomdomein Q[x]. Dit leidt naar de splitsing in partieelbreuken : k X i rij r X = q i=1 j=1 qij met alle rij ∈ Q[x] en deg(rij ) <deg(qi ) als deg(qi ) > 0 en ri,j = 0 als qi = 1. We primitiveren nu elke term van het rechterlid afzonderlijk. Hierbij gebruiken we het uitgebreid algoritme van euclidisch: vermits qi en qi0 onderling ondeelbaar zijn (wegens qi kwadratenvrij) bestaan er polynomen s en t in Q[x] waarvoor : sqi + tqi0 = rij waarbij deg(s) < deg(qi0 ) deg(t) < deg(qi ). Alzo is Z
rij qij
sqi + tqi0 = qij Z Z s tqi0 = + qij−1 qij Z s + 1 t0 −t j−1 = j−1 + j−1 (j − 1)qi qi Z
260HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES met deg(s +
1 0 t) j−1
≤ max(deg(s), deg(t0 )) < deg(qi0 ) ≤ deg(qi ) − 1
Is nu j − 1 > 1 dan kan dit reductieproces herhaald worden tot de noemer van alle integranda exponent 1 vertonen; uiteindelijk komt er : Z
p1 r = + q q1
Z
p2 q2
met p1 , p2 , q1 , q2 ∈ Q[x], deg(p2 ) <deg(q2 ) en q2 monisch en kwadratenvrij. Merk op dat op geen enkel ogenblik een algebra¨ısche getallenextensie werd ingevoerd. Het nadeel van de hermitemethode blijft evenwel dat nog steeds dure sub-algoritmen nodig zijn. Merk ook op dat we hebben gebruik gemaakt van de z.g. “parti¨ele integratie”.
STELLING Is F een differentiaalveld met differentiaaloperator D dan geldt voor alle u en v in F dat Z Z u.D(v) = u.v − v.D(u) Bewijs : eenvoudige oefening.
VOORBEELD r = 1, q = (x + 2)2 (x2 + 2)
∗
1 1 1 − 91 x + 18 r 1 6 9 = 2 + = + q (x + 2)(x + 2)2 x2 + 2 (x + 2)2 (x + 2)
∗ eerste term : exponent is 1 ∗ tweede term : s = 0, t = 1 Z
∗ derde term : exponent is 1
1 1 = − (x + 2)2 x+2
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE Resultaat : Z
1 1 1 =− + 2 2 (x + 2)(x + 2) 6x+2
Z
1 (2 6
− x) . (x + 2)(x2 + 2)
Cfr. de volgende Maple-sessie: 6.4.2 Hermitemethode : voorbeeld > restart; > r := 1; r := 1 > q := (x^2+2)*(x+2)^2; >
q := (x2 + 2) (x + 2)2 convert(r/q,parfrac,x,sqrfree); 1 1 1 1 −1 + 2 x + 9 − 2 6 (x + 2) x + 2 18 x2 + 2
Eerste term : exponent is 2 > gcdex((x+2),diff(x+2,x),x,’s’,’t’); 1 > s; t; 0 1 dus
R
1 (x+2)2
dx = − (2−1)1(x+2) + 0 dx of
Controle : > int(1/(x+2)^2,x);
R
−
R
1 (x+2)2
1 dx = − x+2
1 x+2
Tweede term : exponent is 1 Derde term : exponent is 1 >
>
(-1/9*x+1/18)/(x^2+2) + (1/9)/(x+2); 1 1 1 − x+ 9 18 + 9 x2 + 2 x+2 simplify(%); 1 x−2 − 2 6 (x + 2) (x + 2)
261
262HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES
6.4.3
De horowitzmethode (1969)
We pikken aan bij de hermitestructuur van een primitieve van het rationale deel van een rationale functie : Z Z p1 p2 r + = q q1 q2 p1 , p2 , q1 , q2 ∈ Q[x], deg(p2 ) <deg(q2 ), deg(p1 ) <deg(q1 ). We merken op dat q1 dezelfde kwadratenvrije factoren als q vertoont, maar met een exponent ´e´en lager; verder bevat q2 enkel kwadratenvrije factoren met exponent ´e´en, die alle factoren zijn van q. Met een analoge redenering als bij de behandeling van “kwadratenvrije factorisatie”, volgt hieruit dat : q1 = GGD(q, q 0 ) en
q q = . GGD(q, q 0) q1 p2 in gereduceerde gedaante is geschreven, imVermits we mogen onderstellen dat q2 pliceert dit dat q q = q2 = 0 GGD(q, q ) q1 of q = q1 q2 . q2 deelt
Nu is q1 een deler van q 0 = q1 q20 + q10 q2 , en dus ook deler van q10 q2 ; stel q2 q10 = s ∈ Q[x]. q1 Dan is :
!0
p1 p2 + q1 q2 q1 p01 − p1 q10 p2 = + 2 q1 q2 q0 q p01 q2 − p1 1q12 + p2 q1 = q1 q2
r = q
of nog r = p01 q2 − p1 s + p2 q1 q = q1 q2
Hierin zijn gekend : r, q1 , q2 , s, terwijl p1 en p2 te bepalen zijn; deze laatste polynomen hebben een graad die kleiner is dan de graad van q1 en q2 respectievelijk. Aldus zijn we herleid tot een lineair
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
263
algebraprobleem waarin een lineair stelsel in de co¨effici¨enten van de polynomen p1 en p2 moet opgelost worden.
VOORBEELD 1 . (zelfde functie als in VOORBEELD 6.4.2) r = 1, q = (x + 2)2 (x2 + 2) ∗ q 0 = 2(x + 2)(x2 + 2) + (x + 2)2 (2x) ∗ q1 = GGD(q, q 0 ) = (x + 2) q10 = 1 ∗ q2 = ∗ s=
q = (x + 2)(x2 + 2) q1 q2 q10 = x2 + 2 q1
∗ p1 en p2 voldoen aan : deg(p1 ) < 1, deg(p2 ) < 3 1 = p01 (x + 2)(x2 + 2) − p1 (x2 + 2) + p2 (x + 2) substitueer hierin : p1 = d, p2 = ax2 + bx + c en men vindt :
1 1 p1 = − , p2 = (2 − x) 6 6
Resultaat : Z
1 1 1 =− + 2 2 (x + 2) (x + 2) 6x+2
Z
1 (2 6
− x) (x + 2)(x2 + 2)
VOORBEELD 2 f =
441x7 + 780x6 − 2861x5 + 4085x4 + 7695x3 + 3713x2 − 43253x + 24500 9x6 + 6x5 − 65x4 + 20x3 + 135x2 − 154x + 49
735x4 + 441x2 − 12446 x + 21854 3 9 = 49x + 54 + 6 2 5 65 4 20 3 154 2 x + 3 x − 9 x + 9 x + 15x − 9 x + ∗ q = (x + 37 )2 (x − 1)4
49 9
264HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES ∗ q 0 = 2(x + 37 )(x − 1)4 + 4(x + 37 )2 (x − 1)3 ∗ q1 = GGD(q, q 0 ) = (x + 37 )(x − 1)3 ∗ q10 = (x − 1)3 + 3(x + 37 )(x − 1)2 ∗ q2 = ∗ s=
7 q = (x + )(x − 1) q1 3 q2 q10 = 4x + 6 q1
∗ deg(p1 ) < 4, deg(p2 ) < 2
We substitueren p1 = a0 + a1 x + a2 x2 + a3 x3 , p2 = b0 + b1 x in 4 7 2 7 r = p01 (x2 + x − ) − p1 (4x + 6) + p2 (x4 − x3 − 4x2 + 6x − ) 3 3 3 3 en bekomen: 2254 6272 , a1 = , a2 = 735, a3 = −735 a0 = − 9 3 b0 = 0, b1 = 0 Resultaat : Z
f=
−735x3 + 735x2 + 2254 x − 6272 49 2 3 9 x + 54x + 2 x4 − 32 x3 − 4x2 + 6x − 73
OEFENING Pas de horowitzmethode toe om het rationaal en het logaritmisch deel te bepalen van een primitieve van de rationale functie x3 − 407x2 − 3242 x + 3044 36x6 + 126x5 + 183x4 + 13807 6 5 15 f = 7 17 6 263 5 1349 4 2 124 2 4 8 x + 15 x − 900 x − 2250 x + 1125 x3 + 1125 x + 1125 x − 1125 6.4.3 Methode van Horowitz > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
265
>
### WARNING: persistent store makes one-argument readlib obsolete
>
readlib(factors); proc(a, K) . . . end proc
We implementeren eerst de hulpprocedure vorm vgl : > vorm_vgln := proc(p,q,x) #Sandy Van Wonterghem (1998) > local vgln,maxi,i,f,g; > f := collect(expand(p),x); > g := collect(expand(q),x); > maxi := max(degree(f,x),degree(g,x)); > vgln := {}; > for i from 0 to maxi do > vgln := vgln union {coeff(f,x,i)=coeff(g,x,i)}; > od; > vgln; > end: Twee polynomen zijn gelijk indien hun overeenkomstige co¨effici¨enten gelijk zijn. De procedure vorm vgln vertrekt steeds van twee polynomen en drukt uit dat hun overeenkomstige co¨effici¨enten gelijk zijn. Indien een aantal van die co¨effici¨enten onbekend zijn of onbekenden bevatten, kan dit leiden tot een aantal vergelijkingen (vandaar de benaming). > horowitz := proc(ra,qa,x) #Sandy Van Wonterghem (1998) > local l,r1,r2,q_,q1,q1_,q2,s,p1,a,p2,d,i,p1_,t,q,r; > if lcoeff(qa,x)<>1 > then r := ra/lcoeff(qa,x); > q := qa/lcoeff(qa,x); > else r := ra; > q := qa; > fi; > r1 := quo(r,q,x); > r2 := rem(r,q,x); > q_ := diff(q,x); > q1 := gcd(q,q_); > if lcoeff(q1,x)<>1 then q1 := q1/lcoeff(q1,x); fi; > q1_ := diff(q1,x); > q2 := simplify(q/q1); > if lcoeff(q2,x)<>1 then q2 := q2/lcoeff(q2,x); fi; > s := simplify(q2*q1_/q1); > p1 := a||0; > p2 := d||0;
266HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES >
for i from 1 to degree(q1,x)-1 do
>
p1 := p1 + a||i*x^i;
>
od;
>
for i from 1 to degree(q2,x)-1 do
>
p2 := p2 + d||i*x^i;
>
od;
>
p1_ := diff(p1,x);
>
t := p1_*q2-p1*s+p2*q1;
>
vorm_vgln(r2,t,x);
>
l := solve(%);
>
p1 := subs(l,p1); p2 := subs(l,p2);
>
if s=0 then p1:=0; fi;
>
Int(’f’,x) = int(r1,x) + p1/q1 + Int(p2/q2,x);
>
end:
Voorbeeld 1 : f = (x+2)21(x2 +2) >
r := 1; r := 1
>
q := (x+2)^2*(x^2+2); q := (x + 2)2 (x2 + 2)
>
horowitz(r,q,x); Z
f dx = −
1 1 + 6 x+2
Z
1 1 − x 3 6 dx (x + 2) (x2 + 2)
Controle : >
rechterlid := value(rhs(%));
1 1 1 1 1 √ 1 √ + ln(x + 2) − ln(x2 + 2) + 2 arctan( x 2) 6 x+2 9 18 36 2 > linkerlid := int(r/q,x); 1 1 1 √ 1 √ 1 1 + ln(x + 2) − ln(x2 + 2) + 2 arctan( x 2) linkerlid := − 6 x+2 9 18 36 2 > testeq(rechterlid,linkerlid); true
rechterlid := −
Opmerking :
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
267
Indien men genteresseerd is in een aantal tussenresultaten (zoals s, t, p1 en p2 ), dan kan men deze terugvinden in Maple door aan de variabele printlevel de waarde 5 toe te kennen : >
printlevel := 5; printlevel := 5
>
horowitz(r,q,x);
{--> enter horowitz, args = 1, (x+2)^2*(x^2+2), x
r1 := 0 r2 := 1 q := 2 (x + 2) (x2 + 2) + 2 (x + 2)2 x q1 := x + 2 q1 := 1 q2 := (x + 2) (x2 + 2) s := x2 + 2 p1 := a0 p2 := d0 p1 := 0 t := −a0 (x2 + 2) + (d0 + d1 x + d2 x2 ) (x + 2)
{0 = −a0 + d1 + 2 d2 , 0 = d2 , 0 = d0 + 2 d1 , 1 = −2 a0 + 2 d0 } −1 1 −1 l := {d2 = 0, d1 = , d0 = , a0 = } 6 3 6 −1 p1 := 6 1 1 p2 := − x 3 6 1 1 Z Z − x 1 1 3 6 f dx = − + dx 6 x+2 (x + 2) (x2 + 2) <-- exit horowitz (now at top level) = Int(f,x) = -1/6/(x+2)+Int((1/3-1/6*x)/(x+2)/(x^2+2),x)}
1 1 Z − x 1 1 3 6 + dx f dx = − 6 x+2 (x + 2) (x2 + 2) printlevel := 0; printlevel := 0 Z
>
Voorbeeld 2 : 7 6 x5 +4085 x4 +7695 x3 +3713 x2 −43253 x+24500 f = 441 x +780 x9 x−2861 6 +6 x5 −65 x4 +20 x3 +135 x2 −154 x+49 > r := 441*x^7+780*x^6-2861*x^5+4085*x^4+7695*x^3+3713*x^2-43253*x+24500; r := 441 x7 + 780 x6 − 2861 x5 + 4085 x4 + 7695 x3 + 3713 x2 − 43253 x + 24500 >
>
q := 9*x^6+6*x^5-65*x^4+20*x^3+135*x^2-154*x+49;
268HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES
>
q := 9 x6 + 6 x5 − 65 x4 + 20 x3 + 135 x2 − 154 x + 49 horowitz(r,q,x); 6272 2254 Z + x + 735 x2 − 735 x3 Z − 49 2 9 3 f dx = + 0 dx x + 54 x + 2 3 7 2 2 4 − +6x−4x − x +x 3 3
Controle : > rechterlid := convert(value(rhs(%)),parfrac,x);
>
>
49 882 441 49 2 3 x + 54 x − + − rechterlid := 3 2 3 x + 7 (x − 1) x−1 linkerlid := int(r/q,x); 49 49 2 882 441 3 linkerlid := x + 54 x − + − 3 2 3 x + 7 (x − 1) x−1 testeq(rechterlid,linkerlid); true
Voorbeeld 3 : (oefening uit de cursus) 3
f=
x x 36 x6 +126 x5 +183 x4 + 13807 −407 x2 − 3242 + 3044 6 5 15 6
5
4
3
2
x x 2x x 4x 8 − 1349 + 1125 + 124 + 1125 − 1125 x7 + 1715x − 263 900 2250 1125
>
p :=
>
>
36*x^6+126*x^5+183*x^4+(13807/6)*x^3-407*x^2-(3242/5)*x+(3044/15); 3242 3044 13807 3 x − 407 x2 − x+ p := 36 x6 + 126 x5 + 183 x4 + 6 5 15 q :=
>
x^7+(17/15)*x^6-(263/900)*x^5-(1349/2250)*x^4+(2/1125)*x^3+(124/1125)*
x^2+(4/1125)*x-(8/1125); 17 6 263 5 1349 4 2 124 2 4 8 q := x7 + x − x − x + x3 + x + x− 15 900 2250 1125 1125 1125 1125 > horowitz(p,q,x); 39547 2 5271 3 3549 7142 31018 Z Z − x+ x + x + 1167 x + 36 x2 25 25 50 5 2 + dx f dx = 11 3 11 2 2 4 23 2 2 2 4 3 x + x − x − x+ x + x − x− 30 25 25 75 30 15 15 >
Controle : > rechterlid := value(rhs(%));
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
269
39547 2 5271 3 7142 31018 − x+ x + x 91125 25 50 5 rechterlid := 25 + ln(3 x + 2) − 8000 ln(2 x + 1) 2 4 11 3 11 2 16 4 x − x − x+ x + 30 25 25 75 37451 ln(5 x − 2) + 16 > linkerlid := int(p/q,x); linkerlid := −18225 −
91125 14400 432 1 + ln(3 x + 2) + − 8000 ln(2 x + 1) − 3x+2 16 2x+1 (5 x − 2)2
354 37451 + ln(5 x − 2) 5x− 2 16 > testeq(linkerlid,rechterlid); true
Opmerking : >
convert((7142/25-31018/25*x+39547/50*x^2+5271/5*x^3)/(x^4+11/30*x^3-1
>
1/25*x^2-2/25*x+4/75),parfrac,x); 14400 432 354 1 + − − −18225 2 3 x + 2 2 x + 1 (5 x − 2) 5x−2
6.4.4
Het Logaritmisch gedeelte
Tot nog toe zijn we erin geslaagd het rationaal gedeelte en de afgeleide van het logaritmisch gedeelte van een primitieve van een rationale functie te bepalen, zonder algebra¨ısche getallenextensies in te voeren. Wat nu verder het logaritmisch gedeelte betreft, weten we uit de na¨ıeve aanpak (§ 4.1) dat volledige factorisatie van de noemer tot een logaritmisch resultaat leidt, echter met invoering van algebra¨ısche getallenextensies die soms overbodig zijn om het uiteindelijk primitiveringsresultaat neer te schrijven. Vandaar het probleem om een algoritme te vinden dat het logaritmisch gedeelte bepaalt met enkel die algebra¨ısche getallenextensies die nodig zijn voor het eindresultaat. Dit probleem werd opgelost door Rothstein (1976) en door Trager (1976). Vertrek van het resultaat : Z n p2 X = ci log(vi ) q2 i=1 waarbij de ci constant zijn en de vi polynomen. We kunnen veronderstellen dat de vi kwadratenvrij en twee aan twee onderling ondeelbaar zijn en de constanten ci twee aan twee verschillend. Eventueel dient
270HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES daartoe gebruik gemaakt van logv 2 = 2logv c1 log(uv) + c2 log(uw) = (c1 + c2 )logu + c1 logv + c2 logw c logu + c logv = c log(uv). Na afleiding komt er :
n v0 p2 X = ci i q2 vi i=1
waarbij in het rechterlid geen enkele term kan vereenvoudigd worden (wegens elke vi kwadratenvrij) en geen termen tegenover elkaar kunnen wegvallen (wegens de vi twee aan twee onderling ondeelbaar). Dit betekent uiteraard dat de vi precies alle factoren van q2 uitmaken : q2 =
n Y
vi ,
i=1
waaruit, na afleiding : q20
=
n X
n Y
vi0
i=1
vj =
n X i=1
j=1,j6=i
Verdrijven van de noemers in de uitdrukking voor p2 =
n X i=1
ci vi0
n Y
vi0 vˆi .
vj =
p2 q2
n X
levert :
ci vi0 vˆi .
i=1
j=1,j6=i
Met behulp van deze uitdrukkingen voor p2 en q20 komt er achtereenvolgens : vk = GGD(0, vk ) = GGD(p2 −
n P
i=1
ci vi0 vˆi , vk )
= GGD(p2 − ck vk0 vˆk , vk ) = GGD(p2 − ck
n P
i=1
vi0 vˆi , vk )
= GGD(p2 − ck q20 , vk ).
Voor l 6= k vinden we achtereenvolgens GGD(p2 − ck q20 , vl ) = GGD(
n P
i=1
ci vi0 vˆi − ck
n P
i=1
vi0 vˆi , vl )
= GGD(cl vl0 vˆl − ck vl0 vˆl , vl ) = 1.
Deze tussenresultaten leiden tot : GGD(p2 − ck q20 , q2 ) = GGD(p2 − ck q20 , =
n Q
i=1
GGD(p2 −
n Q
vi ) i=1 ck q20 , vi )
= GGD(p2 − ck q20 , vk ) = vk . Dit impliceert dat als we de constanten ck kennen, de factoren vk kunnen berekend worden m.b.v. het algoritme voor een GGD. Rest dus nog de constanten ck te
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
271
bepalen. Daartoe merken we op dat GGD(p2 − dq20 , vk ) = GGD( = 1,
n P
(ci − d)vi0 vˆi , vk )
i=1
tenzij d = ck , in welk geval deze grootste gemene deler gelijk is aan vk . Zo zal ook GGD(p2 − dq20 , q2 ) = GGD(p2 − dq20 , =
n Q
k=1
=1
GGD(p2 −
n Q
vk ) k=1 dq20 , vk )
tenzij d gelijk is aan een van de ck -co¨effici¨enten, m.a.w. de ck ’s zijn precies deze constanten waarvoor GGD(p2 − dq20 , q2 ) 6= 1. Nu is de resultante van de polynomen (p2 − dq20 ) en (q2 ) : resx (p2 − dq20 , q2 ) een polynoom in d, dat nul is als en slechts dan als de GGD van beide termen niet 1 is. Om de constanten ck te bepalen, volstaat het dus de resultante resx (p2 − dq20 , q2 ) te berekenen [dit vereist geen algebra¨ısche getallenextensies] en de nulpunten ervan te bepalen. In het algemeen kan men de volgende stelling bewijzen :
STELLING Gegeven is een differentiaalveld K(x) over het constantenveld K. Verder zijn p en q veeltermen in K[x] die onderling ondeelbaar zijn en waarbij q monisch en kwadratenrij is; ook is deg(p) <deg(q). Onderstel dat K ∗ het minimale algebra¨ısch extensieveld van K is waarvoor Z
n p X = c∗i log(vi∗ ) q i=1
met c∗i ∈ K ∗ , vi∗ ∈ K ∗ [x]. Dan is : K ∗ = K(c∗1 , . . . , c∗n ) waarbij de c∗j (1 ≤ j ≤ n) de verschillende wortels zijn van de veelterm R(d) = resx (p − dq 0 , q) ∈ K[d], m.a.w. K ∗ is het splitsend veld van R(d) ∈ K[d].
272HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES VOORBEELD 1 p = 1, q = x2 − 2
p enkel een logaritmisch deel q bevatten (op de klassieke additieve constanten na, uiteraard); de horowitzmethode is dus overbodig. Aangezien q kwadratenvrij is, zal de primitieve van
∗
R(d) = resx (1 − d(2x), x2 − 2) = −8d2 + 1 ∈ Q[d]
∗ De complete factorisatie van R(d) in Q[d] is 1 R(d) = −8(d2 − ) ∈ Q[d]. 8 R(d) is niet te factoriseren over het constantenveld Q. Het splitsend veld van R(d) is Q(α), met 1 α = RootOf(d2 − ) 8 en de complete factorisatie van R(d) over Q(α) is : R(d) = −8(d − α)(d + α) ∈ Q(α)[d]. De nulpunten van R(d) zijn : c1 = α, c2 = −α ∗ De corresponderende logaritme-argumenten zijn : v1 = GGD(1 − α(2x), x2 − 2) = GGD(1 − 2αx, x2 − 2) = x − 4α ∈ Q(α)[x] v2 = GGD(1 + 2αx, x2 − 2) = x + 4α ∈ Q(α)[x] ∗
Z
x2
1 = αlog(x − 4α) − αlog(x + 4α) −2 ∈ Q(α)(x, log(x − 4α), log(x + 4α))
met α = RootOf(d2 − 18 ).
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
273
Opmerking. Indien het algebra¨ısch getal α niet uitdrukbaar ware geweest in termen van wortelvormen, dan zou dit resultaat de best mogelijke primitieve in gesloten gedaante zijn geweest. Maar hier is het mogelijk te schrijven : α=
1√ 2 4
zodat uiteindelijk : R
1 x2 −2
√ √ √ √ = 14 2log(x − 2) − 14 2log(x + 2) √ √ √ ∈ Q( 2)(x, log(x − 2), log(x + 2)).
OEFENING 1. Behandel op analoge wijze als VOORBEELD de formele integratie Z
x2
1 +2
en vergelijk met het in 6.4.1 bekomen resultaat.
VOORBEELD 2 p = 5x4 + 1, q = x5 + x + 1 Ook hier weer enkel een logaritmisch deel. ∗ R(d) = resx ((5x4 + 1) − d(5x4 + 1), x5 + x + 1) = resx ((5 − 5d)x4 + 1 − d, x5 + x + 1) = 3381(1 − d)5 ∈ Q[d]
∗ Nulpunten van R(d) : c = 1 ∈ Q ∗ v = GGD((5x4 + 1) − (1)(5x4 + 1), x5 + x + 1) = GGD(0, x5 + x + 1) = x5 + x + 1 ∈ Q(x) Resultaat :
Z
5x4 + 1 = log(x5 + x + 1) ∈ Q(x, log(x5 + x + 1)) x5 + x + 1
274HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES OEFENING 2 Werk VOORBEELD 1 uit 6.4.3 af met de rothstein-tragermethode.
OEFENING 3 Herneem de OEFENING uit 6.4.3 en werk af met de rothstein-tragermethode.
OEFENING 4 Bepaal een primitieve in gesloten gedaante van de rationale functie 7x13 + 10x8 + 4x7 − 7x6 − 4x3 − 4x2 + 3x + 3 . x14 − 2x8 − 2x7 − 2x4 − 4x3 − x2 + 2x + 1 Er zal blijken dat slechts ´e´en enkele algebra¨ısche getallenextensie van de tweede graad vereist is. Daarentegen is het splitsend veld van de veelterm in de noemer een algebra¨ısche getallenveld van hoge orde over Q! In Maple: 6.4.4 Methode van Rothstein-Trager (voor het logaritmisch gedeelte) > restart;
>
rothstein_trager_poly := proc(r,q,x)
>
(1998) local q_,vgl,fact,i,aantal,verz; q_ := diff(q,x); vgl := resultant(r-d*q_,q,x); fact := factors(vgl); aantal := 0; for i from 1 to nops(fact[2]) do aantal := aantal + fact[2][i][2]; od; verz := {}; if nops(fact[2])<>degree(vgl,d) or aantal<>degree(vgl,d) then for i from 1 to nops(fact[2]) do
> > > > > > > > > >
#Sandy Van Wonterghem
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE >
if degree(fact[2][i][1],d)<>1 then
>
verz := verz union {fact[2][i][1]}; fi; od; fi; verz := convert(verz,list); end:
> > > > >
275
De procedure rothstein trager poly bepaalt alle polynomen waarvan we de nulpunten moeten toevoegen aan de verzameling van de rationale getallen (dus bepaalt alle algebrasche getallenextensies) zodanig dat we de beschouwde rationale functie volledig kunnen primitiveren. Deze procedure heeft drie argumenten : 1. & 2. de beschouwde polynomen 3. de veranderlijke waarin deze polynomen worden uitgedrukt
Het resultaat van de procedure rothstein trager poly is een lijst van polynomen uitgedrukt in de veranderlijke d.
>
rothstein_trager := proc(r,q,x,ext)
>
(1998) local q_,vgl,fact,aantal,i,c,v,pr; q_ := diff(q,x); vgl := resultant(r-d*q_,q,x); fact := factors(vgl); aantal := 0; pr := 0; for i from 1 to nops(fact[2]) do aantal := aantal + fact[2][i][2]; od; if nops(fact[2])=degree(vgl,d) or aantal=degree(vgl,d) then for i from 1 to nops(fact[2]) do
> > > > > > > > > >
#Sandy Van Wonterghem
276HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES > > > > > > > > > > > > >
c||i := -1*subs(d=0,fact[2][i][1]); v||i := gcd(r-c||i*q_,q); pr := pr + c||i*log(v||i); od; else fact := factors(vgl,ext); for i from 1 to nops(fact[2]) do c||i := -1*subs(d=0,evala(fact[2][i][1])); v||i := evala(Gcd(r-c||i*q_,q)); pr := pr + c||i*log(v||i); od; fi; pr; end:
De procedure rothstein trager heeft vier argumenten :
1. & 2. de beschouwde polynomen
3. de veranderlijke waarin deze polynomen worden uitgedrukt
4. de naam of de verzameling van de namen van de algebrasche extensies die moeten toegevoegd worden aan de verzameling van de rationale getallen.
Opmerking :
Indien we geen algebrasche extensie toevoegen aan Q, kunnen we het vierde argument weglaten. Men kan eventueel ook een fictieve naam ingeven.
Voorbeeld 1 : (zie cursus)
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE f=
277
1 x2 −2
>
p := 1; p := 1
>
q := x^2-2;
>
q := x2 − 2 rothstein_trager_poly(p,q,x); 1 [d2 − ] 8 alias(alpha=RootOf(d^2-1/8)); α prim := rothstein_trager(p,q,x,alpha); prim := α ln(−4 α + x) − α ln(x + 4 α) ### WARNING: allvalues now returns a list of symbolic values instead
>
of a sequence of lists of numeric values
>
allvalues(alpha);
>
>
>
1√ 1√ 2, − 2 4 4 Controle : > evala(diff(prim,x)); 1 (−4 α + x) (x + 4 α) Opmerking :
Indien men genteresseerd is in een aantal tussenresultaten (zoals v1 en v2 ), dan kan men deze terugvinden in Maple door aan de variabele printlevel de waarde 8 toe te kennen : > printlevel := 8; printlevel := 8 > rothstein_trager(p,q,x,alpha); {--> enter rothstein_trager, args = 1, x^2-2, x, RootOf(8*_Z^2-1)
q := 2 x vgl := −8 d2 + 1 1 fact := [−8, [[d2 − , 1]]] 8 aantal := 0
278HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES pr := 0 aantal := 1 fact := [−8, [[d − α, 1], [d + α, 1]]] c1 := α v1 := −4 α + x pr := α ln(−4 α + x) c2 := −α v2 := x + 4 α pr := α ln(−4 α + x) − α ln(x + 4 α) α ln(−4 α + x) − α ln(x + 4 α)
<-- exit rothstein_trager (now at top level) = RootOf(8*_Z^2-1)*ln(-4*RootOf(8*_Z^2-1)+x)-RootOf(8*_Z^2-1)*ln(x+4*Roo tOf(8*_Z^2-1))} >
α ln(−4 α + x) − α ln(x + 4 α) printlevel := 0; printlevel := 0
Oefening 1 : (zie cursus) f=
1 x2 +2
>
alias(alpha=alpha);
Opmerking :
De voorgaande ’waarde’ van α wordt eerst vernietigd ! > p := 1; p := 1 > q := x^2+2; >
>
>
q := x2 + 2 rothstein_trager_poly(p,q,x); 1 [d2 + ] 8 alias(alpha=RootOf(d^2+1/8)); α prim := rothstein_trager(p,q,x,alpha); prim := α ln(4 α + x) − α ln(−4 α + x)
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE >
### WARNING: allvalues now returns a list of symbolic values instead
>
of a sequence of lists of numeric values
>
allvalues(alpha); 1 √ −1 √ I 2, I 2 4 4
Controle : > evala(diff(prim,x)); 1 (4 α + x) (−4 α + x)
Voorbeeld 2 : (zie cursus) R
5 x4 +1 x5 +x+1
> >
dx
alias(alpha=alpha); r := 5*x**4+1; r := 5 x4 + 1
>
>
>
p := x**5+x+1; p := x5 + x + 1 rothstein_trager_poly(r,p,x); [] prim := rothstein_trager(r,p,x); prim := ln(x5 + x + 1)
Controle : > diff(prim,x); 5 x4 + 1 x5 + x + 1
Oefening 2 : (zie cursus) R
279
1 x −6 3 (x+2)(x2 +2)
dx
280HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES >
r := 1/3-x/6; r :=
>
1 1 − x 3 6
p := (x+2)*(x^2+2);
>
p := (x + 2) (x2 + 2) rothstein_trager_poly(r,p,x); 1 1 + d + d2 ] [ 288 9 alias(beta=RootOf(1/288+1/9*d+d^2)); β prim := rothstein_trager(r,p,x,beta); 1 1 prim := (− − β) ln(x − 4 − 72 β) + β ln(x + 4 + 72 β) + ln(x + 2) 9 9 ### WARNING: allvalues now returns a list of symbolic values instead
>
of a sequence of lists of numeric values
>
allvalues(beta);
>
>
>
−
1 √ 1 √ 1 1 + I 2, − − I 2 18 72 18 72
Controle : > evala(diff(prim,x)); 1 −2 + x − 6 (x + 2) (x + 4 + 72 β) (x − 4 − 72 β) > testeq(%,r/p); true
Oefening 3 : (zie cursus) R
36 x2 +1167 x+ 3549 2 2
2 x3 + 2330x − 215x − 15
> >
dx
alias(beta=beta); r := 36*x^2+1167*x+3549/2; 3549 2 p := x^3+(23/30)*x^2-(2/15)*x-(2/15); 2 2 23 2 x − x− p := x3 + 30 15 15 rothstein_trager_poly(r,p,x); r := 36 x2 + 1167 x +
>
>
6.4. FORMELE INTEGRATIE VAN EEN RATIONALE FUNCTIE
>
281
[] prim := rothstein_trager(r,p,x); 91125 2 1 37451 2 prim := ln( + x) − 8000 ln( + x) + ln(− + x) 16 3 2 16 5
Controle : > diff(prim,x); 37451 91125 1 8000 − + 16 2 2 1 16 +x +x − +x 3 2 5 >
testeq(%,r/p); true
Oefening 4 : (zie cursus) R
7 x13 +10 x8 +4 x7 −7 x6 −4 x3 −4 x2 +3 x+3 x14 −2 x8 −2 x7 −2 x4 −4 x3 −x2 +2 x+1
>
>
>
>
>
dx
r := 7*x**13+10*x**8+4*x**7-7*x**6-4*x**3-4*x**2+3*x+3; r := 7 x13 + 10 x8 + 4 x7 − 7 x6 − 4 x3 − 4 x2 + 3 x + 3 p := x**14-2*x**8-2*x**7-2*x**4-4*x**3-x**2+2*x+1; p := x14 − 2 x8 − 2 x7 − 2 x4 − 4 x3 − x2 + 2 x + 1 rothstein_trager_poly(r,p,x); 1 [d2 − d − ] 4 alias(gamma=RootOf(d^2-d-1/4)); γ prim := rothstein_trager(r,p,x,gamma);
prim := γ ln(x7 + x2 − 2 γ x2 − 2 γ x − 1) + (1 − γ) ln(x7 − x2 + 2 γ x2 − 2 x + 2 γ x − 1) > ### WARNING: allvalues now returns a list of symbolic values instead >
of a sequence of lists of numeric values
>
allvalues(gamma); 1 1√ 1 1√ 2, − 2 + 2 2 2 2
Controle :
282HOOFDSTUK 6. FORMELE INTEGRATIE VAN RATIONALE FUNCTIES >
simplify(diff(prim,x));
>
7 x13 + 10 x8 + 4 x7 − 7 x6 − 4 x3 − 4 x2 + 3 x + 3 x14 − 2 x8 − 2 x7 − 2 x4 − 4 x3 − x2 + 2 x + 1 alias(gamma=gamma);
Hoofdstuk 7 Formele Integratie van elementaire functies 7.1
Inleiding
In hoofdstuk 6 is de klasse van de z.g. elementaire functies reeds (ruwweg) omschreven. In een klassiek college “differentiaal- en integraalrekening” (calculus) gaat men bij een gegeven elementaire functie op zoek naar een primitieve in dezelfde klasse. Dit gebeurt deels heuristisch, deels met tabellen, deels ook algoritmisch [de z.g. klassen van primitieven]. Als men in dit opzet niet slaagt, dan heeft men uiteraard nog niet aangetoond dat er geen elementaire primitieve bestaat; meer zelfs, velen zijn er zich niet van bewust dat er voor dit probleem een eindige beslissingsprocedure bestaat. Vanuit algoritmisch standpunt bekeken is de veelheid aan (notaties van) functies in de klasse van elementaire functies een slechte zaak. Voor een CAS is b.v. Z
√ √ √ √ 2 2 1 = i log(x + i log(x − i 2) − i 2) x2 + 2 4 4
te prefereren boven Z
x2
1 1 x = √ arctan √ . +2 2 2
We zullen dus steevast de elementaire functies uitdrukken m.b.v. exponenti¨elen, logaritmen en algebra¨ısche functies, en het constantenveld uitbreiden met het algebra¨ısch getal i.
7.2
Elementaire functievelden 283
284HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
7.2.1
DEFINITIES
Gegeven zijn een differentiaalveld F en een differentiaal extensieveld G van F . (i) θ ∈ G is logaritmisch over F als er een u 6= 0 in F bestaat waarvoor u0 θ0 = ; men noteert : θ = log(u); u θ0 = u0 ; (ii) θ ∈ G is exponentieel over F als er een u ∈ F bestaat waarvoor θ men noteert : θ = exp(u); (iii) θ ∈ G is algebra¨ısch over F als er een polynoom p ∈ F [z] bestaat waarvoor p(θ) = 0; (iv) θ ∈ G is transcendent over F als θ niet algebra¨ısch is over F .
7.2.2
DEFINITIES
Gegeven zijn een differentiaalveld F en een differentiaal extensieveld G van F . (i) G is een elementaire extensie van F als G van de vorm is : G = F (θ1 , . . . , θn ) waarbij elke θi logaritmisch, exponentieel of algebra¨ısch is over F (θ1 , . . . , θi−1 ), i = 1, . . . , n. (ii) G is een transcendente elementaire extensie van F als G van de vorm is : G = F (θ1 , . . . , θn ) waarbij elke θi logaritmisch of exponentieel een transcendent is over F (θ1 , . . . , θi−1 ), i = 1, . . . , n.
7.2.3
DEFINITIES
Neem K(x) een differentiaalveld van rationale functies over een constantenveld K dat een deelveld is van C. Als G een transcendente elementaire extensie is van K(x), dan noemt men G een veld van transcendente elementaire functies. Als G een elementaire extensie is van K(x), dan noemt men G een veld van elementaire functies.
7.2. ELEMENTAIRE FUNCTIEVELDEN
7.2.4
285
VOORBEELD 1
Beschouw het differentiaalveld Q(x) van de rationale functies met rationale co¨effici¨enten; het constantenveld is Q. Beschouw de functie x f = exp(x) + exp(2x) + exp( ). 2 Stel x θ1 = exp(x), θ2 = exp(2x), θ3 = exp( ); 2 dan is f = θ1 + θ2 + θ3 ∈ Q(x, θ1 , θ2 , θ3 ). We merken op dat
θ10 ∗ = x0 , x ∈ Q(x), zodat θ1 exponentieel is over Q(x) θ1 ∗
θ20 = (2x)0 , 2x ∈ Q(x), zodat θ2 exponentieel is over Q(x, θ1 ) θ2
∗
θ30 x x = ( )0 , ∈ Q(x), zodat θ3 exponentieel is over Q(x, θ1 , θ2 ) θ3 2 2
Maar θ2 − θ12 = 0
zodat θ2 ook algebra¨ısch is over Q(x, θ1 ), meer zelfs θ2 behoort tot Q(x, θ1 ) zodat Q(x, θ1 , θ2 ) = Q(x, θ1 ). Er bestaat dus een simpeler representatie van f , nl. f = θ1 + θ12 + θ3 ∈ Q(x, θ1 , θ3 ). Maar θ32 − θ1 = 0
zodat θ3 ook algebra¨ısch is over Q(x, θ1 ), maar nu is θ3 ∈ / Q(x, θ1 ). Uiteraard is dan ook θ1 algebra¨ısch over Q(x, θ3 ) en bovendien is θ1 ∈ Q(x, θ3 ) zodat Q(x, θ1 , θ3 ) = Q(x, θ3 ). De simpelste representatie van f is dus : f = θ32 + θ34 + θ3 ∈ Q(x, θ3 ). Q(x, θ3 ) is een transcendente elementaire extensie van Q(x).
286HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
7.2.5
VOORBEELD 2
Beschouw opnieuw het differentiaalveld Q(x). De functie g=
q
log(x2 + 3x + 2)(log(x + 1) + log(x + 2))
kan als volgt gepresenteerd worden : θ1 = log(x2 + 3x + 2) logaritmisch over Q(x) θ2 = log(x + 1) logaritmisch over Q(x, θ1 ) θ3 = log(x + 2) logaritmisch over Q(x, θ1 , θ2 ) 2 θ4 − θ1 (θ2 + θ3 ) = 0, θ4 algebra¨ısch over Q(x, θ1 , θ2 , θ3 ) g = θ4 ∈ Q(x, θ1 , θ2 , θ3 ). We merken nu echter op dat g0 =
(x2 + 3x + 2)0 2x + 3 = x2 + 3x + 2 x2 + 3x + 2
zodat de simpelste representatie voor g luidt : g = θ1 ∈ Q(x, θ1 )
7.2.6
VOORBEELD 3
Met hetzelfde differentiaalveld Q(x) beschouwen we de functie h = exp(log(x)/2). Deze functie h kan als volgt gerepresenteerd worden : θ1 = log(x) logaritmisch over Q(x) θ2 = exp(θ1 /2) exponentieel over Q(x, θ1 ) h = θ2 ∈ Q(x, θ1 , θ2 ). Maar θ22 − x = 0
zodat θ2 algebra¨ısch is over Q(x) (maar wel θ2 ∈ / Q(x)). De eenvoudigste representatie van h is dus h = θ2 ∈ Q(x, θ2 ) met θ22 − x = 0. Uit deze voorbeelden moge duidelijk blijken dat de begrippen logaritmische en exponenti¨ele extensie enerzijds en algebra¨ısche extensie anderzijds, elkaar niet uitsluiten. Vandaar de invoering van een nieuw extensie-begrip : de monomiale extensie, met bijhorende structuurstelling ter herkenning ervan.
287
7.2. ELEMENTAIRE FUNCTIEVELDEN
7.2.7
DEFINITIE
Gegeven zijn een differentiaalveld F en een differentiaal extensieveld G van F . Een element θ ∈ G heet monomiaal over F als terzelfdertijd : (i) F en F (θ) hebben hetzelfde constantenveld (ii) θ is transcendent over F (iii) θ is logaritmisch of exponentieel over F . Voor een bewijs van de volgende structuurstelling verwijzen we naar R. Risch : “Algebraic Properties of the Elementary Functions of Analysis”, Amer. Jour. of Math. 101, pp. 743-759 (1979).
7.2.8
STRUCTUURSTELLING
Gegeven zijn een differentiaalveld F (x) met constantenveld F en een differentiaal extensieveld F (x, θ1 , . . . , θn ) van F (x) met hetzelfde constantenveld F . Onderstel dat elke θi aan ´e´en van de volgende voorwaarden voldoet (i = 1, . . . , n) : ∗ θi is algebra¨ısch over F (x, θ1 , . . . , θi−1 ) ∗ θi = log(ui ) met ui ∈ F (x, θ1 , . . . , θi−1 ) ∗ θi = exp(wi ) met wi ∈ F (x, θ1 , . . . , θi−1 ) Dan geldt : (i) g = log(f ) met f ∈ F (x, θ1 , . . . , θn ) − F is monomiaal over F (x, θ1 , . . . , θn ), als en slechts als er geen lineaire combinatie met k ∈ Z0 , ki ∈ Z, ei ∈ Z k · log(f ) +
X i
ki · log(ui) +
X
ei wi
i
kan gevonden worden die te schrijven valt als de logaritme van een constante q ∈ F; (ii) f = exp(g) met g ∈ F (x, θ, . . . , θn ) − F is monomiaal over F (x, θ1 , . . . , θn ), als en slechts dan als er geen lineaire combinatie met k ∈ Z0 , ki ∈ Z, li ∈ Z X i
ki · log(ui ) + k · g +
X i
−li · wi
kan gevonden worden die te schrijven valt als de logaritme van een constante q ∈ F.
288HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
7.2.9
VOORBEELD 1
• differentiaalveld Q(x) √ √ • g = log( x2 + 1 + x) − log( x2 + 1 − x) √ • θ1 = x2 + 1, θ12 − x2 − 1 = 0, θ1 algebra¨ısch over Q(x) • θ2 = log(θ1 + x) ? is θ2 monomiaal over Q(x, θ1 ) ? bestaat er k ∈ Z0 waarvoor k · log(θ1 + x) = logq, q ∈ Q (θ1 + x)k = q, q ∈ Q besluit : θ2 is monomiaal over Q(x, θ1 ) • θ3 = log(θ1 − x) ? is θ3 monomiaal over Q(x, θ1 , θ2 ) ? bestaan er k ∈ Z0 en k2 ∈ Z waarvoor k · log(θ1 − x) + k2 · log(θ1 + x) = logq, q ∈ Q (θ1 − x)k (θ1 + x)k2 ∈ Q voor k = k2 = 1 vinden we (θ1 − x)(θ1 + x) = θ12 − x2 = 1 ∈ Q zodat θ3 niet monomiaal is over Q(x, θ1 , θ2 ); die betekent dat θ3 geen nieuwe onafhankelijke transcendente logaritmische extensie toevoegt aan Q(x, θ1 , θ2 ); trouwens : θ3 = log(θ1 − x) = −log(θ1 + x) = −θ2 ∈ Q(x, θ1 , θ2 ) • g = 2θ2 ∈ Q(x, θ1 , θ2 )
7.2.10
VOORBEELD 2
(cfr. 7.2.4) • differentiaalveld Q(x) • θ1 = exp(x), w1 = x ∈ Q(x)
7.2. ELEMENTAIRE FUNCTIEVELDEN
289
• θ2 = exp(2x) ? is θ2 monomiaal over Q(x, θ1 ) ? bestaat er k ∈ Z0 , l ∈ Z waarvoor k2x + lw1 = logq, q ∈ Q (2k + l)x = logq, q ∈ Q voor k = 1, l = −2 is (2k + l)x = log(1), zodat θ2 niet monomiaal is over Q(x, θ1 ); trouwens θ2 = θ12 ∈ Q(x, θ1 ) • θ3 = exp( x2 ) ? is θ3 monomiaal over Q(x, θ1 ) ? bestaan er k ∈ Z0 en l1 ∈ Z waarvoor
x k + l1 w1 = log(q), q ∈ Q 2 k ( + l)x = log(q), q ∈ Q 2
voor k = 2, l = −1 is ( k2 + l)x = 0 zodat θ3 niet monomiaal is over Q(x, θ1 ); trouwens : 1 1 θ32 − θ1 = 0, θ3 = θ12 ∈ Q(x, θ1 , θ12 )
7.2.11
VOORBEELD 3
(cfr. 7.2.5) • differentiaalveld Q(x) • θ1 = log(x2 + 3x + 2), u1 = x2 + 3x + 2 ∈ Q(x) • θ2 = log(x + 1) ? bestaan er k ∈ Z0 , k1 ∈ Z waarvoor k · log(x + 1) + k1 · log(x2 + 3x + 2) = logq, q ∈ Q 1 2x + 3 k· + k1 ( 2 )=0 x+1 x + 3x + 2 k(x + 2) + k1 (2x + 3) = 0 (k + 2k1 )x + (2k + 3k1 ) = 0 antwoord : neen, zodat θ2 monomiaal is over Q(x, θ1 ). • θ3 = log(x + 2) ? bestaan er k ∈ Z0 en k1 , k2 ∈ Z waarvoor k · log(x + 2) + k1 · log(x2 + 3x + 2) + k2 · log(x + 1) = logq, q ∈ Q (x + 2)k (x2 + 3x + 2)k1 (x + 1)k2 = q, q ∈ Q
290HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES dit is inderdaad zo voor b.v. k = 1, k1 = −1, k2 = 1 zodat θ3 niet monomiaal is over Q(x, θ1 , θ2 ); trouwens : θ3 = θ1 − θ2 ∈ Q(x, θ1 , θ2 );
7.2.12
VOORBEELD 4
(cfr. 7.2.6)
• differentiaalveld Q(x) • θ1 = log(x), u1 = x ∈ Q(x) • θ2 = exp(θ1 /2) ? bestaan er k ∈ Z0 , k1 ∈ Z waarvoor θ1 k + k1 log(x) = logq, q ∈ Q 2 k ( + k1 )log(x) = logq, q ∈ Q 2 antwoord : voor k = 2, k1 = −1, is dit voldaan; dus is θ2 niet monomiaal over Q(x, θ1 ); trouwens : θ22 − x = 0
7.2.13
VOORBEELD 5
• differentiaalveld Q(x) 1
• θ1 = x 2 voldoet aan θ12 − x = 0, dus is θ1 algebra¨ısch over Q(x). • θ2 = log(x) ? bestaan er k ∈ Z0 waarvoor klog(x) = logq, q ∈ Q antwoord : neen, dus is θ2 monomiaal over Q(x, θ1 ). • θ3 = exp(θ2 /2) ? bestaan er k ∈ Z0 , k2 ∈ Z waarvoor k θ22 + k2 log(x) = logq, q ∈ Q voldaan voor k = 2, k2 = −1, dus θ3 niet monomiaal over Q(x, x1/2 , log(x)).
7.3. AFLEIDING VAN ELEMENTAIRE FUNCTIES
7.3
291
Afleiding van elementaire functies
In de vorige paragraaf werd het begrip elementair functieveld ingevoerd als een differentiaal extensieveld van het veld K(x) van rationale functies, waarbij elke extensie van het type logaritmisch, exponentieel of algebra¨ısch is. Het zou eenvoudig zijn voor het constantenveld K steeds het algebra¨ısch gesloten veld C te nemen, zodat nooit algebra¨ısche getallenextensies zouden vereist zijn bij de formele integratie. Aangezien in CAS met exacte uitdrukkingen gewerkt wordt, zal het constantenveld K echter van de vorm Q(α1 , . . . , αk ) zijn, waarbij de algebra¨ısche getallen α1 , . . . , αk opgedrongen worden door het behandelde formele integratieprobleem. Het vraagstuk van de formele integratie van een elementaire functie kan dan als volgt gesteld worden :
Gegeven een elementaire functie f , bepaal eerst een elementair functieveld F (x) waartoe f behoort : f ∈ F (x) = Q(α1 , . . . , αk )(x, θ1 , . . . , θn ); bepaal dan de additionele vereiste extensies zodanig dat de primitieve g van f behoort tot het nieuwe elementaire functieveld Q(α1 , . . . , αk , . . . , αk+l )(x, θ1 , . . . , θn , . . . θn+m ) en bepaal een expliciete gedaante van g, of, anderzijds, bewijs dat er geen dergelijke elementaire functie g bestaat.
Met het oog op het opstellen van een volledige beslissingsprocedure, gaan we eerst onderzoeken welke de mogelijke gedaanten zijn van dergelijke primitieven. Dit vereist de kennis van de manier waarop een differentiaaloperator inwerkt op elementaire functies. We behandelen de eenvoudige gevallen waarin er slechts ´e´en extensie optreedt.
7.3.1
STELLING: (Afleiding van een logaritmisch polynoom)
Gegeven is een differentiaalveld F (x) en een differentiaal extensieveld F (x, θ) met hetzelfde constantenveld, waarbij θ transcendent logaritmisch is over F (x). Beschouw het polynoom p(θ) ∈ F (x)[θ] met positieve graad; er geldt : (i) p(θ)0 ∈ F (x)[θ]
292HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES (ii) als de hoogstegraadsco¨effici¨ent van p(θ) constant is, dan is deg(p(θ)0 ) = deg(p(θ)) − 1 (iii) als de hoogstegraadsco¨effici¨ent van p(θ) niet constant is, dan is deg(p(θ)0 ) = deg(p(θ)).
7.3.2
STELLING: (Afleiding van een exponentieel polynoom)
Gegeven is een differentiaalveld F (x) en een differentiaal extensieveld F (x, θ) met hetzelfde constantenveld, waarbij θ transcendent exponentieel is over F (x). Beschouw het polynoom p(θ) ∈ F (x)[θ] met positieve graad; er geldt : (i) p(θ)0 ∈ F (x)[θ] (ii) deg(p(θ)0 ) = deg(p(θ)) (iii) p(θ) deelt p(θ)0 als en slechts dan als p van de vorm is : p(θ) = hθn , h ∈ F, n ∈ Z (iv) als p(θ) = hθn , h ∈ F, h 6= 0, n ∈ Z0 , dan is ˜ n , h ∈ F, ˜h 6= 0. p(θ)0 = hθ
7.3.3
STELLING: (Afleiding van een algebra¨ısche functie)
Gegeven is een differentiaalveld F (x) en een differentiaal extensieveld F (x, θ) met hetzelfde constantenveld, waarbij θ algebra¨ısch is over F (x) met minimaal polynoom : p(z) =
N +1 X j=0
pj (x)z j ∈ F (x)[z], pN +1 = 1.
Voor de afgeleide van θ geldt dan : θ0 = − met a(z) =
N X
j=0
0 j
a(θ) ∈ F (x, θ) b(θ)
pj (x) z ∈ F (x)[z], b(z) =
N X
(j + 1)pj+1(x)z j ∈ F (x)[z]
j=0
293
7.4. HET LIOUVILLEPRINCIPE
7.4
Het liouvilleprincipe
In het vorig hoofdstuk werd aangetoond dat een rationale functie een primitieve bezit in de klasse van de transcendante elementaire functies, als een som van een rationale functie en een eindige lineaire combinatie van logaritmische extensies, waarbij eventueel het constantenveld moet uitgebreid worden met algebra¨ısche getallenextensies.
Een veralgemening van dit resultaat tot het probleem van de formele integratie van elementaire functies, werd geformuleerd door Liouville in 1833; het is de basis voor de algoritmische benadering van dit probleem.
7.4.1
STELLING: (Principe van Liouville)
Gegeven is een differentiaalveld F (x) met constantenveld K. Onderstel dat de functie f ∈ F (x) een primitieve g bezit in een elementair extensieveld G van F (x) met hetzelfde constantenveld K. Dan bestaan er functies v0 , v1 , . . . , vm ∈ F (x) en constanten c1 , . . . , cm ∈ K waarvoor geldt dat g = v0 +
n X
j=1
cj · log(vj ).
Dit liouvilleprincipe kan scherper gesteld worden in de speciale gevallen waarbij slechts ´e´en enkele extensie vereist is bij de formele integratie [en geen algebra¨ısche getallenextensies].
7.4.2
STELLING: (liouvilleprincipe voor een simpele transcendente logaritmische extensie)
Gegeven is een constantenveld K, een elementair functieveld F (x) = K(x, θ1 , . . . , θn ) en een functie f ∈ F (x). Onderstel dat een primitieve g van f behoort tot het elementair extensieveld G van F (x), van de vorm : G = F (x, θ) = K(x, θ1 , . . . , θn , θ) met hetzelfde constantenveld K, waarbij θ transcendent logaritmisch is over F (x), m.a.w. er bestaat een functie u 6= 0 in K(x, θ1 , . . . , θn ) waarvoor θ = log(u). Dan bestaan er een functie v0 ∈ F (x) en een constante c ∈ K waarvoor geldt dat g = v0 + c · θ = v0 + c · log(u)
294HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
7.4.3
STELLING: (liouvilleprincipe voor een simpele transcendente exponenti¨ ele extensie)
Gegeven is een constantenveld K, een elementair functieveld F (x) = K(x, θ1 , . . . , θn ) en een functie f ∈ F (x). Onderstel dat een primitieve g van f behoort tot het elementair extensieveld G van F (x), van de vorm : G = F (x, θ) = K(x, θ1 , . . . , θn , θ) met hetzelfde constantenveld K, waarbij θ transcendent exponentieel is over F (x), m.a.w. er bestaat een u in K(x, θ1 , . . . , θn ) waarvoor θ = exp(u). Dan bestaat er een functie v0 ∈ F (x) waarvoor geldt dat g = v0 .
7.4.4
STELLING: (liouvilleprincipe voor een simpele algebra¨ısche extensie)
Gegeven is een constantenveld K, een elementair functieveld F (x) = K(x, θ1 , . . . , θn ) en een functie f ∈ F (x). Onderstel dat een primitieve g van f behoort tot het elementair extensieveld G van F (x), van de vorm G(x) = F (x, θ) met hetzelfde constantenveld K, waarbij θ algebra¨ısch is over F (x). Dan bestaat er een functie v0 ∈ F (x) waarvoor geldt dat g = v0 .
7.4.5
VOORBEELD K=Q F (x) = Q(x, exp(x2 )) 2x3 − 2x2 − 1 exp(x2 ) f= 2 (x −√ 1) x 1 1 g = exp(x2 ) (√ +√ ) 2 x−1 x+1
we constateren dat g ∈ Q(x, exp(x2 ), θ) met θ2 − x = 0, dus θ algebra¨ısch over Q(x, exp(x2 )). Het liouvilleprincipe stelt dat er een functie v0 ∈ Q(x, exp(x2 )) bestaat waarvoor g = v0 ; inderdaad : ! √ 1 1 x x √ +√ = 2 x−1 x+1 x−1
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES295 zodat g=
x exp(x2 ) ∈ Q(x, exp(x2 )). x−1
Opmerking : het liouvilleprincipe garandeert geenszins het bestaan van een primitieve van een elementaire functie, die behoort tot een elementair extensieveld. Denk maar aan de functie 1 ∈ Q(x, log(x)). log(x)
7.5
Het rischalgoritme voor transcendente elementaire functies
We behandelen nu het formele integratieprobleem voor functies die behoren tot een transcendent elementair functieveld K(x, θ1 , . . . , θn ); dit betekent dat K(x) een differentiaalveld is van rationale functies over een constantenveld K, deelveld van C, en dat elke θi transcendent logaritmisch of exponentieel is over K(x, θ1 , . . . , θi−1 )(i = 1, . . . , n). De beslissingsprocedure die zal opgesteld worden, zal ofwel een primitieve bepalen als die bestaat als elementaire functie, ofwel aantonen dat een elementaire primitieve niet bestaat. Het geval van formele integratie van functies die behoren tot een algemener elementair functieveld [met inbegrip van algebra¨ısche extensies] is moeilijker, en wordt hier niet behandeld. Gegeven een integrandum f , bestaat de eerste stap erin een transcendent elementair functieveld te bepalen waartoe f behoort. Zoals de voorbeelden uit §2 hebben uitgewezen, is dit niet triviaal. Alle circulaire, hyperbolische functies en hun inversen worden eerst uitgedrukt d.m.v. exponenti¨elen en logaritmen; dan moeten de algebra¨ısche verbanden tussen al deze exponenti¨ele en logaritmische functies opgespoord worden. We zullen aannemen dat we erin geslaagd zijn een zuiver transcendent elementair functieveld te bepalen waartoe het integrandum behoort. Bij de stellingen van de vorige paragraaf werd steeds ondersteld dat bij het differentiaal extensieveld waartoe de primitieve behoort, het constantenveld gelijk bleef aan het oorspronkelijke; deze technische kwestie zal door het algoritme aangepast worden in die zin dat daar waar nodig het constantenveld zal ge¨extendeerd worden. De basisidee bij het opstellen van het algoritme is het opvatten van het integrandum als een rationale functie in de transcendente symbolen θ1 , . . . , θn . Vandaar dat het algoritme voor transcendente functies nogal wat gelijkenissen zal vertonen met het algoritme voor de formele integratie van rationale functies uit hoofdstuk 6, i.h.b. met de hermite- en de rothstein-tragermethode. Het integrandum f ∈ K(x, θ1 , . . . , θn ) zullen we opvatten als een rationale functie
296HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES in de laatste transcendente extensie θn , die we θ noteren : f (θ) =
p(θ) ∈ K(x, θ1 , . . . , θn−1 ) = Fn−1 (θ), q(θ)
– waarbij de betekenis van de notatie Fn−1 (θ) duidelijk is – met p en q behorend tot Fn−1 [θ]; we gaan ervan uit dat f genormaliseerd is : GGD(p(θ), q(θ)) = 1 en dat q(θ) monisch is. Het algoritme zal recurrent te werk gaan, om te eindigen bij F0 = K(x), geval dat behandeld werd in hoofdstuk 6.
7.5.1
Het rischalgoritme voor transcendente logaritmische extensies
We beschouwen het geval waarbij θ logaritmisch is over Fn−1 ; er bestaat dus een functie u 6= 0 in Fn−1 waarvoor geldt dat θ0 =
u0 of θ = log(u). u
Met het euclidisch algoritme bepalen we r(θ) en p˜(θ), polynomen in Fn−1 [θ] waarvoor geldt : p(θ) = q(θ)˜ p(θ) + r(θ) waarbij ofwel r(θ) = 0 ofwel deg(r(θ)) <deg(q(θ)). Aldus is Z Z Z r(θ) . f (θ) = p˜(θ) + q(θ) Hierbij noemt men p˜(θ) het polynomiaal deel van f (θ), terwijl van f (θ) wordt genoemd.
r(θ) q(θ)
het rationaal deel
7.5.1.1 Logaritmische extensie : het rationaal deel Voor de formele integratie van het rationaal deel
r(θ) volgen we de hermitemethode. q(θ)
1. Start is de kwadraatvrije ontbinding van de noemer q(θ) ∈ Fn−1 [θ] : q(θ) =
k Y
i=1
qi (θ)i
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES297 waarbij elke qi (θ) monisch en kwadraatvrij is en GGD(qi (θ), qj (θ)) = 1 als i 6= j en deg(qi (θ)) > 0 en deg(qj (θ)) > 0. Merk hierbij op dat alle bewerkingen gebeuren in het polynoomdomein Fn−1 [θ]. Zo betekent o.m. qi (θ) kwadraatvrij dat GGD(qi (θ),
d qi (θ)) = 1. dθ
We zullen echter de sterkere conditie GGD(qi (θ), qi (θ)0 ) = 1 nodig hebben [met afleiding naar de variabele x], wat inderdaad vervuld is dankzij onderstaande hulpstelling. LEMMA Gegeven zijn een differentiaalveld F (x) met differentiaaloperator 0 waarvoor x0 = 1, en een differentiaal extensieveld F (x, θ) met hetzelfde constantenveld, waarbij θ transcendent en logaritmisch is over F (x). Voor een monisch polynoom a(θ) ∈ F (x)[θ] in het symbool θ, met positieve graad, waarvoor geldt dat d GGD(a(θ), a(θ)) = 1 dθ –m.a.w. a(θ) is kwadraatvrij in F (x)[θ] - geldt eveneens dat GGD(a(θ), a(θ)0 ) = 1 waarbij deze laatste ggd-operatie eveneens in F (x)[θ] wordt doorgevoerd. zonder bewijs 2. We knopen weer aan met de hermitemethode en splitsen het rationaal deel in partieelbreuken : k X i r(θ) X rij (θ) = q(θ) i=1 j=1 qi (θ)j waarbij alle rij (θ) ∈ Fn−1 [θ] en deg(rij (θ)) <deg(qi (θ)). 3. Zo zijn we in het reductieproces herleid tot de formele integratie van rij (θ) , j > 1. qi (θ)j Gelet op bovenstaande hulpstelling, kunnen we polynomen s(θ) en t(θ) in Fn−1 [θ] bepalen waarvoor s(θ)qi (θ) + t(θ)qi (θ)0 = rij (θ) waarbij deg(s(θ)) < deg(qi (θ)0 )
298HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES en deg(t(θ)) < deg(qi (θ)). Aldus is, mede na een parti¨ele integratie, (m.b.t. de variabele x!) Z
rij (θ) t(θ) =− + j qi (θ) (j − 1)qi (θ)j−1
Z
1 t(θ)0 j−1 . (θ)j−1
s(θ) + qi
In geval j − 1 > 1 kan dezelfde bewerking herhaald worden, gelet op deg(s(θ) +
1 t(θ)0 ) j−1
≤ max(deg(s(θ)), deg(t(θ)0 )) < deg(qi (θ)),
wat volgt uit de stelling omtrent de afleiding van een logaritmisch polynoom (§ 7.3). Dit reductieproces wordt herhaald tot de noemers van de integranda kwadraatvrij zijn : Z Z r(θ) c(θ) a(θ) = + q(θ) d(θ) b(θ) met a(θ), b(θ), c(θ) en d(θ) in Fn−1 [θ], b(θ) monisch en kwadraatvrij, d deg(a(θ)) <deg(b(θ)),deg(c(θ)) < deg(d(θ)), en d(θ) = GGD(q(θ), q(θ)). dθ Past men hier de horowitzmethode toe, dan zal dit, gelet op het feit dat het onderliggende veld niet constant is m.b.t. x, leiden tot een systeem van lineaire differentiaalvergelijkingen [in plaats van lineaire algebra¨ısche vergelijkingen zoals bij rationale functies].
4. Rest dus nu de primitivering van het gedeelte
a(θ) , waarop de rothsteinb(θ)
tragermethode van toepassing is. We bepalen de resultante : R(z) = resθ (a(θ) − zb(θ)0 , b(θ)) ∈ Fn−1 [z], waarvan de wortels nu niet noodzakelijk constant zijn. Vooruitlopend op de stelling van subparagraaf 7.5.1.2, heeft men echter dat R a(θ) elementair is als en slechts dan als deze resultante van de vorm is : b(θ) ˜ R(z) = R(z)S ∈ Fn−1 [z] ˜ waarbij R(z) ∈ K[z] en S ∈ Fn−1 = K(x, θ1 , . . . , θn−1 ). ˜ Indien dus een van de co¨effici¨enten van R(z) niet constant is, dan concludeert R a(θ) men onmiddellijk dat niet elementair is. In het andere geval noemen b(θ) ˜ we ci (1 ≤ i ≤ m) de verschillende wortels van R(z) in zijn splitsend veld KR˜ , en leggen we functies vi (1 ≤ i ≤ m) vast d.m.v. vi (θ) = GGD(a(θ) − ci b(θ)0 , b(θ)) ∈ Fn−1 (c1 , . . . , cm )[θ].
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES299 Dan is Z
m a(θ) X = ci log(vi (θ)) b(θ) i=1
waarbij de minimale algebra¨ısche extensie van het constantenveld K is gebruikt.
VOORBEELD (7.5.1.1) 1 Z
Het integrandum f =
1 log(x)
1 wordt ge¨ınterpreteerd als log(x) f (θ) =
1 ∈ Q(x, θ) θ
waarbij θ = log(x). Voor de rothstein-tragermethode bepalen we 1 R(z) = resθ (1 − z , θ) x z = − + 1 ∈ Q(x)[z]. x z ˜ De co¨effici¨enten van R(z) = − +1 zijn echter niet constant; de gegeven primitieve x is niet elementair!
VOORBEELD (7.5.1.1) 2 Z
Het integrandum f =
1 x
log(x)
1 x · log(x)
wordt ge¨ınterpreteerd als
f (θ) =
1 x
θ
∈ Q(x, θ)
waarbij θ = log(x). Voor de rothstein-tragermethode bepalen we R(z) = resθ ( x1 − z x1 , θ) = − x1 z + = (z − 1)(− x1 ).
1 x
∈ Q(x)[z]
300HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES ˜ De co¨effici¨enten van R(z) = z − 1 zijn constant, zodat de gegeven primitieve elementair is. Achtereenvolgens vinden we : 1 1 c1 = 1, v1 (θ) = GGD( − 1. , θ) = θ x x zodat Z
1 x
log(x)
= 1 · log(θ) = log(log(x)).
VOORBEELD (7.5.1.1) 3 Z
2
2
x(x + 1)((x2 e2x − log2 (x + 1))2 + 2xe3x (x − (2x3 + 2x2 + x + 1)log(x + 1))) ((x + 1)log2 (x + 1) − (x3 + x2 )e2x2 )2
We stellen
• θ1 = exp(x2 ) • θ2 = log(x + 1) en vatten het integrandum op als een polynoom in θ2 met co¨effici¨enten in Q(x, θ1 ) : f (θ2 ) =
x 2x2 3 x − (2x3 + 2x2 + x + 1)θ2 + θ . x+1 x+1 1 (θ22 − x2 θ12 )2
x ∈ Q(x); primitivering geschiedt volgens het Het z.g. polynomiale deel van f is x+1 algoritme van hoofdstuk 6; men vindt :
Z
x = x − log(x + 1) ∈ Q(x, log(x + 1)). x+1
Op het z.g. rationale deel van f dat van de vorm is : r(θ2 ) b(θ2 )2 met r(θ2 ) een polynoom van de eerste graad en b(θ2 ) een monisch, kwadraatvrij polynoom van de tweede graad, passen we de hermitereductie toe. Splitsing in partieelbreuken is onnodig. We bepalen s(θ2 ) en t(θ2 ) in Q(x, θ1 )[θ2 ] waarvoor geldt : s(θ2 )b(θ2 ) + t(θ2 )b(θ2 )0 = r(θ2 ) deg(s(θ2 )) < 1, deg(t(θ2 )) < 2; we vinden : s(θ2 ) =
−2x θ1 , t(θ2 ) = xθ1 θ2 . x+1
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES301 Met Maple berekenen we t(θ2 )0 = θ1 ((2x2 + 1)θ2 +
x ) x+1
zodat
t(θ2 )0 −2x x = θ1 + θ1 ((2x2 + 1)θ2 + ) j −1 x+1 x+1 Een eerste reductie levert aldus : s(θ2 ) +
Z
r(θ2 ) xθ1 θ2 = − + 2 b(θ2 )2 θ2 − x2 θ12
Z
(2x2 + 1)θ1 θ2 − θ22 − x2 θ12
x θ x+1 1
waarop geen verdere reductie moet toegepast worden.
Voor de rothstein-tragermethode bepalen we de resultante R(z) = resθ2 (a(θ2 ) − zb(θ2 )0 , b(θ2 )) Gelet op b(θ2 )0 =
2 θ2 − 2x(2x2 + 1)θ12 x+1
Controleer dit in Maple:
R(z) = resθ2 (((2x2 + 1)θ1 −
x 2z )θ2 + (2x(2x2 + 1)zθ12 − θ1 ), θ22 − x2 θ12 ) x+1 x+1
˜ waaruit R(z) = ppR(z) = 4z 2 − 1, wat constante co¨effici¨enten vertoont, zodat de primitieve van het rationale deel elementair is. We bekomen achtereenvolgens : • c1 = 1/2 1 x )θ2 + (x(2x2 + 1)θ12 − θ1 ), x+1 x+1 (θ2 − xθ1 )(θ2 + xθ1 )) 1 )(θ2 + xθ1 ), . . .) = GGD(((2x2 + 1)θ1 − x+1 = θ2 + xθ1
v1 = GGD(((2x2 + 1)θ1 − •
• c2 = −1/2 • v2 = θ2 − xθ1 zodat Z
1 1 a(θ2 ) = log(θ2 + xθ1 ) − log(θ2 − xθ1 ). b(θ2 ) 2 2
302HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Uiteindelijk komt er : 2
R
xex log(x + 1) f = x − log(x + 1) − log2 (x + 1) − x2 e2x2 2 2 + 21 (log(x + 1) + xex ) − 12 log(log(x + 1) − xex ) ∈ Q(x, log(x + 1), exp(x2 ))
Dit geeft de volgende Maple-sessie:
7.5.1 Het Rischalgoritme voor transcendente logaritmische extensies
7.5.1.1 Logaritmische extensie : het rationaal deel
>
restart;
>
read ‘hfdst6.m‘;
Opmerking :
De bovenstaande commandolijn zorgt ervoor dat Maple alle procedures ’kent’ die betrekking hebben op het zesde hoofdstuk van de cursus computeralgebra. De allereerste keer dat men deze worksheet wil doorlopen, moet men eerst de worksheet bib hfdst6.mws met ”Execute Worksheet¨ uitvoeren. Dit zorgt ervoor dat Maple de file hfdst6.m aanmaakt en plaatst in de werk-directory.
Voorbeeld 1 : (zie (7.5.1.1) 1) >
f := 1/log(x); f :=
>
1 ln(x)
f := subs(log(x)=theta,%); f :=
Rothstein-Tragermethode :
1 θ
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES303 >
r := 1; r := 1
>
q := theta; q := θ
>
q_ := diff(ln(x),x); q :=
>
>
1 x
resultant(r-z*q_,theta,theta); x−z x R_:=primpart(%,z); R := x − z
De cofficinten van R˜ = x−z (als functie van z) zijn niet constant, dus is de gegeven x primitieve niet elementair !
WAT DOET MAPLE HIERMEE?
Voorbeeld 2 : (zie (7.5.1.1) 2) > f := 1/(x*log(x)); f := >
1 x ln(x)
subs(log(x)=theta,%); 1 xθ
>
r := 1/x; r :=
>
1 x
q := theta; q := θ
>
q_ := diff(log(x),x); q :=
>
>
1 x
resultant(r-z*q_,theta,theta); −1 + z − x R_:=primpart(%,z); R := 1 − z
304HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES De cofficinten van R˜ = z − 1 zijn constant, dus de gegeven primitieve is elementair ! > c := 1; c := 1 > v := gcdex(r-c*q_,theta,theta); v := θ > Int(f,x)=1*log(v); Z 1 dx = ln(θ) x ln(x) > subs(theta=log(x),%); Z 1 dx = ln(ln(x)) x ln(x) Controle : > diff(log(log(x)),x); 1 x ln(x)
Voorbeeld 3 (zie (7.5.1.1) 3) > f := >
x*(x+1)*((x^2*exp(2*x^2)-log(x+1)^2)^2+2*x*exp(3*x^2)*(x-(2*x^3+2*x^2+
>
x+1)*log(x+1)))/((x+1)*log(x+1)^2-(x^3+x^2)*exp(2*x^2))^2; 2
f :=
2
x (x + 1) ((x2 e(2 x ) − ln(x + 1)2 )2 + 2 x e(3 x ) (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) ((x + 1) ln(x + 1)2 − (x3 + x2 ) e(2 x2 ) )2 > Int(f,x); 2
2
x (x + 1) ((x2 e(2 x ) − ln(x + 1)2 )2 + 2 x e(3 x ) (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) ((x + 1) ln(x + 1)2 − (x3 + x2 ) e(2 x2 ) )2 dx
Z
2
2
Omdat Maple niet opmerkt dat e(2 x ) = (e(x ) )2 , zal Maple bij substitutie e(2 x 2 niet vervangen door θ2 (indien θ = e(x ) ).
Daarom voeren we de volgende substituties door:
>
f_s:=subs({exp(2*x^2)=exp(x^2)^2,exp(3*x^2)=exp(x^2)^3},f);
2)
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES305 2
2
x (x + 1) ((x2 (e(x ) )2 − ln(x + 1)2 )2 + 2 x (e(x ) )3 (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) f s := ((x + 1) ln(x + 1)2 − (x3 + x2 ) (e(x2 ) )2 )2 > p := >
x*(x+1)*((x^2*exp(x^2)^2-log(x+1)^2)^2+2*x*exp(x^2)^3*(x-(2*x^3+2*x^2+
>
x+1)*log(x+1)));
p := x (x + 1) 2
2
((x2 (e(x ) )2 − ln(x + 1)2 )2 + 2 x (e(x ) )3 (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) > q := ((x+1)*log(x+1)^2-(x^3+x^2)*exp(x^2)^2)^2; 2
>
q := ((x + 1) ln(x + 1)2 − (x3 + x2 ) (e(x ) )2 )2
f := p/q; 2
2
x (x + 1) ((x2 (e(x ) )2 − ln(x + 1)2 )2 + 2 x (e(x ) )3 (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) f := ((x + 1) ln(x + 1)2 − (x3 + x2 ) (e(x2 ) )2 )2 > subs({exp(x^2)=theta1,log(x+1)=theta2},f);
>
>
>
x (x + 1) ((x2 θ12 − θ22 )2 + 2 x θ13 (x − (2 x3 + 2 x2 + x + 1) θ2)) ((x + 1) θ22 − (x3 + x2 ) θ12 )2 p:=subs({exp(x^2)=theta1,log(x+1)=theta2},p); p := x (x + 1) ((x2 θ12 − θ22 )2 + 2 x θ13 (x − (2 x3 + 2 x2 + x + 1) θ2)) q:=subs({exp(x^2)=theta1,log(x+1)=theta2},q); q := ((x + 1) θ22 − (x3 + x2 ) θ12 )2
term_1:= quo(p,q,theta2);
term 1 := >
x x+1
term_2:= collect(factor(rem(p,q,theta2)/q),[theta1,theta2,x]); x2 θ13 ((2 x3 + 2 x2 + x + 1) θ2 − x) term 2 := −2 (x θ1 − θ2)2 (x θ1 + θ2)2 (x + 1)
Eerste term = polynomiale deel >
term_1; x x+1
Methode van Horowitz en Rothstein-Trager (zie hoofdstuk 6) : >
r := x; r := x
>
p := x+1; p := x + 1
>
horowitz(r,p,x);
306HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
>
>
>
r := -1;
Z
x dx = x + x+1
Z
−
1 dx x+1
r := −1 rothstein_trager_poly(r,p,x); [] rothstein_trager(r,p,x); −ln(x + 1)
We vinden dus : > Int(x/(x+1),x)=x-log(x+1); Z x dx = x − ln(x + 1) x+1 Tweede term = rationale deel > term_2; x2 θ13 ((2 x3 + 2 x2 + x + 1) θ2 − x) −2 (x θ1 − θ2)2 (x θ1 + θ2)2 (x + 1) Hermitereductie : > r := -2*x^2*((2*x^3+2*x^2+x+1)*theta2-x)*theta1^3/(x+1); x2 ((2 x3 + 2 x2 + x + 1) θ2 − x) θ13 r := −2 x+1 > b := - expand((x*theta1-theta2)*(x*theta1+theta2)); b := −x2 θ12 + θ22 OPMERKING: In bovenstaande uitdrukking staat het ’-’-teken om de uitdrukking in θ2 monisch te maken. Daardoor staat namelijk de term in θ22 met een ’+’-teken.
OPGELET! Om de afgeleide te berekenen moeten we terugkeren naar de exp(xˆ2) en log(x+1)!
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES307 >
subs({theta1=exp(x^2),theta2=log(x+1)},b); 2
>
b_ := diff(%,x);
−x2 (e(x ) )2 + ln(x + 1)2
2 ln(x + 1) x+1 b_ := subs({ln(x+1)=theta2,exp(x^2)=theta1},b_); 2 θ2 b := −2 x θ12 − 4 θ12 x3 + x+1 gcdex(b,b_,r,theta2,’s’,’t’); s; t; x θ1 −2 x+1 x θ1 θ2 2
2
b := −2 x (e(x ) )2 − 4 x3 (e(x ) )2 +
>
> >
OPGELET: In wat volgt zit een HEEN: subs({exp(xˆ2)=theta1,log(x+1)=theta2} en TERUG: subs({theta1=exp(xˆ2),theta2=log(x+1)} substitutie verwerkt! > t_ := >
subs({exp(x^2)=theta1,log(x+1)=theta2},diff(subs(
>
{theta1=exp(x^2),theta2=log(x+1)},t),x)); x θ1 t := θ1 θ2 + 2 x2 θ1 θ2 + x+1 j := 2; j := 2 Int(’r’/’b’^2,x)=-t/((j-1)*b^(j-1))+Int((s+t_/(j-1))/b^(j-1),x); x θ1 Z − Z + θ1 θ2 + 2 x2 θ1 θ2 x θ1 θ2 r x + 1 dx = − 2 2 + dx b2 −x θ1 + θ22 −x2 θ12 + θ22
>
>
We kunnen de eerste term uit het rechterlid vereenvoudigen :
308HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
simplify(-theta2*theta1*x*(x+1)/((x+1)*theta2^2-(x^3+x^2)*theta1^2)); x θ1 θ2 2 x θ12 − θ22
We werken vervolgens verder met de integraal uit het rechterlid : >
>
a:=-x*theta1/(x+1)+theta2*theta1+2*x^2*theta1*theta2; x θ1 + θ1 θ2 + 2 x2 θ1 θ2 a := − x+1 resultant(a-z*b_,b,theta2);
(32 z 2 θ14 x7 + 16 z 2 θ14 x8 + 32 z 2 x5 θ14 + 4 z 2 x2 θ14 + 20 z 2 x4 θ14 + 8 z 2 x3 θ14 + 32 z 2 x6 θ14 + x2 θ12 − 4 x8 θ14 − 8 x7 θ14 − 8 x6 θ14 − 4 x2 θ12 z 2 .
− 5 x4 θ14 − x2 θ14 − 8 x5 θ14 − 2 x3 θ14 ) (x + 1)2
>
primpart(%,z);
−1 + 4 z 2
>
a :=
>
subs(1/(1+x)=beta,-x*theta1/(x+1)+theta2*theta1+2*x^2*theta1*theta2); a := −x θ1 β + θ1 θ2 + 2 x2 θ1 θ2
>
b;
−x2 θ12 + θ22 >
>
b_:=subs(1/(1+x)=beta,b_); b := −2 x θ12 − 4 θ12 x3 + 2 θ2 β
resultant(a-z*b_,b,theta2);
x2 θ12 β 2 + 4 z 2 x2 θ14 + 16 z 2 x4 θ14 + 16 z 2 x6 θ14 − x2 θ14 − 4 x4 θ14 − 4 x6 θ14 − 4 x2 θ12 z 2 β 2 > primpart(%,z); 1 − 4 z2 De cofficinten van R˜ = 4 z 2 − 1 zijn constant. >
solve(%,z);
−1 1 , 2 2 >
c1 := 1/2; c1 :=
1 2
>
v1 := gcdex(a-c1*b_,b,theta2); v1 := x θ1 + θ2
>
c2 := -1/2;
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES309 −1 2 v2 := gcdex(a-c2*b_,b,theta2); v2 := −x θ1 + θ2 c2 :=
>
We hebben dus gevonden dat : > Int(term_2,x)=-x*theta1*theta2/(-x^2*theta1^2+theta2^2)+c1*log(v1)+c2 >
*log(v2); x2 θ13 ((2 x3 + 2 x2 + x + 1) θ2 − x) dx = (x θ1 − θ2)2 (x θ1 + θ2)2 (x + 1) x θ1 θ2 1 1 − 2 2 + ln(x θ1 + θ2) − ln(−x θ1 + θ2) 2 −x θ1 + θ2 2 2
Z
−2
Of samen met het polynomiale deel : > Primitieve:=x-ln(x+1)+subs({theta1=exp(x^2),theta2=log(x+1)},rhs( >
%)); 2
x e(x ) ln(x + 1) 1 2 Primitieve := x − ln(x + 1) − + ln(x e(x ) + ln(x + 1)) 2) 2 2 (x 2 −x (e ) + ln(x + 1) 2 1 2 − ln(−x e(x ) + ln(x + 1)) 2 Controle 1 : > int(f,x); 2
1 e(x ) x ln(x + 1) 2 − ln(−x e(x ) + ln(x + 1)) x − ln(x + 1) + 2 (2 x2 ) 2 x e − ln(x + 1) 2 1 2 + ln(x e(x ) + ln(x + 1)) 2 Controle 2 : >
factor(diff(Primitieve,x)); 2
2
2
((ln(x + 1)4 − 2 x2 (e(x ) )2 ln(x + 1)2 − 2 ln(x + 1) (e(x ) )3 x − 4 x3 (e(x ) )3 ln(x + 1) 2
2
2
2
− 4 x4 (e(x ) )3 ln(x + 1) − 2 x2 (e(x ) )3 ln(x + 1) + x4 (e(x ) )4 + 2 x2 (e(x ) )3 )x)
2
2
((−x e(x ) + ln(x + 1))2 (x e(x ) + ln(x + 1))2 (x + 1))
>
testeq(f,%); true
310HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES 7.5.1.2 Logaritmische extensie : de rothstein-tragerresultaten STELLING (ROTHSTEIN - TRAGER) Gegeven is een elementair functieveld F met constantenveld K, en een transcendent elementair extensieveld F (θ) met hetzelfde constantenveld, waarbij θ transcendent 0 en logaritmisch is over F (θ0 = uu voor een u ∈ F ). Verder is gegeven een rationale functie in θ : a(θ) b(θ) waarbij a(θ), b(θ) ∈ F [θ] GGD(a(θ), b(θ)) = 1( over F [θ]) deg(a(θ)) < deg(b(θ)) b(θ) monisch en kwadraatvrij is Dan geldt : (i)
R
a(θ) b(θ)
is elementair als en slechts dan als alle wortels van de polynoom R(z) = resθ (a(θ) − zb(θ)0 , b(θ)) in F [z] constant zijn.
(ii) als
R
a(θ) b(θ)
elementair is, dan is m vi (θ)0 a(θ) X = ci b(θ) i=1 vi (θ)
waarbij ci (1 ≤ i ≤ m) de verschillende wortels zijn van R(z) en de functies vi (θ)(1 ≤ i ≤ m) bepaald zijn door vi (θ) = GGD(a(θ) − ci b(θ)0 , b(θ)) ∈ F (c1 , . . . , cm )[θ] (iii) als F ∗ het minimaal algebra¨ısche getallenextensieveld van F is waarvoor a(θ) b(θ) de bovenstaande gedaante bezit met constanten ci ∈ F ∗ en vi (θ) ∈ F ∗ [θ](1 ≤ i ≤ m), dan is F ∗ = F (c1 , . . . , cm ) waarbij de ci de verschillende wortels zijn van R(z). zonder bewijs a(θ) een elementaire primitieve bezit, deze b(θ) expliciet kan opgeschreven worden, geeft een effici¨ente methode om na te gaan of die primitieve al dan niet elementair is, en garandeert dat het resultaat in het minimale algebra¨ısche getallenextensieveld kan uitgedrukt worden. Veeleer dan deze stelling te bewijzen, schetsen we de context. Onderstel dat de kwadraatvrije noemer b(θ) ∈ F (x)[θ] gefactoriseerd kan worden als
Deze stelling garandeert dus dat als
b(θ) =
m Y
j=1
vj (θ)
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES311 in een zeker algebra¨ısche getallenextensieveld van F (x). Zoals we in vorig hoofdstuk gezien hebben bij de formele integratie van rationale functies, zou de primitieve verschillende gedaanten kunnen aannemen met meer of minder algebra¨ısche getallenextensies in de logaritmische termen, naargelang de gebruikte factorisatie van de noemer. Indien mogelijk zou hierbij best de volledige factorisatie van b(θ) over zijn splitsend veld vermeden worden, maar toch kunnen sommige algebra¨ısche getallenextensies niet vermeden worden bij de expliciete uitdrukking van de primitieve. Met de hierboven vermelde factorisatie van b(θ), krijgen we de volgende splitsing in partieelbreuken : m ui (θ) a(θ) X = b(θ) i=1 vi (θ) met deg(ui (θ)) <deg(vi (θ)) (1 ≤ i ≤ m). Onderstel nu dat voor elke i = 1, . . . , m, ui (θ) = ci vi (θ)0 voor zekere constanten ci . De primitieve wordt dan meteen : Z
m a(θ) X = ci log(vi (θ)). b(θ) i=1
De rothstein-tragermethode extraheert de vi (θ)-factoren uit b(θ) via een GGDbepaling, die bovendien garandeert dat vi (θ) een deler is van a(θ) − ci b(θ)0 , uitdrukking die alsdan de volgende gedaante aanneemt : ai (θ) − ci b(θ)0 = ( = =
m Q
j=1 m P
vj (θ))(
k=1
(uk (θ)
k=1 m P
m P
Q
j6=k
uk (θ) ) vk (θ)
− ci (
vj (θ)) − ci
((uk (θ) − ci vk (θ)0 )
k=1
m Q
j=1 n P
vj (θ))0
(vk (θ)0
k=1
Q
j6=k
vj (θ)).
m Q
j6=k
vj (θ))
Voor elke term in deze laatste som, behalve voor k = i, is vi (θ) een expliciete factor. Vermits vi (θ) de volledige som deelt, volgt hieruit dat vi (θ) ook deler is van ui (θ) − ci vi (θ)0 . Maar nu is GGD(vi (θ), vi (θ)0 ) = 1, want vi (θ) is kwadraatvrij, zodat ui (θ) = ci vi (θ)0 . Dit is precies de uitdrukking voor de ui(θ) die toelaat om de primitieve in de gewenste vorm uit te drukken.
312HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES 7.5.1.3 Logaritmische extensie : het polynomiale deel Voor een integrandum f ∈ K(x, θ1 , . . . , θn−1 , θ) = Fn−1 (θ) waarbij θ = log(u) logaritmisch is over Fn−1 , is het polynomiale deel p˜(θ) ∈ Fn−1 [θ]. Stel p˜(θ) = pl θl + pl−1 θl−1 + · · · + p0 .
waarbij elke pi ∈ Fn−1 (0 ≤ i ≤ l) l = deg˜ p(θ). Als
R
p˜(θ) elementair is, dan zal volgens het liouvilleprincipe (§4) : p˜(θ) = v0 (θ)0 +
m X
ci
i=1
vi (θ)0 vi (θ)
¯ (de algebra¨ısche afsluiting van K) en alle vi (θ) ∈ F¯n−1 (θ) (het waarbij alle ci ∈ K ¯ Met een redenering veld Fn−1 (θ) waarbij het constantenveld uitgebreid werd tot K). gebaseerd op het feit dat een noemer afhankelijk van θ niet kan verdwijnen bij afleiding naar θ, kan aangetoond worden dat v0 (θ) ∈ F¯n−1 [θ]. Op analoge wijze toont men aan dat vi (θ)(1 ≤ i ≤ m) onafhankelijk zijn van θ. Alzo is m X v0 0 p˜(θ) = v0 (θ) + ci i vi i=1 ¯ v0 (θ) ∈ F¯n−1 [θ] en vi ∈ F¯n−1 , 1 ≤ i ≤ m. waarbij alle ci ∈ K, Stel v0 (θ) = qk θk + qk−1 θk−1 + · · · + q0
met qi ∈ F¯n−1 (0 ≤ i ≤ k).
Uit de stelling omtrent de afleiding van een logaritmisch polynoom (§3) volgt dan dat v0 (θ)0 ∈ F¯n−1 [θ]
met
¯ deg(v0 (θ)0 ) = k − 1 als qk ∈ K
of
deg(v0 (θ)0 ) = k als qk niet constant is. De hoogst mogelijke graad voor v0 (θ) is dus k = l + 1, zodat p˜(θ) = v0 (θ)0 +
m X i=1
zich herleidt tot l
pl θ + · · · + p0 = (ql+1 θ
l+1
ci
vi0 vi
0
+ · · · + q0 ) +
m X i=1
ci
vi0 vi
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES313 ¯ qi ∈ F¯n−1 (1 ≤ i ≤ l). met alle pi ∈ Fn−1 , ql+1 ∈ K, Na afleiding en identificatie van de co¨effici¨enten van gelijknamige machten van het transcendente symbool θ over Fn−1 , ontstaat het volgende stelsel van vergelijkingen : 0 0 = ql+1 pl = (l + 1)ql+1 θ0 + ql0 0 pl−1 = lql θ0 + ql−1 ... p1 = 2q2 θ0 + q10 p0 = q1 θ0 + q¯00
waarbij q¯0 staat voor : q¯0 = q0 +
m X
ci log(vi ).
i=1
Hierbij zijn de co¨effici¨enten pi ∈ Fn−1 (0 ≤ i ≤ l) gekend, en dient het stelsel opgelost naar de onbekenden : ¯ qi ∈ F¯n−1 (1 ≤ i ≤ l) ql+1 ∈ K, en
q¯0 ∈ F¯n−1 (log(v1 ), . . . , log(vm )).
Merk op dat m, ci en vi (i ≤ i ≤ m) eveneens onbekend zijn; de bovenstaande conditie voor q¯0 betekent dus enkel dat nieuwe logaritmische extensies van F¯n−1 toegelaten zijn. Daartegenover staat dat de qi (1 ≤ i ≤ l) strikt gelimiteerd zijn tot het veld F¯n−1 . Het bovenstaande stelstel wordt nu stapsgewijze opgelost. We starten met de eerste vergelijking, waaruit, na primitivering, volgt : ¯ ql+1 = bl+1 ∈ K [de zg. arbitraire integratieconstante]. Substitutie in de tweede vergelijking en primitivering levert : Z pl = (l + 1)bl+1 θ + ql .
In het linkerlid hiervan worden we geconfronteerd met de formele integratie van de polynoom pl ∈ Fn−1 = K(x, θ1 , . . . , θn−1 ), zodat de procedure recurrent moet toegepast worden. Dit vereist echter dat : •
R
pl elementair is;
• er hoogstens ´e´en logaritmische extensie van F¯n−1 optreedt bij deze primitivering. • als er een logaritmische extensie van F¯n−1 optreedt, het precies θ = log(u) moet zijn.
314HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Van zodra een Rvan deze voorwaarden faalt, heeft het stelsel geen oplossing en besluiten we dat p˜(θ) niet elementair is. Zijn deze drie voorwaarden wel vervuld, dan is Z
pl = cl θ + dl + bl
waaruit bl+1 =
cl en ql = dl + bl l+1
¯ een arbitraire integratieconstante is. waarbij bl ∈ K Substitutie van ql in de derde vergelijking van het stelsel resulteert in 0 pl−1 = l(dl + bl )θ0 + ql−1
of 0 pl−1 − ldl θ0 = lbl θ0 + ql−1
waaruit
u0 ) = lbl θ + ql−1 . u Het integrandum in dit linkerlid bestaat uit gekende functies in het veld F¯n−1 , zodat de procedure weer recurrent kan toegepast worden. Na vergelijking met het rechterlid stellen we vast dat voor deze primitivering dezelfde drie condities als hierboven R dienen te gelden opdat p˜(θ) elementair zou zijn. Zijn deze drie voorwaarden vervuld, dan is Z
Z
(pl−1 − ldl
(pl−1 − ldl
u0 ) = cl−1 θ + dl−1 + bl−1 u
¯ en dl−1 ∈ F¯n−1 . Hieruit volgt : voor zekere cl−1 ∈ K bl =
cl−1 , ql−1 = dl−1 + bl−1 l
¯ een arbitraire primitiveringsconstante. met bl−1 ∈ K Dit proces kan herhaald worden voor alle vergelijkingen van het stelsel t.e.m. het voorlaatste, waarbij een oplossing wordt bepaald van de vorm b2 =
c1 , q1 = d1 + b1 2
¯ een arbitraire primitiveringsconstante. met b1 ∈ K Substitutie van q1 in de laatste vergelijking resulteert uiteindelijk in Z
(p0 − d1
u0 ) = b1 θ + q¯0 . u
De enige voorwaarde hierbij is dat de primitieve in het linkerlid elementair is, zoniet R is p˜(θ) niet elementair. Is deze voorwaarde vervuld, stel Z
(p0 − d1
u0 ) = d0 , u
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES315 dan is b1 de co¨effici¨ent in d0 van θ = log(u) en q¯0 = d0 − b1 log(u). In dit geval is de arbitraire primitiveringsconstante deze voor nader bepaald dient te worden. Het eindresultaat is dan : Z
R
p˜(θ), zodat ze niet
p˜(θ) = bl+1 θl+1 + ql θl + · · · + q1 θ + q¯0 .
VOORBEELD (7.5.1.3) 1 Z
log(x)
Het integrandum f = log(x) wordt ge¨ınterpreteerd als f (θ) = θ ∈ Q(x, θ) met θ = log(x), x ∈ Q(x). Dit betekent : p˜(θ) = θ, l = 1, p1 = 1, p0 = 0. Als deze primitieve elementair is, dan heeft ze de gedaante : Z
p˜(θ) = b2 θ2 + q1 θ + q¯0
waarbij het volgend stelsel geldt. (1) 0 = b02 (2) 1 = 2b2 θ0 + q10 (3) 0 = q1 θ0 + q¯00 ¯ De vergelijking (1) levert : b2 ∈ Q. De vergelijking (2) levert : x + b1 = 2b2 θ + q1 waaruit : b2 = 0, q1 = x + b1 . De vergelijking (3) wordt dan : 0 = (x + b1 )θ0 + q¯00 of −xθ0 = b1 θ0 + q¯00 1 Substitutie van θ0 = in het linker lid geeft ons −1 = b1 θ0 + q¯00 , waaruit na integratie x volgt: −x = b1 θ + q¯0 (geen arbitraire primitiveringsconstante in de laatste stap) zodat b1 = 0, q¯0 = −x. Eindresultaat :
R
log(x) = xθ − x = xlog(x) − x ∈ Q(x, log(x))
316HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES VOORBEELD (7.5.1.3) 2 Z
We stellen :
log(log(x))
θ1 = log(x) θ2 = log(θ1 )
en vatten het integrandum op als f (θ2 ) = θ2 ∈ Q(x, θ1 )[θ2 ]; dit betekent : p˜(θ2 ) = θ2 , l = 1, p1 = 1, p0 = 0. Als deze primitieve elementair is, dan heeft ze de gedaante : Z
p˜(θ2 ) = b2 θ22 + q1 θ2 + q¯0
waarbij het volgend stelsel geldt : (1) 0 = b02 (2) 1 = 2b2 θ20 + q10 (3) 0 = q1 θ20 + q¯00 ¯ Uit (1) volgt : b2 ∈ Q. Uit (2) volgt : b2 = 0, q1 = x + b1 . De vergelijking (3) wordt dan : −xθ20 = b1 θ20 + q¯0 waarbij θ20 = zodat − Maar we weten dat elementair.
θ10 1 1 = θ1 log(x) x
1 = b1 θ20 + q¯00 . log(x)
1 niet elementair is; de gegeven primitieve is dus niet log(x)
Z
VOORBEELD (7.5.1.3) 3 1 2
!2
1 + 2log(x) x 1 1 + x (x + 2 )log(x + 2 ) log2 (x)( 12 log(x + 21 ) − x) − 41 x + (x + 12 )2 log2 (x + 12 ) log(x)(x2 − 1 + (x2 + x + 1)log(x + 21 )) + (x + 21 )2 1 1 log(x + 2 ) +(x − x ) (x + 21 )
Z
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES317 We stellen :
θ1 = log(x + 21 ) θ2 = log(x) f (θ2 ) ∈ Q(x, θ1 )[θ2 ] "
1 θ 2 1
#
−x 4 f (θ2 ) = θ22 1 2 2 + x " (x + 2 ) θ1 # (x2 + x + 1)θ1 + x2 − 1 4 2 +θ2 + + 1 2 1 x# (x + (x + ) )θ 1 2 2 " 1 1 (x − x )θ1 1 1 2 + + + 1 1 1 + x+ 2 (x + 2 )θ1 x(x + 2 ) x + 21 Als de primitieve elementair is, dan heeft ze de vorm : Z
p˜(θ2 ) = b3 θ23 + q2 θ22 + q1 θ2 + q¯0
waarbij het volgend stelsel geldt : (1) 0 = b03 (2) p2 = 3b3 θ20 + q20 (3) p1 = 2q2 θ20 + q10 (4) p0 = q1 θ20 + q¯00 De vergelijking (1) levert : b3 ∈ Q. R De vergelijking (2) levert : p2 = 3b3 θ2 + q2 . Nu is (zie verder) : Z p2 = 4log(x) +
(x +
x 1 )log(x 2
+ 21 )
;
Deze primitieve is elementair, er is ´e´en logaritmische extensie en die is precies θ2 = log(x). x Aldus is : b3 = 34 , q2 = (x+ 1 )log + b2 . (x+ 1 ) 2
De vergelijking (3) wordt :
p1 = 2(
2
x (x +
1 )log(x 2
+ 12 )
waaruit 2 p1 − 1 (x + 2 )log(x + 12 )
Z
+ b2 )θ20 + q10
!
= 2b2 θ2 + q1
waarbij het linkerlid zich herleidt tot Z
x3 + 4x2 + 3x + 1 x2 + x + 1 θ + 1 (x + 12 )2 x(x + 21 )2
318HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES wat oplevert (zie verder) : 4log(x) +
1 x2 − 1 1 log(x + ) + b1 = 2b2 θ2 + q1 ; x+ 2 2
het linkerlid is elementair, het bevat twee logaritmische extensies : log(x + 21 ) = θ1 en log(x) = θ2 . Aldus is (x2 − 1)θ1 + b1 . b2 = 2, q1 = x + 12 De vergelijking (4) wordt daarmee : (x2 − 1)θ1 p0 = + b1 θ20 + q¯00 x + 12 "
waaruit : Z
#
1 x2 − 1 θ1 = b1 θ2 + q¯0 p0 − x x + 12 !
waarbij het linkerlid zich herleidt tot : Z
1 1 1 2 + 1 1 + (x + 2 )θ1 x(x + 2 ) x +
1 2
!
of (zie verder) : log(x) + log(θ1 ) wat elementair is, ´e´en logaritmische extensie bevat die precies log(x) = θ2 is. Aldus is b1 = 1, q¯0 = log(θ1 ). Eindresultaat : Z 4 f = θ23 3 !
x + 2 θ22 + 1 (x + 2 )log(x + 21 ) x2 − 1 + log(x + 21 ) + 1 θ2 x + 12 !
+log(log((x + 12 )) met θ2 = log(x). Eerste tussenresultaat :
p2 (θ1 ) =
Z
p2
1 θ1 − x 4 1 + 2 1 2 2 met θ1 = log(x + ) x (x + 2 ) θ1 2
Het polynomiale deel van p2 (θ1 ) is x4 ; dit is een rationale functie in Q(x); de primitivering geschiedt volgens de algoritme uit het vorige hoofdstuk en levert 4log(x) op. Het rationaal deel van p2 (θ1 ) is van de vorm r(θ1 ) b(θ1 )2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES319 met r(θ1 ) =
x 1 1 2 θ1 − 2(x + 2 ) (x + 21 )2
en b(θ1 ) = θ1 en na splitsing in partieelbreuken, kan dit geschreven worden als : 1 2(x+ 12 )2
−
θ1
x (x+ 12 )2 θ12
.
De eerste term heeft exponent 1 in de noemer en blijft ongewijzigd. Voor de tweede term bepalen we s(θ1 ) en t(θ1 ) waarvoor geldt : s(θ1 )θ1 + t(θ1 )θ10 = dit levert :
x ; (x + 21 )2
s(θ1 ) = 0 t(θ1 ) = x+x 1 2
en alzo
x r(θ1 ) = 1 2 b(θ1 ) (x + 2 )log(x + 21 )
Z
Tweede tussenresultaat :
=
R
R
p1 − 2
2
(x+ 12 )log(x+ 21 ) 3
x +x+1 x + 4x2 + 3x + 1 θ + 1 (x + 12 )2 x(x + 21 )2
Als deze primitieve elementair is, dan is ze van de vorm : b2 θ12 + q1 θ1 + q¯0 met het stelsel (1) 0 = b02 (2)
x2 + x + 1 = 2b2 θ10 + q10 (x + 21 )2
x3 + 4x2 + 3x + 1 = q1 θ10 + q¯00 (3) 1 2 x(x + 2 ) ¯ Uit (1) volgt : b2 ∈ Q 3 1 Uit (2) volgt : x − 4 x+ 1 + b1 = 2b2 θ1 + q1 zodat b2 = 0, q1 = x − 2 Alzo wordt (3) : 3 1 x3 + 4x2 + 3x + 1 = x− 1 2 x(x + 2 ) 4 (x + 12 )
!
3 1 4 x+ 21
1 + b1 θ10 + q¯00 (x + 12 )
+ b1 .
320HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES wat zich herleidt tot
14x2 + 15x + 4 = b1 θ10 + q¯00 4x(x + 21 )2
of nog
4 1 0 − ¯00 1 = b1 θ1 + q x 2(x + 2 )
en na primitivering : 1 1 4log(x) − log(x + ) = b1 θ1 + q¯0 2 2 waaruit
1 b1 = − , q¯0 = 4log(x). 2
Dit resulteert in Z
2 p1 − 1 (x + 2 log(x + 21 ))
!
= (x −
1 x2 − 1 θ1 p0 − x x + 12
Z
− 21 )θ1 + 4log(x)
x2 − 1 1 1 log(x + 2 ) + 4log(x) x+ 2
= Derde tussenresultaat :
3 1 4 x+ 12
!
Het integrandum herleidt zich eerst tot 1 1 1 2 + 1 1 + (x + 2 )θ1 x(x + 2 ) x +
en vervolgens tot
1 2
1 1 + . 1 (x + 2 )θ1 x
Voor de primitivering van de eerste term passen we de rothstein-tragermethode toe; we bepalen de resultante R(z) = resθ1 ( x+1 1 − z x+1 1 , θ1 ) =
1 (1 x+ 21
2
− z);
2
˜ deze primitieve is dus elementair en de wortel van R(z) = 1 − z is c1 = 1. Alzo is v1 (θ1 ) = GGD( zodat
Z
Vandaar dat Z
(p0 −
1 x+
1 2
− 1.
1 , θ1 ) = θ1 x + 12
1 = log(θ1 ). (x + 21 )θ1
1 x2 − 1 θ1 ) = log(θ1 ) + log(x). x x + 12
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES321 Maplesessie comp7513.msw 7.5.1 Het Rischalgoritme voor transcendente logaritmische extensies
7.5.1.3 Logaritmische extensie : het polynomiale deel > >
restart; read ‘hfdst6.m‘;
Opmerking : De bovenstaande commandolijn zorgt ervoor dat Maple alle procedures ’kent’ die betrekking hebben op het zesde hoofdstuk van de cursus computeralgebra. De allereerste keer dat men deze worksheet wil doorlopen, moet men eerst de worksheet bib hfdst6.mws met ”Execute Worksheet¨ uitvoeren. Dit zorgt ervoor dat Maple de file hfdst6.m aanmaakt en plaatst in de werk-directory. Opmerking : In tegenstelling tot de voorgaande paragrafen is het hier nodig om de θ’s steeds uit te drukken in functie van x.
Voorbeeld 1 : (zie (7.5.1.3) 1) > f := log(x); f := ln(x) >
subs(log(x)=theta(x),%); θ(x)
Als de primitieve elementair is, heeft ze de volgende vorm : > P := b2(x)*theta(x)^2+q1(x)*theta(x)+q0(x); >
P := b2(x) θ(x)2 + q1(x) θ(x) + q0(x) P_ := diff(P,x);
d d d d b2(x)) θ(x)2 + 2 b2(x) θ(x) ( dx θ(x)) + ( dx q1(x)) θ(x) + q1(x) ( dx θ(x)) P := ( dx d + ( dx q0(x)) > P_ := collect(P_,theta(x)); d d d d d b2(x)) θ(x)2 + (2 b2(x) ( dx θ(x)) + ( dx q1(x))) θ(x) + ( dx q0(x)) + q1(x) ( dx θ(x)) P := ( dx
322HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Eerste vergelijking : > diff(b2(x),x)=0; d dx >
b2(x) = 0
b2(x):=b2; b2(x) := b2
Tweede vergelijking : > 2*b2(x)*diff(theta(x),x)+diff(q1(x),x)=1; >
>
>
>
d d 2 b2 ( dx θ(x)) + ( dx q1(x)) = 1 int(lhs(%),x)=x+b1; 2 b2 θ(x) + q1(x) = x + b1 vorm_vgln(lhs(%),rhs(%),theta(x)); {q1(x) = x + b1 , 2 b2 = 0} solve(%,{b2,q1(x)});
assign(%);
{q1(x) = x + b1 , b2 = 0}
Derde vergelijking : > (diff(q0(x),x))+q1(x)*diff(theta(x),x)=0; d d ( dx q0(x)) + (x + b1 ) ( dx θ(x)) = 0
We kunnen de vergelijking herschrijven als volgt : > diff(q0(x),x)+b1*diff(theta(x),x)=-x*diff(theta(x),x); >
d d d ( dx q0(x)) + b1 ( dx θ(x)) = −x ( dx θ(x)) lhs(%)=subs(theta(x)=log(x),rhs(%));
>
d d d q0(x)) + b1 ( dx θ(x)) = −x ( dx ln(x)) ( dx simplify(%);
>
>
> >
>
d d q0(x)) + b1 ( dx θ(x)) = −1 ( dx int(lhs(%),x)=-x; q0(x) + b1 θ(x) = −x vorm_vgln(lhs(%),rhs(%),theta(x)); {q0(x) = −x, b1 = 0} assign(%); simplify(P); θ(x) x + b1 θ(x) − x subs(theta(x)=log(x),%); ln(x) x − x
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES323 We hebben dus gevonden dat : > Int(f,x)=x*log(x)-x; Z
ln(x) dx = ln(x) x − x
Controle : > diff(x*ln(x)-x,x); ln(x)
Voorbeeld 2 : (zie (7.5.1.3) 2) > b2 := ’b2’; b1 := ’b1’; q1 := ’q1’; q0 := ’q0’; b2 := b2 b1 := b1 q1 := q1 q0 := q0 > f := log(log(x)); f := ln(ln(x)) > subs(log(x)=theta1(x),log(theta1(x))=theta2(x),%); θ2(x) Als de primitieve elementair is, heeft ze de volgende vorm : > P := b2(x)*theta2(x)^2+q1(x)*theta2(x)+q0(x); >
P := b2(x) θ2(x)2 + q1(x) θ2(x) + q0(x) P_ := diff(P,x);
d d d d b2(x)) θ2(x)2 + 2 b2(x) θ2(x) ( dx θ2(x)) + ( dx q1(x)) θ2(x) + q1(x) ( dx θ2(x)) P := ( dx d + ( dx q0(x)) > P_ := collect(P_,theta2(x)); d d d d b2(x)) θ2(x)2 + (2 b2(x) ( dx θ2(x)) + ( dx q1(x))) θ2(x) + ( dx q0(x)) P := ( dx d + q1(x) ( dx θ2(x))
Eerste vergelijking : > diff(b2(x),x)=0; d dx >
b2(x) = 0
b2(x):=b2; b2(x) := b2
324HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Tweede vergelijking : >
2*b2(x)*diff(theta2(x),x)+diff(q1(x),x)=1; d d θ2(x)) + ( dx q1(x)) = 1 2 b2 ( dx
>
int(lhs(%),x)=x+b1; 2 b2 θ2(x) + q1(x) = x + b1
>
vorm_vgln(lhs(%),rhs(%),theta2(x)); {q1(x) = x + b1 , 2 b2 = 0}
>
>
solve(%,{b2,q1(x)});
{q1(x) = x + b1 , b2 = 0}
assign(%);
Derde vergelijking : >
(diff(q0(x),x))+q1(x)*diff(theta2(x),x)=0; d d q0(x)) + (x + b1 ) ( dx θ2(x)) = 0 ( dx
Deze vergelijking kunnen we opnieuw schrijven als : >
diff(q0(x),x)+b1*diff(theta2(x),x)=-x*diff(theta2(x),x); d d d q0(x)) + b1 ( dx θ2(x)) = −x ( dx θ2(x)) ( dx
>
lhs(%)=subs(theta2(x)=log(log(x)),rhs(%));
d d d q0(x)) + b1 ( dx θ2(x)) = −x ( dx ln(ln(x))) ( dx
>
simplify(%);
d d q0(x)) + b1 ( dx θ2(x)) = − ( dx
We hebben reeds eerder gezien dat primitieve is dus niet elementair.
R
1 log(x)
1 ln(x)
dx niet elementair is, de gegeven
Voorbeeld 3 : (zie (7.5.1.3) 3) >
b2 := ’b2’; b1 := ’b1’; q2 := ’q2’; q1 := ’q1’; q0 := ’q0’; b2 := b2 b1 := b1 q2 := q2 q1 := q1 q0 := q0
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES325 >
f :=
>
x*((1/2)/((x+1/2)*log(x+1/2))+(1+2*log(x))/x)^2+(log(x)^2*((1/2)*log(x
>
+1/2)-x)-(x/4))/((x+1/2)^2*log(x+1/2)^2)+log(x)*(x^2-1+(x^2+x+1)*log(x
>
+1/2))/(x+1/2)^2+(x-1/x)*log(x+1/2)/(x+1/2); 2
1 1 x ln(x)2 ( ln(x + ) − x) − 1 + 2 ln(x) 2 2 4 + + f := x 1 1 2 1 1 2 x (x + ) ln(x + ) (x + ) ln(x + ) 2 2 2 2 1 1 1 ln(x) (x2 − 1 + (x2 + x + 1) ln(x + )) (x − ) ln(x + ) 2 + x 2 + 1 2 1 (x + ) x+ 2 2 > subs({log(x+1/2)=theta1(x),log(x)=theta2(x)},f);
1 2
2
x 1 θ2(x)2 ( θ1(x) − x) − 1 + 2 θ2(x) 1 2 4 + x + 1 1 2 x (x + ) θ1(x) (x + ) θ1(x)2 2 2 1 θ2(x) (x2 − 1 + (x2 + x + 1) θ1(x)) (x − x ) θ1(x) + + 1 2 1 (x + ) x+ 2 2 collect(%,theta2(x));
1 2
>
1
1 θ1(x) − x 2 2 2 4 x − 1 + (x + x + 1) θ1(x) 4 2 θ2(x) + + + θ2(x)2 + 1 2 1 1 2 x x 2 (x + ) θ1(x) (x + ) θ1(x) (x + ) 2 2 2 2 1 (x − ) θ1(x) 1 1 1 1 x x + + − +x 2 1 1 1 x 4 (x + ) θ1(x) x+ (x + )2 θ1(x)2 2 2 2
Als de primitieve elementair is, heeft ze de volgende vorm : > P := b3(x)*theta2(x)^3+q2(x)*theta2(x)^2+q1(x)*theta2(x)+q0(x); >
P := b3(x) θ2(x)3 + q2(x) θ2(x)2 + q1(x) θ2(x) + q0(x) P_ := diff(P,x);
d d d P := ( dx b3(x)) θ2(x)3 + 3 b3(x) θ2(x)2 ( dx θ2(x)) + ( dx q2(x)) θ2(x)2 d d d d θ2(x)) + ( dx q1(x)) θ2(x) + q1(x) ( dx θ2(x)) + ( dx q0(x)) + 2 q2(x) θ2(x) ( dx > P_ := collect(P_,theta2(x)); d d d b3(x)) θ2(x)3 + (3 b3(x) ( dx θ2(x)) + ( dx q2(x))) θ2(x)2 P := ( dx d d d d q1(x)) + 2 q2(x) ( dx θ2(x))) θ2(x) + ( dx q0(x)) + q1(x) ( dx θ2(x)) + (( dx
326HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Eerste vergelijking : > diff(b3(x),x)=0; d dx >
b3(x) = 0
b3(x) := b3; b3(x) := b3
Tweede vergelijking : > (1/2*theta1(x)-x)/(x+1/2)^2/theta1(x)^2+4/x=3*b3(x)*diff(theta2(x),x) >
+diff(q2(x),x); 1 θ1(x) − x 4 d d 2 + = 3 b3 ( dx θ2(x)) + ( dx q2(x)) 1 2 x 2 (x + ) θ1(x) 2
Polynomiale deel : > r := 4; r := 4 >
p := x; p := x
>
>
>
horowitz(r,p,x); 4 4 dx = dx x x rothstein_trager_poly(r,p,x); [] rothstein_trager(r,p,x); 4 ln(x) Z
Z
Rationale deel : > r := (1/2*theta1(x)-x)/(x+1/2)^2; 1 θ1(x) − x r := 2 1 (x + )2 2 > b := theta1(x); b := θ1(x) > convert(r,parfrac,theta1(x)); 2 (−θ1(x) + 2 x) − (2 x + 1)2 > expand(%/b^2); 4x 2 − 2 (2 x + 1) θ1(x) (2 x + 1)2 θ1(x)2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES327 1 2 θ1(x) (x+ 12 )2
: heeft exponent 1 in de noemer en blijft ongewijzigd ! x θ1(x)2 (x+ 21 )2
: we bepalen voor deze term s en t > gcdex(theta1,1/(x+1/2),x/(x+1/2)^2,theta1,’s’,’t’); > s; 0 > t; 2x 2x+1 > j := 2; j := 2 > Int(x/theta1(x)^2/(x+1/2)^2,x) = >
-t/((j-1)*b)+Int((s+diff(t,x)/(j-1))/b,x); 4x 2 − Z Z 2x x 2 x + 1 (2 x + 1)2 dx = − + dx 1 2 (2 x + 1) θ1(x) θ1(x) 2 (x + ) θ1(x) 2
Beide resultaten samen : > Int(’r’/’b’^2,x)=
Z
>
Int(1/2*1/theta1(x)/(x+1/2)^2,x)-(-2/(2*x+1)*x/theta1(x))+Int(-(-4/(2*
>
x+1)^2*x+2/(2*x+1))/theta1(x),x); 2x + dx + 1 2 (2 x + 1) θ1(x) θ1(x) (x + ) 2 Int(’r’/’b’^2,x)=simplify(rhs(%)); Z 2x r dx = b2 (2 x + 1) θ1(x)
r dx = b2 >
Z
1 2
1
Z
4x 2 − 2 x + 1 (2 x + 1)2 − dx θ1(x)
De vergelijking wordt dus (bepalen primitieve van beide leden) : > int(3*b3(x)*diff(theta2(x),x)+diff(q2(x),x),x)=4*log(x)+rhs(%); 2x 3 b3 θ2(x) + q2(x) = 4 ln(x) + (2 x + 1) θ1(x) > subs(log(x)=theta2(x),%); 2x 3 b3 θ2(x) + q2(x) = 4 θ2(x) + (2 x + 1) θ1(x)
328HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
>
>
vorm_vgln(lhs(%),rhs(%),theta2(x)); 2x {q2(x) = , 3 b3 = 4} (2 x + 1) θ1(x) solve(%,{b3,q2(x)}); 4 2x , b3 = } {q2(x) = (2 x + 1) θ1(x) 3 b3 := 4/3; q2(x) := 2/(2*x+1)*x/theta1(x)+b2; 4 b3 := 3 2x + b2 q2(x) := (2 x + 1) θ1(x)
Derde vergelijking : > diff(q1(x),x)+2*q2(x)*diff(theta2(x),x)=2/(x+1/2)/theta1(x)+4/x+(x^2>
1+(x^2+x+1)*theta1(x))/(x+1/2)^2;
>
2x d θ2(x)) = + b2 ) ( dx (2 x + 1) θ1(x) 4 x2 − 1 + (x2 + x + 1) θ1(x) 2 + + 1 1 x (x + ) θ1(x) (x + )2 2 2 expand(lhs(%))=rhs(%); d ( dx q1(x)) + 2 (
d 4 ( dx θ2(x)) x d q1(x)) + + 2 ( dx θ2(x)) b2 = (2 x + 1) θ1(x) 4 x2 − 1 + (x2 + x + 1) θ1(x) 2 + + 1 1 x (x + ) θ1(x) (x + )2 2 2
d ( dx
We bepalen een primitieve van het rechterlid. > integr := >
2/(x+1/2)/theta1(x)+4/x+(x^2-1+(x^2+x+1)*theta1(x))/(x+1/2)^2-4*diff(t
>
heta2(x),x)/(2*x+1)*x/theta1(x);
d θ2(x)) x 4 ( dx 4 x2 − 1 + (x2 + x + 1) θ1(x) 2 + + − integr := 1 1 x (2 x + 1) θ1(x) (x + ) θ1(x) (x + )2 2 2 > integr := subs(theta2(x)=log(x),integr); d 4 ( dx ln(x)) x 4 x2 − 1 + (x2 + x + 1) θ1(x) 2 + + integr := − 1 1 x (2 x + 1) θ1(x) (x + ) θ1(x) (x + )2 2 2 > integr := simplify(%);
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES329 4 (4 x2 + 3 x + 1 + x3 + θ1(x) x3 + θ1(x) x2 + θ1(x) x) x (2 x + 1)2 integr := collect(integr,theta1(x)); integr :=
>
integr :=
4 (x3 + x2 + x) θ1(x) 4 (4 x2 + 3 x + 1 + x3 ) + x (2 x + 1)2 x (2 x + 1)2
Als de gezochte primitieve (van deze uitdrukking integr in functie van θ1(x)) elementair is, heeft ze de volgende vorm : > j := b_a2(x)*theta1(x)^2+q_a1(x)*theta1(x)+q_a0(x); >
j := b a2(x) θ1(x)2 + q a1(x) θ1(x) + q a0(x) j_ := diff(j,x); d d d j := ( dx b a2(x)) θ1(x)2 + 2 b a2(x) θ1(x) ( dx θ1(x)) + ( dx q a1(x)) θ1(x)
>
d d θ1(x)) + ( dx q a0(x)) + q a1(x) ( dx j_ := collect(j_,theta1(x));
d d d d b a2(x)) θ1(x)2 + (2 b a2(x) ( dx θ1(x)) + ( dx q a1(x))) θ1(x) + ( dx q a0(x)) j := ( dx d + q a1(x) ( dx θ1(x))
3.1 : eerste vergelijking > diff(b_a2(x),x)=0; d dx >
b a2(x) = 0
b_a2(x):=b_a2; b a2(x) := b a2
3.2 : tweede vergelijking > 2*b_a2(x)*diff(theta1(x),x)+diff(q_a1(x),x)=4*(x^3+x^2+x)/x/(2*x+1)^2 >
; d d θ1(x)) + ( dx q a1(x)) = 2 b a2 ( dx
>
4 (x3 + x2 + x) x (2 x + 1)2
r := 4*(x^3+x^2+x); r := 4 x3 + 4 x2 + 4 x
>
p := x*(2*x+1)^2; p := x (2 x + 1)2
>
horowitz(r,p,x); Z
4 x3 + 4 x2 + 4 x dx = x − x (2 x + 1)2
3 1 4 (x + ) 2
De tweede vergelijking kunnen we dus herschrijven :
+
Z
0 dx
330HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
>
int(2*b_a2*diff(theta1(x),x)+diff(q_a1(x),x),x)=x-3/4*1/(x+1/2)+b_a1; 3 2 b a2 θ1(x) + q a1(x) = x − + b a1 1 4 (x + ) 2 vorm_vgln(lhs(%),rhs(%),theta1(x));
q a1(x) = x −
>
1 4 (x + ) 2 solve(%,{q_a1(x),b_a2});
+ b a1 , 2 b a2 = 0
{b a2 = 0, q a1(x) = >
3
4 x2 + 2 x − 3 + 4 b a1 x + 2 b a1 } 2 (2 x + 1)
assign(%);
3.3 : derde vergelijking > (diff(q_a0(x),x))+q_a1(x)*diff(theta1(x),x)=4*(4*x^2+3*x+1+x^3)/x/(2* >
x+1)^2; d θ1(x)) 1 (4 x2 + 2 x − 3 + 4 b a1 x + 2 b a1 ) ( dx 4 (4 x2 + 3 x + 1 + x3 ) = 2 2x+1 x (2 x + 1)2 collect(%,b_a1);
d q a0(x)) + ( dx >
d d θ1(x)) b a1 θ1(x)) 1 (4 x + 2) ( dx 1 (4 x2 + 2 x − 3) ( dx d + ( dx = q a0(x)) + 2 2x+1 2 2x+1 4 (4 x2 + 3 x + 1 + x3 ) x (2 x + 1)2
Indien men alle onbekenden in n lid plaatst, krijgt men de volgende vergelijking : > 1/2*(4*x+2)/(2*x+1)*diff(theta1(x),x)*b_a1+(diff(q_a0(x),x))=4*(4*x^2 >
+3*x+1+x^3)/x/(2*x+1)^2-1/2*(4*x^2+2*x-3)/(2*x+1)*diff(theta1(x),x);
>
d θ1(x)) b a1 1 (4 x + 2) ( dx d + ( dx q a0(x)) = 2 2x+1 d θ1(x)) 4 (4 x2 + 3 x + 1 + x3 ) 1 (4 x2 + 2 x − 3) ( dx − 2 x (2 x + 1) 2 2x+1 lhs(%)=subs(theta1(x)=log(x+1/2),rhs(%)); d θ1(x)) b a1 1 (4 x + 2) ( dx d + ( dx q a0(x)) = 2 2x+1
>
1 d 2 4 (4 x2 + 3 x + 1 + x3 ) 1 (4 x + 2 x − 3) ( dx ln(x + 2 )) − x (2 x + 1)2 2 2x+1 simplify(%);
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES331 d d θ1(x)) b a1 + ( dx q a0(x)) = ( dx
7x+4 x (2 x + 1)
We maken gebruik van de methode van Horowitz en van de methode van Rothstein-Trager (zie hoofdstuk 6) om een primitieve van het rechterlid te berekenen : > r := 7*x+4; r := 7 x + 4 > q := x*(2*x+1); q := x (2 x + 1) > horowitz(r,q,x); 7x Z Z 2( + 2) 7x+4 2 dx = dx x (2 x + 1) x (2 x + 1) > rothstein_trager_poly(r,q,x); [] > rothstein_trager(r,q,x); 1 1 − ln(x + ) + 4 ln(x) 2 2 We vinden : > int(diff(theta1(x),x)*b_a1+diff(q_a0(x),x),x)=%; 1 1 b a1 θ1(x) + q a0(x) = − ln(x + ) + 4 ln(x) 2 2 > subs({log(x)=theta2(x),log(x+1/2)=theta1(x)},%); 1 b a1 θ1(x) + q a0(x) = − θ1(x) + 4 θ2(x) 2 > vorm_vgln(lhs(%),rhs(%),theta1(x)); −1 {q a0(x) = 4 θ2(x), b a1 = } 2 > solve(%,{b_a1,q_a0(x)}); −1 } {q a0(x) = 4 θ2(x), b a1 = 2 > assign(%); De (eerste) derde vergelijking wordt dus : > j = 2*b2*theta2(x)+q1(x); 1 (4 x2 + 2 x − 3 + 4 b a1 x + 2 b a1 ) θ1(x) + 4 θ2(x) = 2 b2 θ2(x) + q1(x) 2 2x+1 > simplify(%); 2 (θ1(x) x2 − θ1(x) + 4 θ2(x) x + 2 θ2(x)) = 2 b2 θ2(x) + q1(x) 2x+1
332HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
vorm_vgln(lhs(%),rhs(%),theta2(x));
>
2 θ1(x) x2 2 θ1(x) 8x 4 − = q1(x), + = 2 b2 } 2x+1 2x+1 2x+1 2x+1 solve(%,{q1(x),b2}); {
2 (x2 − 1) θ1(x) , b2 = 2} 2x+1 b2:=2; q1(x):=2*(x^2-1)*theta1(x)/(2*x+1)+b1; b2 := 2 2 (x2 − 1) θ1(x) q1(x) := + b1 2x+1 {q1(x) =
>
Vierde vergelijking : > q1(x)*diff(theta2(x),x)+(diff(q0(x),x))=x*(1/2/(x+1/2)/theta1(x)+1/x) >
^2+(x-1/x)*theta1(x)/(x+1/2)-1/4*x/(x+1/2)^2/theta1(x)^2; 2 (x2 − 1) θ1(x) d d + b1 ) ( dx θ2(x)) + ( dx q0(x)) = ( 2x+1 2 1 (x − ) θ1(x) 1 1 1 x 1 x + x − + 2 1 1 1 x 4 (x + ) θ1(x) x+ (x + )2 θ1(x)2 2 2 2
Indien we alle onbekenden in het linkerlid plaatsen, ziet de vergelijking er als volgt uit : > b1*diff(theta2(x),x)+diff(q0(x),x) = >
x*(1/2/(x+1/2)/theta1(x)+1/x)^2+(x-1/x)*theta1(x)/(x+1/2)-1/4*x/(x+1/2
>
)^2/theta1(x)^2-2*(x^2-1)*theta1(x)/(2*x+1)*diff(theta2(x),x);
d d b1 ( dx θ2(x)) + ( dx q0(x)) = x
d θ2(x)) 2 (x2 − 1) θ1(x) ( dx − 2x+1
1 2
2
1 (x − ) θ1(x) 1 1 1 x x + + − 1 1 1 x 4 (x + ) θ1(x) x+ (x + )2 θ1(x)2 2 2 2
We moeten nu een primitieve bepalen van het rechterlid : > integr := >
x*(1/2/(x+1/2)/theta1(x)+1/x)^2+(x-1/x)*theta1(x)/(x+1/2)-1/4*x/(x+1/2
>
)^2/theta1(x)^2-2*(x^2-1)*theta1(x)/(2*x+1)*diff(theta2(x),x);
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES333
1 2
>
1 2
>
>
>
>
2
1 (x − ) θ1(x) 1 1 x 1 x − integr := x + + 1 1 1 x 4 (x + ) θ1(x) x+ (x + )2 θ1(x)2 2 2 2 d 2 2 (x − 1) θ1(x) ( dx ln(x)) − 2x+1 integr := simplify(%); 2 x + 2 θ1(x) x + θ1(x) integr := θ1(x) x (2 x + 1) r := (2*theta1(x)*x+2*x+theta1(x))/(2*x+1)/x; 2 x + 2 θ1(x) x + θ1(x) r := (2 x + 1) x convert(r,parfrac,theta1(x)); θ1(x) 2 + x 2x+1 integr := %/theta1(x); θ1(x) 2 + 2x+1 integr := x θ1(x) integr := 2/(2*x+1)/theta1(x)+1/x; 1 2 + integr := (2 x + 1) θ1(x) x
>
2
1 (x − ) θ1(x) 1 1 x 1 x + − integr := x + 1 1 1 x 4 (x + ) θ1(x) x+ (x + )2 θ1(x)2 2 2 2 d 2 2 (x − 1) θ1(x) ( dx θ2(x)) − 2x+1 integr := subs(theta2(x)=log(x),%);
Eerste term : > r := 2/(2*x+1); r := >
>
>
2 2x+1
p := theta1(x); p := θ1(x) p := subs(theta1(x)=log(x+1/2),p); 1 p := ln(x + ) 2 p_ := diff(p,x); 1 p := 1 x+ 2
334HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
resultant(r-z*p_,theta1,theta1); 2 (−1 + z) − 2x+1
Elementair want R˜ = z − 1 > c := 1; >
>
c := 1 v := gcdex(r-c*p_,theta1,theta1); v := θ1 v := theta1(x); v := θ1(x)
Tweede term : > r := 1; r := 1 >
p := x; p := x
>
rothstein_trager(r,p,x); ln(x)
>
subs(ln(x)=theta2(x),%); θ2(x)
De primitieve van het rechterlid van de vergelijking is nu volledig bepaald. De vergelijking kunnen we dus als volgt schrijven : > int(b1*diff(theta2(x),x)+diff(q0(x),x),x)=theta2(x)+c*log(v); b1 θ2(x) + q0(x) = θ2(x) + ln(θ1(x)) > vorm_vgln(lhs(%),rhs(%),theta2(x)); {q0(x) = ln(θ1(x)), b1 = 1} > assign(%); > simplify(P); 1 (8 θ2(x)3 θ1(x) x + 4 θ2(x)3 θ1(x) + 6 θ2(x)2 x + 6 θ2(x)2 b2 θ1(x) x + 3 θ2(x)2 b2 θ1(x) 3 + 6 θ2(x) θ1(x)2 x2 − 6 θ2(x) θ1(x)2 + 6 θ2(x) θ1(x) b1 x + 3 θ2(x) θ1(x) b1 + 6 ln(θ1(x)) θ1(x) x + 3 ln(θ1(x)) θ1(x))/((2 x + 1) θ1(x)) > P := subs({theta1(x)=log(x+1/2),theta2(x)=log(x)},P); 1 2 (x − 1) ln(x + 2 ) 4 2x ln(x)2 + + b2 P := ln(x)3 + + b1 ln(x) 1 3 2x+1 (2 x + 1) ln(x + ) 2 1 + ln(ln(x + )) 2
2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES335 >
Int(’f’,x) = P;
1 2 2 (x − 1) ln(x + ) 4 2x 2 + 1 ln(x) f dx = ln(x)3 + ln(x)2 + + 2 1 3 2x+1 (2 x + 1) ln(x + ) 2 1 + ln(ln(x + )) 2
Z
Controle : > int(f,x); 1 2 ln(x) (x2 − 1) ln(x + ) 4 2 + ln(x)3 + 2 ln(x)2 + ln(x) + 2x+1 3 >
testeq(%,%%%); true
2 ln(x)2 x 1 (2 x + 1) ln(x + ) 2
1 + ln(ln(x + )) 2
336HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES
7.5.2
Het rischalgoritme voor transcendente exponenti¨ ele extensies
Het integrandum f ∈ K(x, θ1 , . . . , θn )
wordt opgevat als een rationale functie in de laatste transcendente extensie θn , die θ wordt genoteerd : f (θ) =
p(θ) ∈ K(x, θ1 , . . . , θn−1 , θ) = Fn−1 (θ) q(θ)
waarbij we noteren Fn−1 = K(x, θ1 , . . . , θn−1 ) en p(θ) en q(θ) behorende tot Fn−1 [θ]; er wordt tevens ondersteld dat f (θ) genormaliseerd is : GGD(p(θ), q(θ)) = 1 en dat q(θ) monisch is. We behandelen nu het geval waarbij deze laatste extensie θ exponentieel is : er bestaat een u ∈ Fn−1 waarvoor θ0 = u0 θ met overeenkomstige notatie θ = exp(u). Het is mogelijk op dezelfde manier te werk te gaan als in het logaritmische geval en, m.b.v. het euclidisch algoritme, polynomen p˜(θ) en r(θ) in Fn−1 [θ] te bepalen waarvoor p(θ) = q(θ)˜ p(θ) + r(θ) waarbij ofwel r(θ) = 0 ofwel deg(r(θ)) <deg(q(θ)). Dan is r(θ) . f (θ) = p˜(θ) + q(θ) r(θ) te primitiveren, dan q(θ) ontstaat de volgende moeilijkheid. De kwadraatvrije factorisatie van de noemer is
Gebruiken we nu de hermitemethode om het rationaal deel
q(θ) =
k Y
qi (θ)ki
i=1
waarbij elke qi (θ) ∈ Fn−1 [θ] monisch en kwadraatvrij is. Alhoewel voor elke i = 1, . . . , k geldt dat GGD(qi (θ),
d qi (θ)) = 1, dθ
volgt hieruit niet noodzakelijk dat GGD(qi (θ), qi (θ)0 ) = 1,
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES337 wat echter cruciaal is voor de hermitemethode. Dat deze laatste conditie inderdaad niet steeds geldt, moge blijken uit het volgende voorbeeld : d qi (θ) = 1 en stel qi (θ) = θ, dan is dθ GGD(θ, 1) = 1, terwijl qi (θ)0 = θ0 = u0 θ, en dus GGD(θ, u0 θ) = θ.
Uit de stelling omtrent de afleiding van een exponentieel polynoom (§3) weten we echter dat qi (θ) een deler is van qi (θ)0 enkel als qi (θ) een eenterm is. Zo zal het probleem omzeild kunnen worden als de monomiale factoren uit de noemer verwijderd kunnen worden. Daartoe gaan we als volgt te werk. Stel l de laagste graad van alle termen van q(θ) ∈ Fn−1 [θ]; dan is de noemer van de vorm : q(θ) = θl q¯(θ) waarbij θ geen deler is van q¯(θ). [Mocht l = 0 dan bevatte de noemer geen monomiale factoren.] Bepaal dan polynomen r¯(θ) en w(θ) in Fn−1 [θ] waarvoor r¯(θ)θl + w(θ)¯ q(θ) = r(θ) met deg(¯ r(θ)) < deg(¯ q (θ)) en deg (w(θ)) < l. Na deling door q(θ) komt er : r¯(θ) w(θ) r(θ) + l = q¯(θ) θ q(θ) en dus f (θ) = p˜(θ) +
w(θ) r¯(θ) + (θ)l q¯(θ)
of f (θ) = s˜(θ) +
r¯(θ) q¯(θ)
waarbij s¯(θ) = p˜(θ) + θ−l w(θ), deg(¯ r (θ)) <deg(¯ q (θ)) en θ geen deler is van q¯(θ). Stellen we w(θ) =
l−1 X
wi θ i
m X
pi θ i
i=0
en p˜(θ) =
i=0
338HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES dan is s¯(θ) = =
m X
pi θ i +
l−1 X i=0
i=0 −1 X
wi+l θi +
wi θi−l m X
pi θ i
i=0
i=−l
een “polynoom met positieve en negatieve machten van θ”. Voor de primitivering van het rationale deel van f (θ) : Z
r˜ q˜
kan de hermitemethode toegepast worden. De primitivering van het “polynomiale” deel Z s˜
is niet triviaal, maar het optreden van negatieve machten van θ maakt de zaak niet ingewikkelder [want θ−1 = exp(−u) is opnieuw een exponenti¨ele functie]. 7.5.2.1 Exponenti¨ ele extensie : het rationale deel Ontbind de noemer van het rationale deel in kwadraatvrije factoren : q˜(θ) =
k Y
qi (θ)ki
i=1
met qi (θ) monisch en kwadraatvrij, GGD(qi (θ), qj (θ)) = 1 voor i 6= j, deg(qk (θ)) > 0 en θ geen deler van qi (θ) voor i = 1, . . . , k. LEMMA Gegeven zijn een differentiaalveld F (x) met differentiaaloperator 0 waarvoor x0 = 1, en een differentiaal extensieveld F (x, θ) met hetzelfde constantenveld, waarbij θ transcendent en exponentieel is over F (x). Voor een monisch polynoom a(θ) ∈ F (x)[θ] in het symbool θ, met positieve graad en niet deelbaar door θ, waarvoor GGD(a(θ),
d a(θ)) = 1 dθ
– m.a.w. a(θ) is kwadraatvrij in F (x)[θ]– geldt eveneens GGD(a(θ), a(θ)0 ) = 1 waarbij deze laatste GGD-operatie eveneens in F (x)[θ] wordt doorgevoerd.
Op dezelfde wijze als bij een logaritmische extensie, leidt de hermitereductie tot Z
c(θ) r¯(θ) = + q¯(θ) d(θ)
Z
a(θ) b(θ)
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES339 waarbij a(θ), b(θ), c(θ), c(θ) ∈ Fn−1 [θ], deg(a(θ)) <deg(b(θ)), b(θ) niet deelbaar is door θ, b(θ), monisch en kwadraatvrij is. De klus wordt nu verder geklaard met de rothstein-tragermethode. Men berekent : R(z) = resθ (a(θ) − zb(θ)0 , b(θ)) ∈ Fn−1 [z]. Vooruitlopend op onderstaande stelling (§ 5.2.2), zal de primitieve van tair zijn als en slechts dan als
a(θ) b(θ)
elemen-
˜ R(z) = S R(z) ∈ Fn−1 [z]
˜ met R(z) ∈ K[z] en S ∈ Fn−1 = K(x, θ1 , . . . , θn−1 ).
˜ Als een van de co¨effici¨enten van R(z) = pp(R(z)) (het primitief deel van R(z)) niet ˜ constant is, dan is de primitieve van het rationale deel niet elementair. Heeft R(z) enkel constante wortels ci (i ≤ i ≤ m) (verschillend ondersteld) in het splitsend veld KR˜ , en defini¨eren we vi (θ) = GGD(a(θ) − ci b(θ)0 , b(θ)) ∈ Fn−1 (c1 , . . . , cm )[θ], dan is uiteindelijk Z
m m X X a(θ) )=− ci deg(vi (θ)) u + ci log(vi (θ)), ( b(θ) i=1 i=1
waarbij θ = exp(u) of
!
θ0 = u0 . θ
Merk op dat, in tegenstelling tot het geval van een logaritmische extensie, deze primitieve niet alleen logaritmische termen bevat, maar eveneens een term in u [zie verder § 7.5.2.2].
VOORBEELD (7.5.2.1) 1 Z
• integrandum f (θ) = • rothstein-trager :
1 θ+1
1 exp(x) + 1
∈ Q(x, θ) met θ = exp(x), x ∈ Q(x)
R(z) = resθ (1 − z(θ + 1)0 , θ + 1) = resθ (1 − zθ, θ + 1) = −z − 1 ∈ Q(x)[z]
˜ R(z) = pp(R(z)) = 1 + z heeft constante co¨effici¨enten zodat de primitieve elementair is
340HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES ˜ • wortels van R(z) : c1 = −1 •
v1 (θ) = GGD(1 − (−1)θ, θ + 1) = GGD(1 + θ, θ + 1) = θ + 1.
• Resultaat :
R
1 exp(x)+1 = −(−1)(1)x + (−1)log(θ + 1) = x − log(1 + ex )
VOORBEELD (7.5.2.1) 2 Z
• integrandum f (θ) =
x θ+1
x exp(x) + 1
∈ Q(x, θ) met θ = exp(x), x ∈ Q(x)
• rothstein-trager : R(z) = resθ (x − z(θ + 1)0 , θ + 1) = resθ (x − zθ, θ + 1) = −z − x ∈ Q(x)[z] ˜ R(z) = pp(R(z)) = x + z heeft een niet-constante co¨effici¨ent, zodat de primitieve niet elementair is.
VOORBEELD (7.5.2.1) 3 [zie ook VOORBEELD 3, p.300] • integrandum f (θ2 ) =
x(x + 1)((x2 θ22 − θ12 )2 + 2xθ23 (x − (2x3 + 2x2 + x + 1)θ1 )) ((x + 1)θ12 − (x3 + x2 )θ22 )2
met
θ1 = log(x + 1) θ2 = exp(x2 ), x2 ∈ Q(x, θ1 )
• via euclidisch algoritme : f (θ2 ) =
2θ3 x − (2x3 + 2x2 + x + 1)θ1 x + 2 2 θ2 x + 1 x (x + 1) ( 12 − θ22 )2 x
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES341 x ; het is een rationale functie in Q(x); de primi• het “polynomiale” deel is x+1 tivering ervan gebeurt met het algoritme van hoofdstuk 6; resultaat :
x = x − log(x + 1). x+1
Z
• de tweede term van f (θ2 ) vormt het rationale deel in θ2 ; θ2 is geen deler van de noemer; hierop wordt hermitereductie toegepast : kwadraatvrije splitsing in partieelbreuken van r(θ2 ) b(θ2 )2 met r(θ2 ) = b(θ2 ) = levert :
2 (x − x2 (x+1) θ12 − x2 + θ22
(2x3 + 2x2 + x + 1)θ1 )θ23
r(θ2 ) r1 (θ2 ) r2 (θ2 ) = + b(θ2 )2 b(θ2 ) b(θ2 )2
met r1 (θ2 ) =
2 (x − (2x3 + 2x2 + x + 1)θ1 )θ2 + 1)
x2 (x
en r2 (θ2 ) =
2 (x − (2x3 + 2x2 + x + 1)θ1 )θ12 θ2 + 1)
x4 (x
Controleer dit met Maple
• om het kwadraat in de noemer van
r2 (θ2 ) b(θ2 )2
weg te werken, bepaalt men
s(θ2 ) en t(θ2 ) in Q(x, θ1 )[θ2 ] waarvoor s(θ2 )b(θ2 ) + t(θ2 )b(θ2 )0 = r2 (θ2 ); er geldt : 1 s(θ2 ) = 4θ1 θ2 , t(θ2 ) = − θ1 θ2 x zodat Z
Z 1 θθ 1 1 r2 (θ2 ) 1 x 1 2 + (( 2 + 2)θ1 − )θ2 = 2 b(θ2 ) b(θ2 ) b(θ2 ) x x(1 + x)
• Na deze hermitereductie zijn we herleid tot : R
f (θ2 ) = x − log(x + 1) + +
R
θ2 θ22 −
θ12 x2
1 θ1 θ2 x θ22 − θ122 x
1 (x − θ1 (2x3 + 2x2 + x + 1)) 2 x (x + 1)
342HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES • rothstein-tragermethode voor deze laatste primitieve R(z) = resθ2 (a(θ2 ) − zb(θ2 )0 , kb(θ2 )) = ... ˜ = pp(R(z)) = 4z 2 − 1 heeft constante co¨effici¨enten, zodat deze primitieve R ˜ elementair is; de wortels van R(z) zijn c1 = 21 en c2 = − 12 ; de overeenkomstige logaritme-argumenten zijn 1 1 v1 (θ2 ) = θ2 + θ1 , v2 (θ2 ) = θ2 − θ1 ; x x aldus : laatste primitieve = −( 12 .1 − 12 .1)x2 + 21 log(v1 (θ2 )) − 21 log(v2 (θ2 )) • Eindresultaat :
R
f = x − log(x + 1) 2 1 log(x + 1)ex + 2x2 x e − x12 log2 (x + 1) 2 + 12 log(ex + x1 log(x + 1)) 2 − 12 log(ex − x1 log(x + 1))
Maplesessie: comp7521.mws 7.5.2 Het Rischalgoritme voor transcendente exponentile extensies
7.5.2.1 Exponentile extensie : het rationaal deel
> >
restart; read ‘hfdst6.m‘;
Opmerking :
De bovenstaande commandolijn zorgt ervoor dat Maple alle procedures ’kent’ die betrekking hebben op het zesde hoofdstuk van de cursus computeralgebra. De allereerste keer dat men deze worksheet wil doorlopen, moet men eerst de worksheet bib hfdst6.mws met ”Execute Worksheet¨ uitvoeren. Dit zorgt ervoor dat Maple de file hfdst6.m aanmaakt en plaatst in de werk-directory.
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES343
Voorbeeld 1 : (zie (7.5.2.1) 1) > f := 1/(exp(x)+1); f := >
ex
1 +1
subs(exp(x)=theta,f); 1 θ+1
We maken hier gebruik van de methode van Rothstein-Trager om na te gaan of een elementaire primitieve functie bestaat : > r := 1; r := 1 > p := theta+1; p := θ + 1 > p_ := diff(subs(theta=exp(x),p),x); p := ex > p_ := subs(exp(x)=theta,p_); p := θ > resultant(r-z*p_,p,theta); −1 − z De primitieve is elementair want R˜ = z + 1 heeft constante cofficinten ! > c := -1; c := −1 > v := gcdex(r-c*p_,p,theta); v := θ + 1 We vinden dus dat : > Int(f,x)=-(c*degree(v,theta))*x+c*log(v); Z 1 dx = x − ln(θ + 1) x e +1 Of : >
subs(theta=exp(x),%); Z 1 dx = x − ln(ex + 1) x e +1
Controle :
344HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
diff(x-log(exp(x)+1),x); 1−
>
ex ex + 1
simplify(%); ex
1 +1
Voorbeeld 2 : (zie (7.5.2.1) 2) > f := x/(exp(x)+1); f := >
x ex + 1
subs(exp(x)=theta,f); x θ+1
We maken opnieuw gebruik van de Rothstein-Tragermethode : > r := x; r := x > p := theta+1; p := θ + 1 > p_ := diff(subs(theta=exp(x),p),x); p := ex > p_ := subs(exp(x)=theta,p_); p := θ > resultant(r-z*p_,p,theta); −x − z R˜ = x + z heeft een niet-constante cofficint, zodanig dat de primitieve niet elementair is .
Voorbeeld 3 : (zie (7.5.2.1) 3) > f := >
x*(x+1)*((x^2*exp(2*x^2)-log(x+1)^2)^2+2*x*exp(3*x^2)*(x-(2*x^3+2*x^2+
>
x+1)*log(x+1)))/((x+1)*log(x+1)^2-(x^3+x^2)*exp(2*x^2))^2; 2
2
x (x + 1) ((x2 e(2 x ) − ln(x + 1)2 )2 + 2 x e(3 x ) (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) f := ((x + 1) ln(x + 1)2 − (x3 + x2 ) e(2 x2 ) )2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES345 Maple heeft hier een beetje hulp nodig : > p := >
x*(x+1)*((x^2*exp(x^2)^2-log(x+1)^2)^2+2*x*exp(x^2)^3*(x-(2*x^3+2*x^2+
>
x+1)*log(x+1))); q := ((x+1)*log(x+1)^2-(x^3+x^2)*exp(x^2)^2)^2; 2
2
p := x (x + 1) ((x2 (e(x ) )2 − ln(x + 1)2 )2 + 2 x (e(x ) )3 (x − (2 x3 + 2 x2 + x + 1) ln(x + 1))) 2
>
>
q := ((x + 1) ln(x + 1)2 − (x3 + x2 ) (e(x ) )2 )2
p := subs({exp(x^2)=theta2,log(x+1)=theta1},p); p := x (x + 1) ((x2 θ22 − θ12 )2 + 2 x θ23 (x − (2 x3 + 2 x2 + x + 1) θ1)) q := subs({exp(x^2)=theta2,log(x+1)=theta1},q); q := ((x + 1) θ12 − (x3 + x2 ) θ22 )2
>
term_1 := quo(p,q,theta2);
>
x x+1 term_2 := collect(factor(rem(p,q,theta2)/q),[theta1,theta2,x]); term 1 :=
term 2 := −
2 x2 ((2 x3 + 2 x2 + x + 1) θ1 − x) θ23 (x θ2 − θ1)2 (x θ2 + θ1)2 (x + 1)
Eerste term = polynomiale deel >
term_1; x x+1
Methode van Horowitz en Rothstein-Trager (zie hoofdstuk 6) : >
r := x; r := x
>
p := x+1; p := x + 1
>
>
horowitz(r,p,x);
r := -1;
Z
Z x 1 dx = x + − dx x+1 x+1
r := −1
>
rothstein_trager_poly(r,p,x); []
>
rothstein_trager(r,p,x); −ln(x + 1)
We vinden dus dat :
346HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
Int(x/(x+1),x)=x-log(x+1); Z x dx = x − ln(x + 1) x+1
Tweede term = rationale deel > term_2; 2 x2 ((2 x3 + 2 x2 + x + 1) θ1 − x) θ23 − (x θ2 − θ1)2 (x θ2 + θ1)2 (x + 1) Hermitereductie : > r := -2*x^2*((2*x^3+2*x^2+x+1)*theta1-x)*theta2^3/((x+1)*x^4); 2 ((2 x3 + 2 x2 + x + 1) θ1 − x) θ23 r := − x2 (x + 1) > b := expand((x*theta2-theta1)*(x*theta2+theta1)/x^2); b := θ22 −
θ12 x2
r(θ2) r1(θ2) r2(θ2) We bepalen r1(θ2) en r2(θ2) zodanig dat er geldt dat : b(θ2) 2 = b(θ2) + b(θ2)2 > r=A*theta2*b+B*theta2; θ12 2 ((2 x3 + 2 x2 + x + 1) θ1 − x) θ23 2 = A θ2 (θ2 − ) + B θ2 − x2 (x + 1) x2 > vorm_vgln(lhs(%),rhs(%),theta2);
{0 = − >
4 x θ1 4 θ1 2 θ1 2 θ1 2 A θ12 + B, − − − − + = A, 0 = 0} x2 x + 1 x + 1 x (x + 1) x2 (x + 1) x (x + 1) solve(%,{A,B}); 2 (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x) , x2 (x + 1) 2 (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x) θ12 } B=− x4 (x + 1) assign(%); {A = −
> r1(θ2) b(θ2)
>
r1 := A*theta2; r1 := −
2 (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x) θ2 x2 (x + 1)
We maken nu nog gebruik van de Rothstein-Tragermethode voor het bepalen van de primitieve van deze eerste term.
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES347 >
b_ := diff(subs({theta1=log(x+1),theta2=exp(x^2)},b),x);
>
2 ln(x + 1)2 2 ln(x + 1) − 2 x3 x (x + 1) b_ := subs({log(x+1)=theta1,exp(x^2)=theta2},b_); 2
b := 4 (e(x ) )2 x +
2 θ12 2 θ1 − 2 3 x x (x + 1) resultant(r1-z*b_,b,theta2); 4 (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x)2 θ12 (−1 + z 2 ) x6 (x + 1)2 primpart(%,z); b := 4 θ22 x +
>
>
−1 + z 2 De cofficinten van R˜ = z 2 − 1 zijn constant. > solve(%,z); 1, −1 > c1 := 1; c1 := 1 > v1 := gcdex(r1-c1*b_,b,theta2); v1 := θ2 + >
>
c2 := -1;
θ1 x
c2 := −1 v2 := gcdex(r1-c2*b_,b,theta2); θ1 v2 := − + θ2 x
We hebben dus voor de primitieve P1 = > P1 :=
R
r1(θ2) b(θ2)
dx gevonden dat :
>
-(c1*degree(v1,theta2)+c2*degree(v2,theta2))*x^2+c1*log(v1)+c2*log(v2)
>
; P1 := ln(θ2 +
θ1 θ1 ) − ln(− + θ2) x x
r2(θ2) b(θ2)2
>
>
r2 := B*theta2; 2 (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x) θ12 θ2 r2 := − x4 (x + 1) gcdex(b,b_,r2,theta2,’s’,’t’);
348HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
s; t; 4 θ2 θ1 θ1 θ2 − x
>
t_ :=
>
subs({exp(x^2)=theta2,log(x+1)=theta1},diff(subs(
>
{theta2=exp(x^2),theta1=log(x+1)},t),x)); θ1 θ2 θ2 + 2 − 2 θ2 θ1 t := − (x + 1) x x j := 2; j := 2 Int(’r2’/’b’^2,x)=-t/((j-1)*b^(j-1))+Int((s+t_/(j-1))/b^(j-1),x); θ2 θ1 θ2 + 2 Z Z 2 θ2 θ1 − r2 θ1 θ2 (x + 1) x x dx = dx 2 + 2 2 θ1 θ1 b 2 2 x (θ2 − 2 ) θ2 − 2 x x
>
>
met >
P2[1] := theta1*theta2/(x*(theta2^2-theta1^2/x^2)); θ1 θ2 P2 1 := θ12 2 x (θ2 − 2 ) x
We maken nu nog gebruik van de Rothstein-Tragermethode voor het bepalen van de laatste primitieve. > a := 2*theta1*theta2-theta2/(x+1)/x+theta1*theta2/x^2; θ2 θ1 θ2 a := 2 θ2 θ1 − + 2 (x + 1) x x > resultant(a-z*b_,b,theta2); (2 θ1 x3 + 2 θ1 x2 + θ1 x + θ1 − x)2 θ12 (−1 + 4 z 2 ) x6 (x + 1)2 > primpart(%,z); −1 + 4 z 2 De cofficinten van R˜ = z 2 − > solve(%,z);
1 4
zijn constant. 1 −1 , 2 2
>
c1 := 1/2; c1 :=
1 2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES349 >
>
>
v1 := gcdex(a-c1*b_,b,theta2); θ1 v1 := − + θ2 x c2 := -1/2; −1 c2 := 2 v2 := gcdex(a-c2*b_,b,theta2); θ1 v2 := θ2 + x
We dus voor deze laatste primitieve P2 2 gevonden dat : > P2[2] := >
-(c1*degree(v1,theta2)+c2*degree(v2,theta2))*x^2+c1*log(v1)+c2*log(v2)
>
; P2 2 :=
θ1 1 θ1 1 ln(− + θ2) − ln(θ2 + ) 2 x 2 x
Voor het volledige rationale deel hebben we gevonden dat : > Int(’r’/’b’^2,x)=P1+P2[1]+P2[2]; Z 1 θ1 1 θ1 θ1 θ2 r dx = ln(θ2 + ) − ln(− + θ2) + 2 θ12 b 2 x 2 x x (θ22 − 2 ) x
We hebben dus gevonden dat : > primitieve :=x-ln(x+1)+P1+P2[1]+P2[2]; 1 θ1 1 θ1 primitieve := x − ln(x + 1) + ln(θ2 + ) − ln(− + θ2) + 2 x 2 x
θ1 θ2 θ12 2 x (θ2 − 2 ) x
Of : >
primitieve:=subs({theta1=log(x+1),theta2=exp(x^2)},primitieve);
primitieve := x − ln(x + 1) + 2
ln(x + 1) e(x ) + ln(x + 1)2 x ((e(x2 ) )2 − ) x2 Controle :
1 ln(x + 1) 1 ln(x + 1) 2 2 ln(e(x ) + ) − ln(− + e(x ) ) 2 x 2 x
350HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES diff(primitieve,x);
>
1 1 ln(x + 1) ln(x + 1) 2 − − + + 2 x e(x ) 1 1 1 x (x + 1) x (x + 1) x2 x2 + 1− − ln(x + 1) ln(x + 1) x+1 2 2 2) (x e + − + e(x2 ) x x 2 2 2 ln(x + 1) e(x ) 2 ln(x + 1) e(x ) e(x ) − + + (x + 1) x %1 x2 %1 %1 2 ln(x + 1)2 2 ln(x + 1) 2 2 − 2 ) ln(x + 1) e(x ) (4 (e(x ) )2 x + x3 x (x + 1) − x %12 ln(x + 1)2 2 %1 := (e(x ) )2 − x2 > testeq(%,f); true 2
2 x e(x ) +
7.5.2.2 De rothstein-tragerresultaten voor een exponenti¨ ele extensie
STELLING Gegeven is een elementair functieveld F met constantenveld K, en een transcendent elementair extensieveld F (θ) met hetzelfde constantenveld, waarbij θ transcendent 0 en exponentieel is over F : θθ = u0 , u ∈ F . Verder is gegeven een rationale functie in θ : a(θ) b(θ) waarbij a(θ), b(θ) ∈ F [θ] GGD(a(θ), b(θ)) = 1 GGD(a(θ)) < deg(b(θ)) b(θ) monisch, kwadraatvrij en niet deelbaar door θ is Dan geldt : (i)
R
a(θ) b(θ)
is elementair als en slechts dan als alle wortels van de polynoom
constant zijn;
R(z) = resθ (a(θ) − zb(θ)0 , b(θ)) ∈ F [z]
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES351 (ii) als
R
a(θ) b(θ)
elementair is, dan is m X a(θ) vi (θ)0 = g0 + ci b(θ) vi (θ) i=1
waarbij de ci (i ≤ i ≤ m) de verschillende wortels zijn van R(z), en de vi (θ) (i ≤ i ≤ m) bepaald worden d.m.v. vi (θ) = GGD(a(θ) − ci b(θ)0 , b(θ)) ∈ F (c1 , . . . , cm )[θ] en waarbij g ∈ F (c1 , . . . , cm ) bepaald wordt door g 0 = −(
m X
ci deg(vi (θ)))u0 ;
i=1
(iii) als F ∗ het minimaal algebra¨ısch extensieveld is van F waarvoor a(θ) de bovenb(θ) ∗ ∗ staande gedaante bezit met constanten ci ∈ F en vi (θ) ∈ F [θ], dan is F ∗ = F (c1 , . . . , cm ) waarbij de ci (1 ≤ i ≤ m) de verschillende wortels zijn van R(z). Veeleer dan een bewijs te geven van deze stelling, onderzoeken we waar de additionele term in u vandaan komt [vergeleken met de formule voor een logaritmische extensie]. Nemen we de afgeleide van een logaritmische term : (c log(v(θ)))0 = c
v(θ)0 v(θ)
dan is daarbij deg(v(θ)0 ) = deg(v(θ)) omdat θ exponentieel is : θ = exp(u). Stellen we : v(θ) = θn + αn−1 θn−1 + · · · + α0 dan is 0
v(θ)0 = nθn u0 + (n − 1)αn−1 θn−1 u0 + · · ·
zodat v(θ) niet zuiver rationaal is in θ. v(θ) Nemen we daarentegen de afgeleide van een aangepaste term : v(θ)0 − nu0 v(θ) (clog(v(θ)) − cnu) = c , v(θ) 0
dan levert de laatste teller geen term meer van de nde graad in θ, zodat dit wel een zuiver rationale functie in θ voorstelt. 7.5.2.3 Exponenti¨ ele extensie : het “polynomiale” deel
352HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES Het z.g. “polynomiale” deel bij de formele integratie van f (θ) ∈ K(x, θ, . . . , θn−1 ) was van de vorm p¯(θ) =
l X
j=−k
pj θj , pj ∈ Fn−1 = K(x, θ1 , · · · , θn−1 ).
Onderstel dat p¯(θ) een elementaire primitieve bezit; dan is volgens het liouvilleprincipe : m X vi (θ)0 p¯(θ) = v0 (θ)0 + ci vi (θ) i=1 ¯ [de algebra¨ısche sluiting van K] en alle vi (θ) ∈ F¯n−1 (θ) [het veld waarbij alle ci ∈ K ¯ Fn−1 (θ) met constantenveld uitgebreid tot K]. Zonder de algemeenheid te schaden, kunnen we aannemen dat elke vi (θ) ofwel behoort tot F¯n−1 , ofwel monisch is en irreducibel in F¯n−1 [θ]. Verder kan v0 (θ) onmogelijk een factor bevatten in de noemer die niet monomiaal is, want een dergelijke factor zou behouden blijven (met een hogere graad) in de noemer van de afgeleide. Om dezelfde reden zullen ook alle vi (θ) geen niet-monomiale factoren bevatten. Daaruit volgt dat elke vi (θ) ofwel behoort tot F¯n−1 , ofwel gelijk is aan θ, de enige irreduciebele eenterm in F¯n−1 [θ]. Echter, als vi (θ) = θ dan wordt de overeenkomstige term in de som : vi (θ)0 = ci u 0 ci vi (θ) wat kan opgeslorpt worden in v0 (θ)0 . We besluiten dat, als p¯(θ) een elementaire primitieve bezit,
p¯(θ) =
l X
j=−k
0
qj θj +
m X
ci
i=1
vi0 vi
¯ ≤ i ≤ m) en vi ∈ F¯n−1 (1 ≤ i ≤ m). waarbij qj ∈ F¯n−1 (−k ≤ j ≤ l), ci ∈ K(1 Het feit dat de sommatie-index j hierbij hetzelfde bereik heeft als in de eerste uitdrukking voor p¯(θ), volgt uit de stelling omtrent de afleiding van een exponentieel polynoom (§3). Merk nu op dat : (qj θj )0 = (qj0 + ju0 qj )θj , −k ≤ j ≤ l zodat terzelfdertijd
p¯(θ) =
l X
pj θ j
j=−k
en p¯ =
l X
j=−k
(qj0 + ju0 qj )θj +
m X i=1
ci
vi0 vi
waaruit door identificatie van gelijknamige machten volgt dat pj = qj0 + ju0 qj , j = −k, . . . , −1, 1, . . . , l
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES353 en p0 = q¯00 = q0 +
m X
ci log(vi ).
i=1
Hierin zijn de pj ∈ Fn−1 (−k ≤ j ≤ l) gekend, terwijl de onbekenden zijn : qj ∈ F¯n−1 (j 6= 0), q¯0 ∈ F¯n−1 (log(v1 ), . . . , log(vm )). Voor j = 0 is de oplossing q¯0 =
Z
p0 . R
Is deze primitieve niet elementair, dan volgt hieruit dat de originele primitieve p¯(θ) niet elementair is. R Is p0 wel elementair, dan is meteen q¯0 bepaald. Voor elke j 6= 0 moet ter bepaling van qj ∈ F¯n−1 een differentiaalvergelijking opgelost worden; deze is van de vorm : y 0 + gy = h waarbij g en h in Fn−1 gegeven zijn en y ∈ F¯n−1 dient te worden bepaald. Deze differentiaalvergelijking heet de rischdifferentiaalvergelijking.
Op het eerste zicht ziet het aldus ernaar uit dat het originele primitiveringsprobleem is vervangen door een moeilijker probleem : het oplossen van de rischdifferentiaalvergelijking. Maar aangezien de oplossing van deze DV moet behoren tot hetzelfde functieveld als de gegeven functies g en h (mogelijks met een extensie van het constantenveld), is het mogelijk de rischdifferentiaalvergelijking op te lossen, ofwel aan te tonen dat er geen oplossing van de voorgeschreven vorm bestaat. Van zodra een van de rischdifferentiaalvergelijkingen uit het bovenstaande stelsel niet in de gewenste vorm oplosbaar is, is de gegeven primitieve niet elementair. Is het wel het geval, dan komt er : Z
p¯(θ) =
X
qj θj + q¯0 .
j6=0
De rischdifferentiaalvergelijking werd bestudeerd door Risch in 1969. Andere bijdragen terzake zijn van Rothstein (1976), Davenport (1986) en Bronstein (1990). Deze laatste bijdrage bevat een algoritme om de risch-differentiaalvergelijking op te lossen.
VOORBEELD (7.5.2.3) 1 Z
exp(−x2 )
354HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES • integrandum : f (θ) = θ = exp(−x2 ), −x2 ∈ Q(x) •
f (θ) = 0+ 1.θ, dus p0 = 0, p1 = 1 ↓ ↓ p0 p1
• q¯0 = 0 ¯ • q10 + u0 q1 = 1, q10 − 2xq1 = 1 met q1 ∈ Q(x); ¯ deze rischdifferentiaalvergelijking bezit geen oplossing in Q(x); deze primitieve is dus niet elementair.
VOORBEELD (7.5.2.3) 2 Z
xx
• integrandum : f (θ2 ) = θ2 met θ2 = exp(xθ1 ), xθ1 ∈ Q(x, logx) θ1 = log(x), x ∈ Q(x) •
f (θ2 ) = 0+ 1.θ2 ↓ ↓ p0 p1
• q¯0 = 0 • 1 = q10 + u0 q1 = q10 + (θ1 + 1)q1 deze rischdifferentiaalvergelijking bezit geen oplossing in Q(x, log(x)); de gegeven primitieve is dus niet elementair.
VOORBEELD (7.5.2.3) 3 Z
2
2
(4x2 + 4x − 1)(ex + 1)(ex − 1) (x + 1)2
• integrandum : f (θ) =
4x2 +4x−1 (θ (x+1)2
+ 1)(θ − 1) met
θ = exp(x2 ), x2 ∈ Q(x)
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES355 •
f (θ) = p0 + p1 θ + p2 θ2 met
2
+4x−1 p0 = − 4x(x+1) = q¯00 2 p1 = 0 = q10 + u0 q1 = q10 + 2xq1 , q1 ∈ Q(x) 4x2 +4x−1 p2 = (x+1)2 = q20 + 2u0 q2 = q20 + 4xq2 , q2 ∈ Q(x) 2
+4x−1 • q¯0 = − 4x(x+1) 2 dit is een rationaal integrandum; de formele integratie ervan verloopt volgens het algoritme van hoofdstuk 6 :
R
q¯0 = −4x − 4log(x + 1) −
1 ∈ Q(x, log(x + 1)) x+1
• q1 = 0 • de rischdifferentiaalvergelijking q20 + 4xq2 = moet in Q(x) opgelost worden : q2 = • Resultaat :
Z
f = 4log(x + 1) −
4x2 + 4x − 1 (x + 1)2 1 . x+1
(2x + 1)2 1 2x2 + e x+1 x+1
Maplesessie comp7523.mws 7.5.2 Het Rischalgoritme voor transcendente exponentile extensies
7.5.2.3 Exponentile extensie : het polynomiale deel
> >
restart; read ‘hfdst6.m‘;
Opmerking :
De bovenstaande commandolijn zorgt ervoor dat Maple alle procedures ’kent’ die betrekking hebben op het zesde hoofdstuk van de cursus computeralgebra.
356HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES De allereerste keer dat men deze worksheet wil doorlopen, moet men eerst de worksheet bib hfdst6.mws met ”Execute Worksheet¨ uitvoeren. Dit zorgt ervoor dat Maple de file hfdst6.m aanmaakt en plaatst in de werk-directory. Voorbeeld 1 : (zie (7.5.2.3) 1) > f := exp(-x^2); f := e(−x >
>
2)
u := -x^2; subs(exp(u)=theta(x),f);
u := −x2 θ(x)
>
p0 := 0; p1 := 1; p0 := 0 p1 := 1
De gezochte primitieve heeft de volgende vorm : > P := q1(x)*theta(x)+q0(x); P := q1(x) θ(x) + q0(x) We bepalen eerst de cofficint q0 (x). > q0(x) := int(p0,x); q0(x) := 0 Uit de identificatie van de gelijknamige machten volgt er dat : > p1 = diff(q1(x),x)+1*diff(u,x)*q1(x); >
d 1 = ( dx q1(x)) − 2 x q1(x) dsolve(%,{q1(x)}); 1√ 2 π erf(x) + C1 ) e(x ) q1(x) = ( 2
Deze Rischdifferentiaalvergelijking bezit geen oplossing in Q(x); de primitieve is dus niet elementair ! > int(f,x); 1√ π erf(x) 2
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES357 Voorbeeld 2 : (zie (7.5.2.3) 2) > q0 := ’q0’; q0 := q0 >
>
>
>
>
f := exp(x*log(x)); f := e(x ln(x)) subs(log(x)=theta1(x),exp(x*theta1(x))=theta2(x),f); θ2(x) u := x*theta1(x); u := x θ1(x) u_ := diff(subs(theta1(x)=log(x),u),x); u := ln(x) + 1 p0 := 0; p1 := 1; p0 := 0 p1 := 1
De gezochte primitieve heeft de onderstaande vorm : > P := q1(x)*theta(x)+q0(x); P := q1(x) θ(x) + q0(x) We bepalen eerst de cofficint q0 (x). > q0(x) := int(p0,x); q0(x) := 0 Uit de identificatie van de gelijknamige machten volgt er dat : > p1=diff(q1(x),x)+u_*q1(x); >
d 1 = ( dx q1(x)) + (ln(x) + 1) q1(x) dsolve(%,{q1(x)});
Z
q1(x) = ( xx dx + C1 ) x(−x)
Deze Rischdifferentiaalvergelijking bezit geen oplossing in Q(x, log(x + 1)), de gegeven primitieve is dus niet elementair ! > int(f,x); Z
Voorbeeld 3 : (zie (7.5.2.3) 3)
e(x ln(x)) dx
358HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
q0 := ’q0’;
>
q0 := q0 f := (4*x^2+4*x-1)*(exp(x^2)+1)*(exp(x^2)-1)/(x+1)^2;
>
(4 x2 + 4 x − 1) (e(x ) + 1) (e(x ) − 1) (x + 1)2 subs(exp(x^2)=theta(x),f);
2
2
f :=
>
>
>
(4 x2 + 4 x − 1) (θ(x) + 1) (θ(x) − 1) (x + 1)2 collect(%,theta(x)); (4 x2 + 4 x − 1) θ(x)2 −4 x2 − 4 x + 1 + (x + 1)2 (x + 1)2 u := x^2; u := x2 p2 := (4*x^2+4*x-1)/(x+1)^2; p2 :=
4 x2 + 4 x − 1 (x + 1)2
>
p1 := 0;
>
p1 := 0 p0 := (-4*x^2-4*x+1)/(x+1)^2; p0 :=
−4 x2 − 4 x + 1 (x + 1)2
De gezochte primitieve is van de vorm q2 (x) θ(x)2 + q1(x) θ(x) + q0(x). > P := q2(x)*theta(x)^2+q1(x)*theta(x)+q0(x); P := q2(x) θ(x)2 + q1(x) θ(x) + q0(x) We berekenen eerst q0 (x) : > q0(x) := Int(p0,x); q0(x) :=
Z
−4 x2 − 4 x + 1 dx (x + 1)2
We bepalen deze primitieve door gebruik te maken van de Horowitz- en de Rothstein-Tragermethode uit hoofdstuk 6. > r := -4*x^2-4*x+1; r := −4 x2 − 4 x + 1 > p := (x+1)^2; p := (x + 1)2 >
horowitz(r,p,x); Z
1 −4 x2 − 4 x + 1 dx = −4 x − + 2 (x + 1) x+1
Z
4 dx x+1
7.5. HET RISCHALGORITME VOOR TRANSCENDENTE ELEMENTAIRE FUNCTIES359 >
r := 4; r := 4
>
p := x+1;
>
p := x + 1 rothstein_trager_poly(r,p,x); []
>
rothstein_trager(r,p,x); 4 ln(x + 1)
We hebben dus gevonden dat : > q0(x) := -4*x-1/(x+1)+4*ln(x+1); 1 q0(x) := −4 x − + 4 ln(x + 1) x+1 Vervolgens vinden we uit de identificatie van de gelijknamige machten dat :
Eerste vergelijking : > p1 = diff(q1(x),x)+diff(u,x)*q1(x); >
d q1(x)) + 2 x q1(x) 0 = ( dx dsolve(%,{q1(x)});
q1(x) = C1 e(−x
2)
We stellen de constante gelijk aan nul : > q1 := 0; q1 := 0
Tweede vergelijking : > p2 = diff(q2(x),x)+2*diff(u,x)*q2(x);
>
4 x2 + 4 x − 1 d = ( dx q2(x)) + 4 x q2(x) (x + 1)2 dsolve(%,{q2(x)}); 1 2 + e(−2 x ) C1 q2(x) = x+1
We stellen opnieuw alle constanten gelijk aan nul : > q2(x) := 1/(x+1); 1 q2(x) := x+1
360HOOFDSTUK 7. FORMELE INTEGRATIE VAN ELEMENTAIRE FUNCTIES >
P; θ(x)2 1 − 4x− + 4 ln(x + 1) x+1 x+1
We hebben dus gevonden dat : > Int(’f’,x)=subs(theta(x)=exp(x^2),%); Z
2
(e(x ) )2 1 f dx = −4x− + 4 ln(x + 1) x+1 x+1
Controle : > int(f,x)-rhs(%); 2
2
>
1 −4 x2 − 3 x + (e(x ) )2 (e(x ) )2 − +4x+ x+1 x+1 x+1 simplify(%); 1
Beide primitieven zijn gelijk op een constante na. Het gevonden resultaat is correct ! > int(f,x); 2
−4 x2 − 3 x + (e(x ) )2 + 4 ln(x + 1) x+1
Bibliografie [1] Boyer R.S. (Ed.) Automated Reasoning Essays in Honor of Woody Bledsoe. Kluwer 1991. [2] Buchberger B. An Algorithm for Finding a Basis for the Residue Class Ring of a Zero-Dimensional Polynomial Ideal (Duits)”, PhD Thesis, Univ of Innsbruck, (1965). [3] Fachgruppe Computeralgebra GI,DMV,GAMM (ed.) Computeralgebra in Deutschland Passau Heidelberg 1993. [4] Davenport J.H., Siret Y., Tournier E. Computer Algebra (2nd ed) Academic Press 1993. [5] Delauny Ch. Th´eorie du mouvement de la lune Extract from the Comptes Rendus de l’Acad´emie des Sciences, Vol. LI. [6] Devlin K. Computers in Mathematics Notices of the American Mathematical Society 1993, Vol 40 pp 613-623. [7] Duffy P. Principles of Automated Theorem Proving Wiley 1991. [8] Geddes K.O., Czapor S.R., Labahn G. Algorithms for Computer algebra Kluwer 1992. [9] Gordon M. en Melham (Ed.) Introduction to HOL A theorem proving environment for higher order logic. Cambridge 1993. [10] Heck A. Introduction to Maple Springer Verlag 1993. [11] Kapur D. Geometry Theorem Proving Using Hilbert’s Nullstellensatz, in Proc. SYMSAC’86, ed B.W. Char, ACM press (1986) pp 202-208. [12] Kapur D. (Ed.) Automated Deduction CADE-11 LNAI 607, Springer 1992. [13] Mishra B. Algorithmic Algebra Springer Verlag 1993. [14] Najid-Zejli H. Computations in Radical Extensions LNCS 174, Springer 1984. [15] Najid-Zejli H. Extensions alg´ebriques: cas g´en´eral et cas des radicaux. Th`ese de troisi`eme cycle, IMAG, Grenoble 25.6.85. 361
362
BIBLIOGRAFIE
[16] Proef op de som PCM October 1993, pp140-144 [17] van der Waerden B.L. Modern Algebra (Vols. I en II), Ungar (1970).