Brent methode

In numerieke analyse methode Brent's is een wortel vinden algoritme het combineren van de tweedeling methode, snijdend methode en inverse kwadratische interpolatie. Bij elke iteratie zij beslist welke van deze drie methoden waarschijnlijk beste benadering nul en herhaalt deze methode. Het voornaamste idee is om de secans methode of inverse kwadratische interpolatie omdat ze snel convergeren en terugkeren naar robuuste tweedeling methode als nodig. Dit verschaft een werkwijze combineert robuustheid en snelheid, dat gebeurt zeer populair en gewaardeerd worden. Het idee van het combineren van deze methoden is het gevolg van Theodorus Dekker en Richard Brent.

De werkwijze Dekker

Het idee van het combineren van de werkwijzen van dichotomie en Secant naar Dekker.

Veronderstel dat wil de vergelijking f = 0. In het beeld van de tweedeling methode te lossen, wordt de methode Dekker geïnitialiseerd door twee punten zeggen a0 en b0, zoals f en f tegengestelde tekens. Als f continu de tussenwaarden stelling blijkt dat er een oplossing tussen a0 en b0.

Bij elke iteratie, de drie punten zijn betrokken:

  • bk is de huidige iteratie, namelijk d. de huidige benadering van de wortel van f;
  • ak is de "contrapunt", dat wil zeggen d. een punt waar f en f hebben tegengestelde tekenen. Aldus bevat het interval coups veilige oplossing. Bovendien | f | moet kleiner zijn dan | f |, zodat bk is een betere benadering van de wortel die ak;
  • bk-1 de vorige iteratie.

Twee kandidaten voor de volgende iteratie berekend: het eerste wordt bepaald door de secansmethode

en de tweede door de tweedeling methode

Indien het resultaat van de secansmethode, s, m ligt tussen bk en dan kan de volgende geïtereerde worden, en zo niet, het middelpunt komt.

Dus de nieuwe waarde van de tegenhanger zodanig gekozen dat f en f tegengestelde tekens. Als f en f van tegengesteld teken, dan is het contrapunt verandert niet: ak + 1 = ak. Anders, f en f zijn van tegengesteld teken en de nieuwe contrapunt wordt ak + 1 = bk.

Tot slot, als | f | & Lt; | F |, dan ak + 1 is waarschijnlijk een betere benadering van de oplossing bk + 1, en dientengevolge de waarden ak + 1 en bk + 1 worden uitgewisseld.

Aangekomen op dit punt, is de methode zojuist een iteratie. De werkwijze wordt herhaald tot convergentie.

De werkwijze Brent

De methode is effectief als Dekker f gedraagt ​​zich redelijk goed. In bepaalde omstandigheden, elke iteratie gebruikt secansmethode maar na bk convergeert langzaam. In een dergelijke configuratie, de wijze van Dekker vereist dan meer herhalingen dan de tweedeling methode.

Brent stelt een kleine modificatie om dit probleem te vermijden: moet de test worden gecontroleerd voordat het resultaat van de secansmethode geaccepteerd als de volgende iteratie. Met name wanneer de vorige stap via de tweedeling methode, de ongelijkheid

moet waar zijn, anders is het middelpunt m wordt de volgende geïtereerde. Als de vorige stap via de interpolatie, dan ongelijkheid

wordt gebruikt in plaats. Deze wijziging maakt het vervangen van de secant methode door de tweedeling methode, toen de eerste bewegende te langzaam. Brent heeft aangetoond dat deze methode vereist hoogstens N iteraties, waarbij N het aantal iteraties voor de tweedeling methode. Wanneer de functie f zich goed gedraagt, Brent methode voor de inverse kwadratische interpolatie of lineaire interpolatie, waarbij de snelheid van convergentie superlineair kiezen.

Brent methode is gebaseerd op de inverse kwadratische interpolatie plaats van lineaire interpolatie als f, f en f onderscheiden. Dit verbetert de efficiëntie. Derhalve is de voorwaarde om de waarde te accepteren interpolatie gewijzigd s: s moet tussen / 4 en bk vallen.

Voorbeeld

