3

MATLAB で B スプラインを再実装する必要があります (自然 B スプラインの補間、3 次) が、B スプラインを自然にするにはいくつか問題があります (これは、補間関数が のS"(a) = S"(b) = 0どこにあるかを意味します)。それが私がこれまでにDe Boorのアルゴリズムを実装したことです:S[a,b]

function [ b ] = deBoore( p,i,x,y )
% p is the degree, i is the index of the bspline
n = length(x);

    if p==0
        b = zeros(1,n);
        for j=1:n
            if y(i)<=x(j) && x(j)<y(i+1)
                b(j) = 1;
            end
        end
    else

       b = (((x-y(i))/(y(i+p)-y(i))).*deBoore(p-1,i,x,y)) ...
           + (((y(i+p+1)-x)/(y(i+p+1)-y(i+1))).*deBoore(p-1,i+1,x,y));
    end

end

したがって、これは問題なく機能するはずですが、補間多項式を次のように構築する必要があります。

function [ sp ] = splineB( p, x, y, f )

m = length(y);
n = length(f);

sp = 0;

    for i=(1):(m-p-1)
       sp = sp + f(i)*deBoore(p,i,x,y);
    end

end

ほとんど機能していますが、補間が想定よりも遅く開始されるようです。 私は何を間違っていますか、どうすれば修正できますか?

4

0 に答える 0