%三次样条差值-matlab通用程序 - zhangxiaolu2015的专栏 - CSDN博客 https://blog.csdn.net/zha
%【图文】三次样条插值算法详解_百度文库 https://wenku.baidu.com/view/14423f2e1711cc7931b716
clc
clear
x=input('请按照格式[x1,x2,x3...]格式输入y=f(x)函数已知点的横坐标xi='); %三次样条差值函数
y=input('请按照格式[y1,y2,y3...]格式输入y=f(x)函数已知点对应的纵坐标yi=');
x
x = 1x4 double
1 2 4 5
y
y = 1x4 double
1 3 4 2
n=size(x,2); %特别注意,matlab中的矩阵编号是从1开始的,而教材上的矩阵编号是从0开始的,即本程序
for k=2:n %计算h(i)
h(k-1)=x(k)-x(k-1);
end
for k=1:(n-2) %计算μ和λ
mu(k)=h(k)/(h(k)+h(k+1));
lambda(k)=1-mu(k);
end
mu
mu = 1x2 double
0.3333 0.6667
lambda
lambda = 1x2 double
0.6667 0.3333
以上无论是M还是m关系式矩阵通用。
for k=1:(n-2)
g(k)=3*(lambda(k)*(y(k+1)-y(k))/h(k)+mu(k)*(y(k+2)-y(k+1))/h(k+1)); %计算g(1)到g(n-2)
end
g
g =
-1.288728000000000 -2.093712750000000 -3.177727125000001
fprintf('边界条件类型选择:\n1.已知f(a)和f(b)的二阶导数\n2.已知f(a)和f(b)的一阶导数\n');
边界条件类