Methode van Bairstow

Uit testwiki
Naar navigatie springen Naar zoeken springen

De methode van Bairstow is een numerieke methode om de nulpunten van een reële veelterm van willekeurige graad te vinden. De methode werd voor het eerst beschreven door Leonard Bairstow in de appendix van diens boek Applied Aerodynamics (1920), en is naar hem genoemd. Een reële veelterm heeft wortels die reëel zijn of anders voorkomen in paren van complex toegevoegde getallen. De methode zoekt naar kwadratische factoren, die ofwel reducibel zijn en twee reële wortels hebben, ofwel irreducibel zijn en twee complex toegevoegde wortels hebben. Op deze manier maakt de methode alleen gebruik van reële getallen. Een alternatief is de methode van Müller.

Beschrijving van de methode

Om de wortels van de veelterm

p(x)=i=0naixi

te vinden zoekt deze methode de twee coëfficiënten u en v van de kwadratische veelterm

k(x)=x2+ux+v

waarvan de wortels ook wortels zijn van de veelterm p(x). Dan kunnen enerzijds twee wortels bepaald worden en kan anderzijds de oorspronkelijke veelterm p(x) in graad worden verlaagd door hem te delen door de kwadratische veelterm k(x). Dit proces wordt herhaald tot een veelterm van graad 1 of 2 overblijft.

Deling van p(x) door k(x) geeft als quotiënt

q(x)=i=0n2bixi

en als rest

r(x)=cx+d,

zodat

p(x)=k(x)q(x)+r(x)=(x2+ux+v)(i=0n2bixi)+(cx+d)

Het gaat er nu om waarden van u en v te vinden waarvoor r(x)=0. Daartoe wordt in een soortgelijke procedure als de methode van Newton-Raphson een verbetering u+Δu en v+Δv van u en v gezocht, waarvoor de rest bij deling door k(x)+Δk(x)=x2+(u+Δu)x+v+Δv gelijk is aan 0, of althans kleiner is dan r(x). Dus:

p(x)=(k(x)+Δk(x))(q(x)+Δq(x))=
=k(x)(q(x)+Δq(x))+Δk(x)(q(x)+Δq(x))
=k(x)q(x)+k(x)Δq(x)+Δk(x)q(x)+Δk(x)Δq(x),

zodat

r(x)=p(x)k(x)q(x)=k(x)Δq(x)+Δk(x)q(x)+Δk(x)Δq(x)
k(x)Δq(x)+Δk(x)q(x)

Door de veelterm q(x) een tweede keer te delen door k(x) kan de uitdrukking voor de restterm vereenvoudigd worden:

r(x)k(x)Δq(x)+Δk(x)(k(x)f(x)+g(x))=k(x)m(x)+(Δux+Δv)(g1x+g0)

Omdat in de restterm r(x) geen kwadratische term voorkomt, moet

cx+d(x2+ux+v)(Δug1)+(Δux+Δv)(g1x+g0)

Daaruit volgen de twee lineaire vergelijkingen:

c=uΔug1+Δug0+Δvg1
d=vΔug1+Δvg0

In matrixvorm:

[dc]=[g0g1vg1g0g1u][ΔvΔu]

Een verbeterde benadering wordt dus verkregen door de uitgangswaarden u en v te corrigeren met:

[ΔvΔu]=[g0g1vg1g0g1u]1[cd]

De onbekenden c,d,g1,g0,(bi) en (fi) zijn functies van u en v. Ze worden recursief bepaald via:

bn2=anfn4=bn2bn3=an1ubn2fn5=bn3ufn4bi=ai+2ubi+1vbi+2(i=n4,,0)fi=bi+2ufi+1vfi+2(i=n6,,0)c=a1ub0vb1g1=b1uf0vf1d=a0vb0g0=b0vf0

Deze iteraties worden herhaald tot wanneer convergentie bereikt is. De methode kan op eenvoudige manier geprogrammeerd worden in de standaard programmeertalen.

Voorbeeld

Bepaal de wortels van de veelterm

p(x)=6x5+11x433x333x2+11x+6

Neem als eerste kwadratische veelterm k(x) een veelterm met als coëfficiënten de drie hoogste macht-coëfficiënten van p(x), genormaliseerd op de hoogste graad, dus:

k(x)=x2+116x336,

zodat:

u=an1an=116;v=an2an=336

De eerste stap geeft als betere benadering:

v+Δv=5,500000000000+5,460103215562=0,039896784438
u+Δu=  1,833333333333+1,145692735213=2,979026068546

Sjabloon:Uitklappen


De resultaten van de opeenvolgende iteraties staan in de volgende tabel. De daarin genoemde stapgrootte is gelijk aan:

s=Δv2+Δu2

Voor de eerste stap is dus:

s=5,4601032155622+1,1456927352132=5,579008780071

De kolom "wortels" geeft de wortels van de kwadratische veelterm k(x)=x2+ux+v in de vorm w12=m±h. Omdat

u=(w1+w2)=2m en v=w1w2=m2h2

geldt:

m=12u en h=14u2v
Iteratiestappen van Bairstow
Nr u v stapgrootte wortels
0 1,833333333333 −5,500000000000 5,579008780071 −0,916666666667±2.517990821623
1 2,979026068546 −0,039896784438 2,048558558641 −1,489513034273±1,502845921479
2 3,635306053091 1,900693009946 1,799922838287 −1,817653026545±1,184554563945
3 3,064938039761 0,193530875538 1,256481376254 −1,532469019881±1,467968126819
4 3,461834191232 1,385679731101 0,428931413521 −1,730917095616±1,269013105052
5 3,326244386565 0,978742927192 0,022431883898 −1,663122193282±1,336874153612
6 3,333340909351 1,000022701147 0,000023931927 −1,666670454676±1,333329555414
7 3,333333333340 1,000000000020 0,000000000021 −1,666666666670±1,333333333330
8 3,333333333333 1,000000000000 0,000000000000 −1,666666666667±1,333333333333

Na acht iteraties wordt een kwadratische veelterm k(x) gevonden met wortels −1/3 en −3, en dit binnen de gewenste nauwkeurigheid. Dit zijn dus ook oplossingen van de oorspronkelijke veelterm p(x). De superlineaire snelheid van convergentie is merkbaar vanaf de vierde stap. Na deling van de oorspronkelijke veelterm p(x) door de kwadratische veelterm

k(x)=(x+3)(x+13)

vindt men als quotiënt een nieuwe veelterm:

6x39x29x+6

waarop de methode opnieuw kan worden toegepast.

Zwakkere punten van de methode

De methode van Bairstow erft de lokale kwadratische convergentiesnelheid van de Newton-Raphson methode, behalve indien wortels optreden met een multipliciteit groter dan 1. Dan daalt de snelheid tot lineair. Een tweede probleem kan optreden bij veeltermen met een oneven graad, die slechts één reële wortel hebben. Kwadratische factoren die in deze wortel een kleine functiewaarde hebben, hebben de neiging te divergeren naar oneindig. Deze neiging kan worden onderdrukt door in dat geval de veelterm uit te breiden met een extra reële wortel, waardoor het convergentiegedrag bevorderd wordt, zij het ten koste van de snelheid van convergentie.

Sjabloon:Appendix