已知一组数据点,编写一程序求解三次样条插值函数满足
并针对下面一组具体实验数据
求解,其中边界条件为.
解:Matlab计算程序为:
clear
clc
x=[0.25 0.3 0.39 0.45 0.53]
y=[0.5000 0.5477 0.6245 0.6708 0.7280]
n=length(x);
for i=1:n-1
h(i)=x(i+1)-x(i);
end
for i=1:n-2
k(i)=h(i+1)/(h(i)+h(i+1));
u(i)=h(i)/(h(i)+h(i+1));
end
for i=1:n-2
gl(i)=3*(u(i)*(y(i+2)-y(i+1))/h(i+1)+k(i)*(y(i+1)-y(i))/h(i));
end
g0=3*(y(2)-y(1))/h(1);
g00=3*(y(n)-y(n-1))/h(n-1);
g=[g0 gl g00];
g=transpose(g)
k1=[k 1];
u1=[1 u];
Q=2*eye(5)+diag(u1,1)+diag(k1,-1)
m=transpose(Q\g)
syms X;
for i=1:n-1
p1(i)=(1+2*(X-x(i))/h(i))*((X-x(i+1))/h(i))^2*y(i);
p2(i)=(1-2*(X-x(i+1))/h(i))*((X-x(i))/h(i))^2*y(i+1);
p3(i)=(X-x(i))*((X-x(i+1))/h(i))^2*m(i);
p4(i)=(X-x(i+1))*((X-x(i))/h(i))^2*m(i+1);