如何在C ++中构建递归样条函数


10

目前,我正在研究一种称为基样条搭配的微分方程求解方法。我遇到的麻烦是建立一种建立任意阶样条的方法,关系为 ,初始条件 B 1 ix={ 1

一世ķ+1个X=X-X一世Xķ+一世-X一世一世ķ+Xķ+一世+1个-XXķ+一世+1个-X一世+1个一世+1个ķX
,我什至从这个问题开始就遇到了麻烦,因为它是递归的,可能是从“顶部”或“底部”开始的,并且我遇到了一般作家的事情,而我无法我围绕我需要做的事情。
一世1个X={1个对于 X一世X<X一世+1个0除此以外

Answers:




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.;
};
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.