Richardsons extrapolering

Ett exempel på Richardsons extrapolationsmetod i två dimensioner.

I numerisk analys är Richardson-extrapolering en sekvensaccelerationsmetod används för att förbättra konvergenshastigheten för en sekvens av uppskattningar av något värde h . I huvudsak, givet värdet på för flera värden på , kan vi uppskatta genom att extrapolera uppskattningarna till . Den är uppkallad efter Lewis Fry Richardson , som introducerade tekniken i början av 1900-talet, även om idén redan var känd för Christiaan Huygens i hans beräkning av π . Med Birkhoffs och Rotas ord , "kan dess användbarhet för praktiska beräkningar knappast överskattas."

Praktiska tillämpningar av Richardson-extrapolering inkluderar Romberg-integration , som tillämpar Richardson-extrapolation på trapetsregeln , och Bulirsch-Stoer-algoritmen för att lösa vanliga differentialekvationer.

Allmän formel

Notation

Låt vara en approximation av (exakt värde) som beror på en positiv stegstorlek h med en felformel i formen

där är okända konstanter och är kända konstanter så att . Dessutom representerar trunkeringsfelet för approximationen så att i A sägs vara vara en approximation.

Observera att genom att förenkla med Big O-notation är följande formler ekvivalenta:

Syfte

Richardsons extrapolering är en process som hittar en bättre approximation av genom att ändra felformeln från till Därför, genom att ersätta med trunkeringsfelet har minskat från } till för samma stegstorlek . Det allmänna mönstret uppstår där har en mer exakt uppskattning än när . Genom denna process har vi uppnått en bättre approximation av genom att subtrahera den största termen i felet som var . Denna process kan upprepas för att ta bort fler feltermer för att få ännu bättre uppskattningar.

Bearbeta

Genom att använda stegstorlekarna och för någon konstant är de två formlerna för

För att förbättra vår approximation från till genom att ta bort första feltermen multiplicerar vi den andra ekvationen (2) med och subtraherar den första ekvationen (1) för att ge oss

Denna multiplikation och subtraktion utfördes för att göra en approximation av . Vi kan lösa vår nuvarande formel för att ge
som kan skrivas som av inställning

Återkommande förhållande

En allmän återkommande relation kan definieras för approximationerna med

där uppfyller

.

Egenskaper

Richardson-extrapoleringen kan betraktas som en linjär sekvenstransformation .

Dessutom kan den allmänna formeln användas för att uppskatta (stegstorleksbeteende i ledande ordning för Truncation error ) när varken dess värde eller är känt a priori . En sådan teknik kan vara användbar för att kvantifiera en okänd konvergenshastighet . Givet approximationer av från tre distinkta stegstorlekar , , och , exakt förhållande

ger ett ungefärligt samband (observera att notationen här kan orsaka lite förvirring, de två O som visas i ekvationen ovan indikerar bara beteendet för stegstorleken i ledande ordning, men deras explicita former är olika och därför är det att ta bort de två O-termerna ungefär giltigt)
som kan lösas numeriskt för att uppskatta för några godtyckliga val av , och .

Exempel på Richardson-extrapolering

Antag att vi vill approximera , och vi har en metod som beror på en liten parameter i en sådan sätt att

Låt oss definiera en ny funktion

där och är två distinkta stegstorlekar.

Sedan

kallas Richardson- extrapoleringen av A ( h ), och har en högre ordningens feluppskattning jämfört med .

Mycket ofta är det mycket lättare att få en given precision genom att använda R ( h ) snarare än A ( h′ ) med mycket mindre h′ . Där A ( h′ ) kan orsaka problem på grund av begränsad precision ( avrundningsfel ) och/eller på grund av det ökande antalet beräkningar som behövs (se exempel nedan).

Exempel pseudokod kod för Richardson extrapolation

Följande pseudokod i MATLAB-stil demonstrerar Richardsons extrapolering för att hjälpa till att lösa ODE , med trapetsmetoden . I det här exemplet halverar vi stegstorleken varje iteration och så i diskussionen ovan skulle vi ha att . Felet i den trapetsformade metoden kan uttryckas i termer av udda potenser så att felet över flera steg kan uttryckas i jämna potenser; detta leder till att vi höjer till andra potensen och tar potenserna i pseudokoden. Vi vill hitta värdet på , som har den exakta lösningen eftersom den exakta lösningen av ODE är . Denna pseudokod antar att en funktion som kallas Trapezoidal(f, tStart, tEnd, h, y0) existerar som försöker beräkna y(tEnd) genom att utföra trapetsmetoden på funktionen f , med startpunkt y0 och tStart och stegstorlek h .

