Interpolation_Spline0.m:
function yy = Interpolation_Spline0(x, y, xx)
n = length(x);
a = y(1 : end - 1);
b = zeros(n - 1, 1);
d = zeros(n - 1, 1);
dx = diff(x);
dy = diff(y);
A = zeros(n);
B = zeros(n, 1);
A(1, 1) = 1;
A(n, n) = 1;
for i = 2 : n - 1
A(i, i - 1) = dx(i - 1);
A(i, i) = 2*(dx(i - 1) + dx(i));
A(i, i + 1) = dx(i);
B(i) = 3*(dy(i) / dx(i) - dy(i - 1) / dx(i - 1));
end
c = A \ B;
for i = 1 : n - 1
d(i) = (c(i + 1) - c(i)) / (3 * dx(i));
b(i) = dy(i) / dx(i) - dx(i)*(2*c(i) + c(i + 1)) / 3;
end
[mm, nn] = size(xx);
yy = zeros(mm, nn);
for i = 1 : mm*nn
for ii = 1 : n - 1
if xx(i) >= x(ii) && xx(i) < x(ii + 1)
j = ii;
break;
else if xx(i) == x(n)
j = n - 1;
end
end
yy(i) = a(j) + b(j)*(xx(i) - x(j)) + c(j)*(xx(i) - x(j))^2 + d(j)*(xx(i) - x(j))^3;
end
yt1.m:
function y=yt1(x0,y0,f_0,f_n,x)
n=length(x0);
z=length(y0);
h=zeros(n-1,1);
k=zeros(n-2,1);
l=zeros(n-2,1);
S=2*eye(n);
for i=1:n-1
h(i)=x0(i+1)-x0(i);
end
for i=1:n-2
k(i)=h(i+1)/(h(i+1)+h(i));
l(i)=1-k(i);
end
k=[1;k];
l=[l;1];
for i=1:n-1
S(i,i+1)=k(i);
S(i+1,i)=l(i);
end
F=zeros(n-1,2);
for i=1:n-1
F(i,1)=(y0(i+1)-y0(i))/(x0(i+1)-x0(i));
end
D=zeros(n-2,1);
for i = 1:n-2
F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));
D(i,1) = 6 * F(i,2);
end
d0 = 6*(F(1,2)-f_0)/h(1);
dn = 6*(f_n-F(n-1,2))/h(n-1);
D = [d0;D;dn];
m= S\D;
for i = 1:length(x)
for j = 1:n-1
if (x(i)<=x0(j+1))&(x(i)>=x0(j))
y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...
(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...
(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+...
(y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ;
break;
else continue;
end
end
end
x=[];%已有年份
>> y=[];%文化價值
>> xx=[];%想要的年份
>> yy = Interpolation_Spline0(x, y, xx)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/58372.html
標籤:新技術前沿
