가우스-레겐드레 방법
Gauss–Legendre method수치해석 및 과학적 계산에서 가우스-레젠더 방법은 일반적인 미분방정식에 대한 수치적 방법의 집합이다.가우스-레전드르 방법은 암묵적인 룬게-쿠타 방법이다.구체적으로는 가우스-레전드르 사분법(Gauss-Legendre quadrature)의 점을 바탕으로 한 결합법이다.s 포인트를 바탕으로 한 가우스-레젠드르 방법에는 순서 2s가 있다.[1]
순서 2의 가우스-레젠더 방법은 암묵적인 중간점 규칙이다.그것의 푸줏간 테이블라우는 다음과 같다.
1/2 1/2 1
가우스-레젠드르 순서 4의 방법에는 푸줏대감이 있다.
Gauss-Legendre order 6는 Putuch tableau가 있다.
고차 가우스-레전드르 방법의 계산 비용은 대개 과도하므로 거의 사용되지 않는다.[3]
직감
Gauss-Legendre Runge-Kutta(GLRK) 방법에서는 일반적인 x = ( x) 을를) x (0) = x (로 해결한다GLRK의 구별되는 특징은 가우스 사분법으로 ( )- = 0 (t) 0}{ x의 추정이다.
( )= ( 0)+ h = l i + (h l) ,
where are the sampled velocities, are the quadrature weights, are the abscissas, and are the roots )= 0 정도 의 범례 다항식. k i {\은(는 아직 할 수 없기 때문에 추가적인 근사치가 필요하다. O( l ){\ O의 잘림 오류를 유지하려면 ( 2 - ) 를 주문하려면 k 만 있으면 된다이를 위해 Runge-Kutta의 암묵적 k = f+ a right)가 호출된다이것은 뉴턴의 방법처럼 뿌리 찾기 알고리즘에 의해 해결되어야 하는 암묵적 제약조건이다.Runge-Kutta 매개변수 의 Taylor 시리즈 확장을 통해 을 확인할 수 있다
실제 사례
가우스-레전드르 방법은 암묵적이기 때문에 일반적으로 정확하게 적용할 수 없다.대신 k 를 교육받은 추측한 다음 뉴턴의 방법을 사용하여 실제 해법에 임의로 근접하게 수렴한다.아래는 순서 4의 가우스-레전드르 방법을 구현하는 매트랩 기능이다.
%starting point x = [ 10.5440; 4.1124; 35.8233]; dt = 0.01; N=10000; x_series = [x]; for i=1:N x = gauss_step( x, @lorenz_dynamics, dt, 1e-7, 1, 100); x_series = [x_series x]; end plot3( x_series(1,:), x_series(2,:), x_series(3,:) ); set(gca,'xtick',[],'ytick',[],'ztick',[]); title('Lorenz Attractor'); return; function [td, j] = lorenz_dynamics(state) %return a time derivative and a Jacobian of that time derivative x = state(1); y = state(2); z = state(3); sigma = 10; beta = 8/3; rho = 28; td = [sigma*(y-x); x*(rho-z)-y; x*y-beta*z]; j = [-sigma, sigma, 0; rho-z, -1, -x; y, x, -beta]; end function x_next = gauss_step( x, dynamics, dt, threshold, damping, max_iterations ) [d,~] = size(x); sq3 = sqrt(3); if damping > 1 damping <= 0 error('damping should be between 0 and 1.') end %Use explicit Euler steps as initial guesses [k,~] = dynamics(x); x1_guess = x + (1/2-sq3/6)*dt*k; x2_guess = x + (1/2+sq3/6)*dt*k; [k1,~] = dynamics(x1_guess); [k2,~] = dynamics(x2_guess); a11 = 1/4; a12 = 1/4 - sq3/6; a21 = 1/4 + sq3/6; a22 = 1/4; error = @(k1,k2) [ k1 - dynamics(x+(a11*k1+a12*k2)*dt); k2 - dynamics(x+(a21*k1+a22*k2)*dt) ]; er = error(k1,k2); iteration=1; while( norm(er) > threshold && iteration < max_iterations ) fprintf('Newton iteration %d: error is %f.\n의, 반복 norm(어). 반복)반복 1;+[~, j1])dynamics(x+(a11*k1+a12*k2)*dt.[~, j2])dynamics(x+(a21*k1+a22*k2)*dt. j)[눈(d)-dt*a11*j1, -dt*a12*j1, -dt*a21*j2, 눈(d)-dt*a22*j2];k_next)[k1, k2]-damping*linsolve(j,er), k1)k_next(1:d), k2)k_next(d+(1:d). 어)error(k1,k2), 끝 만약 norm(어)&g.t;임계값 오류('Newton이 %d번 반복으로 수렴되지 않음, max_it 반복), end x_next = x + dt/2*(k1+k2); end
이 알고리즘은 놀라울 정도로 저렴하다. 의 오차는 뉴턴 스텝 2개에서 - 이하로 떨어질 수 있다.명시적 룬게-쿠타 방법과 비교한 유일한 추가 작업은 자코비안의 연산이다.
메모들
- ^ Iserles 1996, 페이지 47
- ^ Iserles 1996, 페이지 63
- ^ Iserles 1996, 페이지 47