C ++で再帰的スプライン関数を作成する方法


10

現在、私は基底スプライン選点と呼ばれる微分方程式解法に取り組んでいます。私が問題を抱えているのは、という関係で、任意次数のスプラインを作成するメソッドを作成することです と初期条件 そして、この問題は「上部」または「下部」のどちらからでも再帰的に開始される可能性があるため、この問題から始めても問題があり、一般的なライターブロックタイプに遭遇しています何が必要なのか気になっていないところです。B 1 ix={ 1

Bk+1バツ=バツバツバツk+バツBk+バツk++1バツバツk++1バツ+1B+1kバツ
B1バツ={1ために バツバツ<バツ+10そうでなければ

回答:




4

正直言って、これがどれほど効率的かはわかりませんが、それを行う1つの方法は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.