三次样条插值matlab程序代码
依据附件图片上的思想写的三次样条插值:function yy = maspline(x,y,dy0,dyn,xx)
m = length(x);
n = length(y);
if m~=n
error('x与y长度不一致');
end
s = zeros(n+2,1);
a = zeros(n+2,4);
b = zeros(n+2,n-1);
for i =1:n
for j = 1:n-1
if i<j
b(i,j) = 0;
else
b(i,j) = (x(i)-x(j))^3/factorial(3);
end
end
a(i,1) = 1;
a(i,2) = x(i);
a(i,3) = x(i)^2;
a(i,4) = x(i)^3;
s(i) = y(i);
end
a(n+1,1) = 0;
a(n+2,1) = 0;
a(n+1,2:4) =;
a(n+2,2:4) = ;
s(n+1) = dy0;
s(n+2) = dyn;
for i = 1:n-1
if 1>i
b(n+1,i) = (x(1)-x(i))^2/2;
end
end
for i = 1:n-1
if n>i
b(n+2,i) = (x(n)-x(i))^2/2;
end
end
A = ;
e = A\s;
t = ones(1,n-1);
tt = floor(xx);
ti = find(x == tt);
for i = 1:n-1
if i<=ti
t(i) = 0;
else
t(i) = (xx-x(i))^3/factorial(3);
end
end
b = ;
B = ';
yy = e'*B 插值结果不对,帮忙看一下哪里有问题???
页:
[1]