Micha: B-Spline, letzter Funktionswert immer Null.

Beitrag lesen

Hallo,

ich denke, ich konnte das Problem lösen. Die Bestimmung der Polynome erfolgt ja immer im Intervall [a,b[. Die zweite Schranke ist daher nicht im Intervall selbst enthalten und wird beim nächsten Polynom mit erfasst [b,c[. Im letzten Intervall fehlt folglich der letzte Grenzwert, der, da es kein weiteres Polynom gibt, nicht berücksichtigt wird. Ich habe daher die Funktion BSplinePolynom modifiziert, dass diese nun prüft, ob es sich um die letzte Intervallsschranke handelt. Der Code sieht wie folgt aus:

[code=Matlab]
function N = BSplinePolynom(i,p,T,t,p0)
    if (nargin==4)
        p0 = p;
    end

if (p==1)
        if (T(i)<=t && t<T(i+1)) || (t==T(i+1) && i+p0 == length(T))
            N=1;
            return;
        else
            N=0;
            return;
        end
    end

N = 0;
    if (T(i+p-1) - T(i) ~= 0)
        N = (t-T(i)) / (T(i+p-1) - T(i)) * BSplinePolynom(i,p-1,T,t,p0);
    end

if (T(i+p) - T(i+1) ~= 0)
        N = N + (T(i+p)-t) / (T(i+p) - T(i+1)) * BSplinePolynom(i+1,p-1,T,t,p0);
    end
    return;
end [/code]

Ich hoffe, es passt nun. ;-)

Mit freundlichem Gruß
Micha