C ++에서 재귀 스플라인 함수를 작성하는 방법


10

현재 나는 기초 스플라인 배열이라는 미분 방정식 해결 방법을 연구하고 있습니다. 내가 겪고있는 것은 B k + 1 i ( x ) = x x i 의 관계로 임의의 순서 스플라인을 만드는 방법을 만드는 것입니다 초기 조건 B 1 i (x)={ 1 인 x k + i + 1x i + 1 B k i + 1 (x)

Bik+1(x)=xxixk+ixiBik+xk+i+1xxk+i+1xi+1Bi+1k(x)
이 문제로 시작하는 데 문제가 있습니다. 재귀가 "맨 위"또는 "아래"에서 시작할 수 있기 때문에 일반적인 작가 블록 유형의 항목이 실행되지 않습니다. 내가해야 할 일에 대한 내 마음.
Bi1(x)={1for xix<xi+10otherwise

답변:




4

솔직히 이것이 얼마나 효율적인지 모르지만 그것을하는 한 가지 방법은 C ++ 템플릿을 사용하는 것입니다.

차수는 k이고, t는 매듭 구조이며, x는 원하는 값입니다.

template <int k> 
real BSpline(real x, real *t)
{
    if (*t <= x && x < *(t+k))
    {
        real a = (x - *t) / (*(t+k-1) - *t);
        real b = (*(t+k) - x) / (*(t+k) - *(t+1));

        return a * BSpline<k-1>(x, t) + b * BSpline<k-1>(x, (t+1));
    }
    else
        return 0;
};

template <>
real BSpline<1>(real x, real *t)
{
    if (*t <= x && x < *(t+1))
        return 1.;
    else
        return 0.;
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.