偶然看到Python上有B样条基函数,心血来潮用Matlab实现一遍
Cox-de Boor递归公式:
其中这个递推公式分为0次和更高次,其中ti表示节点,对于k次的样条,至少需要k+1个系数,所以n≥k+1。
Matlab实现B样条基函数为:
function result =Base(x, k, i, t)
if k == 0
if t(i) <= x && x < t(i+1)
result = 1;
else
result=0;
end
end
if t(i+k) == t(i)
c1 = 0;
else
c1 = (x - t(i))/(t(i+k) - t(i)) * Base(x, k-1, i, t);
end
if t(i+k+1) == t(i+1)
c2 = 0;
else
c2 = (t(i+k+1) - x)/(t(i+k+1) - t(i+1)) * Base(x, k-1, i+1, t);
result = c1 + c2;
end