Observera att att börja med en för liten inledande stegstorlek potentiellt kan introducera fel i den slutliga lösningen. Även om det finns metoder utformade för att hjälpa till att välja den bästa initiala stegstorleken, är ett alternativ att börja med en stor stegstorlek och sedan låta Richardson-extrapoleringen minska stegstorleken varje iteration tills felet når den önskade toleransen.

  0          
              
              
                    
                
    

                  
        
   

  




   


       



        
                   
    
    
             
    
              
        
        
        
     
                       
    
    
    
    
    
    
                 
                                       
          
                                                          
    


      
     
      
 tStart  =  % Starttid  tEnd  =  5  % Sluttid  f  =  -  y  ^  2  % Derivatan av y, så y' = f(t, y(t)) = -y^2  % Lösningen till denna ODE är y = 1/(1 + t)  y0  =  1  % Startpositionen (dvs. y0 = y(tStart) = y(0) = 1)  tolerans  =  10  ^  -  11  % 10-siffrig noggrannhet önskas  max . Rader   =  20  % Tillåt inte iterationen för att fortsätta på obestämd tid  initialH  =  tStart  -  TEnd  % Välj ett inledande stegstorlek  haveWeFoundSolution  =  falskt  % Kunde vi hitta lösningen inom den önskade toleransen? inte än.   h  =  initialH  % Skapa en 2D-matris med storleken maxRows by maxRows för att hålla Richardson-extrapoleringen  % Observera att detta kommer att vara en lägre triangulär matris och att högst två rader faktiskt behövs  % när som helst i beräkningen.  A  =  nollMatrix  (  maxRows  ,  maxRows  )  % Beräkna det övre vänstra elementet i matrisen. Den första raden i denna (nedre triangulära) matris har nu fyllts.   A  (  1  ,  1  )  =  trapetsformad  (  f  ,  tStart  ,  tEnd  ,  h  ,  y0  )  % Varje rad i matrisen kräver ett anrop till trapetsformad %  Denna loop börjar med att fylla den andra raden i matrisen, eftersom den första raden beräknades ovan  för  i  =  1  :  maxRows  -  1  % Börja vid i = 1, iterera högst maxRows - 1 gånger  h  =  h  /  2  % Halvera det föregående värdet på h eftersom detta är början på en ny rad.  % Börja fylla rad i+1 från vänster genom att anropa den trapetsformade funktionen med denna nya mindre stegstorlek  A  (  i  +  1  ,  1  )  =  Trapetsformad  (  f  ,  tStart  ,  tEnd  ,  h  ,  y0  )  för  j  =  1  :  i  % Go över denna nuvarande (i+1)-te rad tills diagonalen nås  % För att beräkna A(i + 1, j + 1), vilket är nästa Richardson-extrapolering,  använder % det senast beräknade värdet (dvs. A(i + 1, j)) och värdet från  %-raden ovanför den (dvs. A(i, j)).  A  (  i  +  1  ,  j  +  1  )  =  ((  4  ^  j  )  .*  A  (  i  +  1  ,  j  )  -  A  (  i  ,  j  ))  /  (  4  ^  j  -  1  );  slut  % Efter att ha lämnat ovanstående inre slinga har diagonalelementet i rad i + 1 beräknats  % Detta diagonalelement är det senaste Richardson-extrapoleringen som har beräknats.  % Skillnaden mellan denna extrapolering och den sista extrapoleringen av rad i är en bra  % indikation på felet.  if  (  absolutVärde  (  A  (  i  +  1  ,  i  +  1  )  -  A  (  i  ,  i  ))  <  tolerans  )  % Om resultatet är inom tolerans  skriv ut  (  "y = "  ,  A  (  i  +  1  ,  i  +  1  ))  % Visa resultatet av Richardson-extrapoleringen  haveWeFoundSolution  =  true  break  %  Klart, så lämna slingslutet  if  (  haveWeFoundSolution  ==  false  )  %  Om vi ​​inte kunde hitta en lösning inom den önskade toleransutskriften  (  "  Warning: Not able att hitta en lösning inom den önskade toleransen av " ,  tolerans  )  ;  print  (  "Den sista beräknade extrapoleringen var "  ,  A  (  maxRows  ,  maxRows  ))  slut 

Se även

  • Extrapolationsmetoder. Teori och praktik av C. Brezinski och M. Redivo Zaglia , North-Holland, 1991.
  • Ivan Dimov, Zahari Zlatev, Istvan Farago, Agnes Havasi: Richardson Extrapolation: Practical Aspects and Applications ,   Walter de Gruyter GmbH & Co KG, ISBN 9783110533002 (2017).

externa länkar