我必须在 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
它几乎可以工作,但就像插值开始的时间比预期的要晚。 我做错了什么,我该如何解决?