Gauss-Legendre-metoden
Inom numerisk analys och vetenskaplig beräkning är Gauss-Legendre-metoderna en familj av numeriska metoder för vanliga differentialekvationer . Gauss-Legendre-metoder är implicita Runge-Kutta-metoder . Mer specifikt är de samlokaliseringsmetoder baserade på punkterna i Gauss–Legendre-kvadraturen . Gauss-Legendre-metoden baserad på s poäng har ordningen 2 s .
Alla Gauss-Legendre-metoder är A-stabila .
Gauss-Legendre-metoden av ordning två är den implicita mittpunktsregeln . Dess Butcher-tablå är:
1/2 1/2 1
Gauss-Legendre-metoden av ordning fyra har Butcher-tableau:
Gauss-Legendre-metoden för ordning sex har Butcher-tableau:
Beräkningskostnaden för Gauss-Legendre-metoder av högre ordning är vanligtvis överdriven, och därför används de sällan.
Intuition
Gauss-Legendre Runge-Kutta (GLRK) metoder löser en vanlig differentialekvation med . Det utmärkande för GLRK är uppskattningen av med Gaussisk kvadratur .
- ,
där är de samplade hastigheterna, är kvadraturvikterna , är abskissorna, och är rötterna av Legendre-polynomet av grad . En ytterligare approximation behövs, eftersom fortfarande är omöjlig att utvärdera. För att bibehålla trunkeringsfel av ordning behöver vi bara för att beställa . Runge-Kuttas implicita definition anropas för att åstadkomma detta. Detta är en implicit begränsning som måste lösas med en rothittande algoritm som Newtons metod . Värdena för Runge-Kutta-parametrarna kan bestämmas från en Taylor-serieexpansion i .
Praktiskt exempel
Gauss-Legendre-metoderna är implicita, så i allmänhet kan de inte tillämpas exakt. Istället gör man en kvalificerad gissning av , och använder sedan Newtons metod för att konvergera godtyckligt nära den sanna lösningen. Nedan finns en Matlab-funktion som implementerar Gauss-Legendre-metoden i ordning fyra.
0
0
% startpunkt x = [ 10,5440 ; 4,1124 ; 35,8233 ]; dt = 0,01 ; N = 10000 ; x_serie = [ x ]; för i = 1 : Nx = gauss_steg ( x , @ lorenz_dynamics , dt , 1e-7 , 1 , 100 ) ; x_serie = [ x_serie x ]; slutplot3 ( x_series ( 1 ,:), x_series ( 2 , :), x_series ( 3 ,:) ); set ( gca , 'xtick' ,[], 'ytick' ,[], 'ztick' ,[]); titel ( 'Lorenz Attractor' ); återvända ; funktion [td, j] = lorenz_dynamics ( tillstånd ) % returnerar en tidsderivata och en jakobisk av den tidsderivatan x = tillstånd ( 1 ); y = tillstånd ( 2 ); z = tillstånd ( 3 ); sigma = 10 ; beta = 8/3 ; _ _ rho = 28 ; td = [ sigma * ( y - x ); x * ( rho - z ) -y ; _ x * y - beta * z ]; j = [ - sigma , sigma , ; rho - z , -1 , -x ; _ _ y , x , - beta ]; slutfunktion x_next = gauss_step ( x, dynamik, dt , tröskel, dämpning, max_iterationer ) [ d , ~ ] = storlek ( x ); sq3 = sqrt ( 3 ); om dämpning > 1 || dämpning <= fel ( 'dämpningen bör vara mellan 0 och 1.' ) slut % Använd explicita Euler-steg som initiala gissningar [ k , ~ ] = dynamik ( x ); x1_guess = x + ( 1 / 2 - sq3 / 6 ) * dt * k ; x2_guess = x + ( 1 / 2 + sq3 / 6 ) * dt * k ; [ k1 , ~ ] = dynamik ( x1_guess ); [ k2 , ~ ] = dynamik ( x2_guess ); a11 = 1/4 ; _ _ a12 = 1/4 - sq3 / 6 ; _ _ a21 = 1/4 + sq3 / 6 ; _ _ a22 = 1/4 ; _ _ fel = @( k1 , k2 ) [ k1 - dynamik ( x + ( a11 * k1 + a12 * k2 ) * dt ); k2 - dynamik ( x + ( a21 * k1 + a22 * k2 ) * dt )]; er = fel ( k1 , k2 ); iteration = 1 ; while ( norm ( er ) > tröskel && iteration < max_iterations ) fprintf ( 'Newton iteration %d: felet är %f.\n' , iteration , norm ( er ) ); iteration = iteration + 1 ; [ ~ , j1 ] = dynamik ( x + ( a11 * k1 + a12 * k2 ) * dt ); [ ~ , j2 ] = dynamik ( x + ( a21 * k1 + a22 * k2 ) * dt ); j = [ öga ( d ) -dt * a11 * j1 , -dt * a12 * j1 ; _ _ -dt * a21 * j2 , öga ( d ) -dt * a22 * j2 ] ; _ k_nästa = [ k1 ; k2 ] - dämpning * linsolve ( j , er ); k1 = k_nästa ( 1 : d ); k2 = k_nästa ( d + ( 1 : d )); er = fel ( k1 , k2 ); end if norm ( er ) > tröskelfel ( 'Newton konvergerade inte med %d iterationer.' , max_iterations ) ; slut x_next = x + dt / 2 * ( k1 + k2 ); slutet
Denna algoritm är förvånansvärt billig. Felet i kan falla under i så få som 2 Newtonsteg. Det enda extraarbetet jämfört med explicita Runge-Kutta-metoder är beräkningen av Jacobian.
Tidssymmetriska varianter
Till priset av att lägga till en ytterligare implicit relation kan dessa metoder anpassas för att ha tidsomkastningssymmetri. I dessa metoder används den genomsnittliga positionen istället för att bara startpositionen i vanliga Runge-Kutta-metoder. Metoden för ordning 2 är bara en implicit mittpunktsmetod.
Metoden för ordning 4 med 2 steg är som följer.
Metoden för ordning 6 med 3 steg är som följer.
Anteckningar
- Iserles, Arieh (1996), A First Course in the Numerical Analysis of Differential Equations , Cambridge University Press , ISBN 978-0-521-55655-2 .