Het streeft naar een wortel van f = identificeren. Wij nemen zo = initiële interval. Het werd f = -25 en f = 0,48148; en de voorwaarden V V & lt; 0 en | f | ≤ | f | worden gecontroleerd. We zullen detail het gebruik van Brent, met behulp van lineaire interpolatie of de inverse kwadratische interpolatie.

  • In de eerste iteratie, wordt IL gebruikt) = (a0 f) = en (f b0) =, waardoor s = 1,23256. Deze waarde ligt tussen / 4 en b0 en daarom is deze waarde opgeslagen. Daarnaast, f = 0,22891, dat a0 = A1 en B1 = s = 1,23256 geeft;
  • In de tweede iteratie, tussen één IQI) en = (b 0, f) = en) geeft = 1,14205; deze waarde tussen / 4 en b1. Bovendien is een ongelijkheid, | 1,14205 - b1 | ≤ | b0 - b-1 | / 2 is voldaan; Deze waarde wordt gehandhaafd. Tot slot, als f = 0.083582, zetten we a1 = a2 en b2 = 1,14205;
  • In de derde iteratie wordt gebruikt IQI tussen a) en =) en =) =, waardoor 1,09032. Deze waarde ligt tussen de / 4 en b2, maar de aanvullende voorwaarde Brent blokken: inderdaad, de ongelijkheid | 1,09032 - b2 | ≤ | b1 - b0 | / 2 is niet waar: de huidige waarde wordt daarom afgewezen. In plaats daarvan, berekenen we de interval middelpunt m = -1,42897. Het werd f = 9,26891; Vervolgens leggen a3 en b3 = a2 = -1,42897;
  • In de vierde iteratie wordt de waarde verkregen door -1,15448 tussen IQI) = en) en tenslotte =) =. Deze waarde valt niet tussen / 4 en B3). Daarom berekening plaats midden m = -2,71449; was f = 3,9393. Tenslotte stellen we a3 a4 en b4 = = -2,71449;
  • In de vijfde iteratie, een IQI geeft -3,45500, die valt in de gevraagde interval. De vorige iteratie een tweedeling stap en de ongelijkheid | -3,45500 - b4 | ≤ | B4 - B3 | / 2 moet worden voldaan, hetgeen niet het geval is. Dan gebruikt het middelpunt m = -3,35724, waarbij f = -6,78239. Zo m wordt de nieuwe contrapunt: a5 en b5 = = -3,35724 b4;
  • In de zesde iteratie wordt de IQI verboden omdat b4 = b5. Daarom wordt vervangen door een tussen IL) en =) =. Het resultaat s = -2,95064 waarbij alle eisen voldoet. We berekenen f = 0,77032 en we stellen a6 a5 en b6 = = -2,95064;
  • In de zevende iteratie, gebruikt het nog steeds een IQI die geeft s = -3,00219, die aan alle voorwaarden controleert. Nu, f = -0,03515, en daarom stelt a7 en b7 b6 = = -3,00219 | ≤ | f | is true);
  • In de achtste iteratie, niet kan worden beschouwd als een IQI omdat a7 = b6. IL plaats geeft s = -2,99994, welke waarde wordt aanvaard;
  • In de daaropvolgende iteraties, de wortel x = -3 naderde snel b9 + 6 = -3 · 10 en b10 = -3 tot 3 · 10.

Algoritme

  • Invoeren van a, b, en een verwijzing naar een subroutine voor f
  • berekenen f
  • berekenen f
  • als f f & gt; = 0 dan einde te verlaten als
  • Als | f | & Lt; | F | Vervolgens wisselen einde als
  • c: = a
  • mflag: = true
  • herhaal tot f = 0 of | b - a | is klein genoeg
    • Als f ≠ f en f ≠ f dan
    • anders
    • end if
    • Als s niet tussen / 4 en b of of zo
      • mflag: = true
    • anders
      • mflag: = false
    • end if
    • berekenen f
    • d: = c
    • c: b =
    • als f f & lt; 0 dan b: = s anders a: = s eindigen als
    • Als | f | & Lt; | F | dan uiteindelijk als uitwisseling
  • einde herhalingen
  • b out

Implementaties

Brent heeft gepubliceerd een implementatie in Algol 60. NetLib bibliotheek bevat een implementatie in Fortran. De fzero genaamd MATLAB functie of de functie te lossen PARI / GP zijn andere voorbeelden van de uitvoering van de methode van Brent.