본문 바로가기
유도항법제어/최적제어

[PSOC-3] 가우스 포인트 (Gauss Points)

by 세인트 워터멜론 2021. 12. 16.

가우스 포인트(Gauss points)는 \([-1, 1]\) 의 구간에서 정의되는 점들의 집합으로서 점(point)간의 간격이 서로 다르다는 특징이 있다.

 

 

가우스 포인트는 라그랑지 보간 다항식(Lagrange interpolation polynomials)의 보간점(interpolating point), 가우스 쿼드래처(Gauss quadrature)의 쿼드래처 포인트(quadrature point), 그리고 유사 스펙트럴 방법(pseudospectral method)의 콜로케이션 포인트(collocation point)로 사용된다.

가우스 포인트는 다음 3가지가 있으며, 각각 다음과 같이 정의된다.

(a) LGL (Legendre-Gauss-Lobatto) 포인트:
LGL 포인트는 \((N-1)\) 차 르장드르 다항식을 미분한 식 \(\dot{P}_{N-1} (\tau)\) 의 근(root) \((N-2)\) 개와 두 점 \(-1, +1\) 등 \(N\) 개의 점들로 구성된다.

(b) LG (Legendre-Gauss) 포인트:
LG 포인트는 \(N\) 차 르장드르 다항식 \(P_N (\tau)\) 의 근 \(N\) 개로 구성된다. LG 포인트는 두 점 \(-1,+1\) 을 포함하지 않는다.

(c) LGR (Legendre-Gauss-Radau) 포인트:
LGR 포인트는 두 개의 르장드르 다항식의 합 \(P_N (\tau)+P_{N-1} (\tau)\) 의 근 \(N\) 개로 구성된다. LGR 포인트는 \(-1\) 점을 포함하고 있다. 플립(flipped) LGR은 \(P_N (\tau)-P_{N-1} (\tau)\) 의 근 \(N\) 개로 구성되며 LGR 포인트를 거울에 비춘 상이다. 플립 LGR 포인트는 \(+1\) 점을 포함하고 있다.

다음 그림은 각각 5개의 점들로 이루어진 가우스 포인트를 그린 것이다.

 

 

다음은 가우스 포인트를 구하는 매트랩 함수의 코드이다.

 

function points = GaussPoints(n,ptype)
%
% n Guassian points generation
% points = GaussPoints(n,ptype)
%
% Needs LegendrePoly.m
%
% input: n (point number)
%        ptype  (point type: LG, LGR, fLGR, LGL)
%             LG - Legendre-Gauss points
%             LGR - Legendre-Gauss-Radau points
%             fLGR - flipped Legendre-Gauss-Radau points
%             LGL - Legendre-Gauss-Lobatto points
% output: Gauss points
%
% coded by St.Watermelon
%

% if input point number is 0 or 1, just return

if n<2
    points=0;
    disp('not enough number of Gauss points'); 
    return;
end

switch ptype
    case 'LG'  % Legendre-Gauss points
        lg=LegendrePoly(n);      % n-th Legendre polynomials
        points=sort(roots(lg));
        return;
        
    case 'LGR' % Legendre-Gauss-Radau points
        plN=LegendrePoly(n);     % n-th Legendre polynomials
        plN1=LegendrePoly(n-1);  % (n-1)-th Legendre polynomials
        pl=plN+[0 plN1];         % Pn + Pn-1
        points=sort(roots(pl));
        return
        
    case 'fLGR' % flipped LGR
        plN=LegendrePoly(n);     % n-th Legendre polynomials
        plN1=LegendrePoly(n-1);  % (n-1)-th Legendre polynomials
        pl=plN-[0 plN1];         % Pn - Pn-1
        points=sort(roots(pl));
        return
        
    case 'LGL'  % Legendre-Gauss-Lobatto points
        plL=LegendrePoly(n-1);   % (n-1)-th Legendre polynomials
        pl2=[];
        for kk=1:(length(plL)-1) % derivatives of Pn-1
            pl2=[pl2 (length(plL)-kk)*plL(kk)];
        end
        points=[-1; sort(roots(pl2)); 1]; % insert -1, +1
        return;
        
    otherwise
        points=0;
        return;
        
end

 

 

 

댓글