깊은대학 2025. 1. 9. 10:36

이전 게시글(https://pasus.tistory.com/362)에서 함수 f(x), 0<xtN차원 부분 함수공간으로 투사한 근사 함수 g(x), 0<xt 를 다음과 같이 유도하였다.

 

(1)g(x)=n=0N1cn(t)(2n+1)Pn(2xt1)cn(t)=0tf(x)(2n+1)Pn(2xt1)1t dx

 

식 (1)에서 계수 cn(t) 에 관한 적분식을 미분방정식으로 바꾸고자 한다. 식 (1)의 두번째 식을 미분하면 다음과 같다.

 

(2)dcn(t)dt=0tf(x)(2n+1)ddt(Pn(2xt1))1t dx   0tf(x)(2n+1)Pn(2xt1)1t2 dx   +f(t)(2n+1)1t

 

여기서 Pn(1)=1 이 되는 것과 다음과 같은 라이프니츠 적분 법칙(Leibniz integral rule)을 이용했다.

 

(3)ddta(t)b(t)h(t,x) dx=a(t)b(t)h(t,x)t dx +h(t,b(t))db(t)dth(t,a(t))da(t)dt

 

이제 식 (2)의 첫번째 적분에서 미분항을 구해보면 다음과 같다.

 

(4)ddt(Pn(2xt1))=Pn(ν)ddt(2xt1)=2xt2Pn(ν)=2t2(ν+1)t2Pn(ν)=1t(ν+1)Pn(ν)

 

다음으로 르장드르 다항식의 미분 관계식을 이용하면,

 

(5)(ν+1)Pn(ν)=nPn+(2n1)Pn1+(2n3)Pn2+

 

식 (4)는 다음과 같이 된다.

 

(6)ddt(Pn(2xt1))=1t(nPn+(2n1)Pn1+(2n3)Pn2+)

 

위 식을 식 (2)에 대입하면 다음과 같이 된다.

 

(7)dcn(t)dt=1t0tf(x)(2n+1)(nPn+(2n1)Pn1+(2n3)Pn2+)1t dx  1t0tf(x)(2n+1)Pn1t dx  +1tf(t)(2n+1)

 

한편 식 (1)에 의하면,

 

(8)0tf(x)(2n+1)nPn1t dx=ncn(t)0tf(x)(2n+1)(2n1)Pn11t dx    =(2n+1)(2n1)1(2n1)0tf(x)2(n1)+1)Pn11t dx    =(2n+1)(2n1)cn1(t)0tf(x)(2n+1)(2n3)Pn21t dx    =(2n+1)(2n3)1(2n3)0tf(x)2(n2)+1)Pn21t dx    =(2n+1)(2n3)cn2(t)

 

이므로, 식 (8)을 식 (7)에 대입하면 계수 cn(t) 에 관한 미분방정식을 다음과 같이 구할 수 있다.

 

(9)dcn(t)dt=1t(ncn(t)+(2n+1)(2n1)cn1(t) +(2n+1)(2n3)cn2(t)+)     1tcn(t)+1tf(t)(2n+1)=(2n+1)t((n+1)(2n+1)cn(t)+(2n1)cn1(t)+(2n3)cn2(t)+)     +(2n+1)tf(t)

 

참고로 식 (9)를 이용하여 계수 미분방정식을 몇 개 구해보면 다음과 같다.

 

(10)c˙0(t)=1tc0(t)+1tf(t)c˙1(t)=3t(23c1(t)+c0(t))+3tf(t)c˙2(t)=5t(35c2(t)+3c1(t)+c0(t))+5tf(t)

 

 

 

식 (9)의 계수 미분방정식은 다음과 같이 벡터/행렬 미분방정식으로 간결하게 표현할 수 있다.

 

(11)c˙(t)=1tAc(t)+1tBf(t)

 

여기서

 

c(t)=[c0(t)c1(t)cN1(t)]RNAnk={(2n+1)(2k+1),n>kn+1,n=k0n<kBn=(2n+1)

 

이다. 식 (11)을 연속시간 히포 미분방정식(continuous-time HiPPO ODE)이라고 한다.

 

 

참고로 N=3 일 때 행렬 ARN×NBRN×1 를 구해보면 다음과 같다.

 

A=[1003205153],     B=[135]

 

히포 행렬 AB 를 계산하는 매트랩 코드는 다음과 같다.

 

function [A, B] = hippo_AB(N)
%
% [A, B] = hippo_AB(N)
% input 
%   N - dimension of basis function
% output
%   A, B HiPPO matrix
%
% (c) st.watermelon

A = zeros(N,N);
B = zeros(N,1);

for n = 0:N-1
    for k = 0:n
        if n > k
            A(n+1, k+1) = sqrt(2*n+1) * sqrt(2*k+1);
        elseif n==k
            A(n+1, k+1) = n+1;
        else
            A(n+1, k+1) = 0;
        end
    end
    B(n+1,1) = sqrt(2*n+1);
end

 

정리하면, 함수 f(x), 0<xtN차원 부분 함수공간으로 투사한 근사 함수 g(x), 0<xt 는 다음과 같다.

 

(12)g(x)=n=0N1cn(t)(2n+1)Pn(2xt1)c˙(t)=1tAc(t)+1tBf(t)