三次样条插值实验报告
画图:
x1=0:.01:1;y1=polyval(S1(1,:),x1-X(1)); x2=1:.01:2;y2=polyval(S1(2,:),x2-X(2)); x3=2:.01:3;y3=polyval(S1(3,:),x3-X(3)); x4=3:.01:4;y4=polyval(S1(4,:),x4-X(4)); x5=4:.01:5;y5=polyval(S1(5,:),x5-X(5)); x6=5:.01:6;y6=polyval(S1(6,:),x6-X(6)); >> plot(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,X,Y,'.') >> hold on >> x1=0:.01:1;y1=polyval(S2(1,:),x1-X(1)); x2=1:.01:2;y2=polyval(S2(2,:),x2-X(2)); x3=2:.01:3;y3=polyval(S2(3,:),x3-X(3)); x4=3:.01:4;y4=polyval(S2(4,:),x4-X(4)); x5=4:.01:5;y5=polyval(S2(5,:),x5-X(5)); x6=5:.01:6;y6=polyval(S2(6,:),x6-X(6)); >> plot(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,X,Y,'.') >> hold on >> x1=0:.01:1;y1=polyval(S3(1,:),x1-X(1)); x2=1:.01:2;y2=polyval(S3(2,:),x2-X(2)); x3=2:.01:3;y3=polyval(S3(3,:),x3-X(3)); x4=3:.01:4;y4=polyval(S3(4,:),x4-X(4)); x5=4:.01:5;y5=polyval(S3(5,:),x5-X(5)); x6=5:.01:6;y6=polyval(S3(6,:),x6-X(6)); >> plot(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,X,Y,'.')
csfit2:第二类边界条件
function S=csfit2(X,Y,dx0,dxn) N=length(X)-1; H=diff(X); D=diff(Y)./H; A=H(2:N-1); B=2*(H(1:N-1)+H(2:N)); C=H(2:N); C=H(2:N); U=6*diff(D); U(1)=U(1)-dx0; U(N-1)=U(N-1)-dxn;
三次样条插值 实验报告
专业 班级 学号 姓名
1、 实验内容和要求
1、阅读上面的文字和程序,试运行,检验程序和上面叙述的 正确性。
2、阅读上面的 MATLAB 程序;查资料,了解各 MATLAB 语句 及命令。
3、画程序流程图,理解并描述算法。 4、修改上面的程序,能根据给定数据点,求 (1)自然样条插值,边界 ,= = (2)第二类边界条件,是确定的。 5、使用上面的程序,根据数据点(0,1),(1,0),(2, 0),(3,1),(4,2), (5,2),和(6,1),求三种不同的三次样条插值,其中, =-1.8,在同一坐标系中,画出这 3 个三次样条插值和这些数据 点。
for k=2:N-1 temp=A(k-1)/B(k-1); B(k)=B(k)-temp*C(k-1); U(k)=U(k)-temp*U(k-1); End
M(N)=U(N-1)/B(N-1); for k=N-2:-1:1 M(k+1)=(U(k)-C(k)*M(k+2))/B(k); End
(3)
将
代入上(3),并使用
,可分别得到包含
的方程:
(4)
求解这两个方程,求出
,而且将这些
值代入方程(3)中,可得到三次多项式方程:
(5)
表达式5可以简化成只包含未知系数
的
形式。
为求这些值,必须使用(5)式的导数,即
(6)
在 处计算(6),并简化结果可得到
,其中
(7)
同理,在式(6)中用
并
计算在 处的解,可得
B(1)=B(1)-H(1)/2; U(1)=U(1)-3*(D(1)-dx0); B(N-1)=B(N-1)-H(N)/2; U(N-1)=U(N-1)-3*(dxn-D(N)); for k=2:N-1
temp=A(k-1)/B(k-1); B(k)=B(k)-temp*C(k-1); U(k)=U(k)-temp*U(k-1); End
6、写实验报告(实验内容+算法描述+程序+写成分段函数的结 果描述+截图)。
2、 算法说明
定义:设有N+1个点
,其中
。如果存在
N个三次多项式 ,系数为
,满足如下性质: (1) (2) (3)
则称函数 为三次样条函数。 因为 是分段三次多项式,所以
区间 上是分段线性的。
用 上式,可得
在
(1) 代入
(2) 将(2)式积分两次,会引入两个积分常数,并 得到
4、 实验结果
第一类边界条件:
第二类边界条件:
自然边界条件:
图像:
5、 说明与分析
实验结果显示,对同一组数据,不同边界条件,会导致形成曲线有 一定差距,但总体趋势不变
M(N)=U(N-1)/B(N-1); for k=N-2:-1:1 M(k+1)=(U(k)-C(k)*M(k+2))/B(k); End M(1)=3*(D(1)-dx0)/H(1)-M(2)/2;
M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2; for k=0:N-1 S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1)); S(k+1,2)=M(k+1)/2; S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1); end
(8)
ቤተ መጻሕፍቲ ባይዱ
利用节点处一阶导函数连续及方程(6)、
(7),可得到包含
的重要关系式
(9)
其中
方程组(9)中的未知数是要求的值
,其
他的项可通过数据点集
进行简单的计算
得到的常量。因此方程(9)是包含N+1个未知数,
具有N-1个线性方程的不定方程组。所以需要另外
两个方程组才能求解,即边界条件。
如果已知
,则
(10)
M(1)=dx0; M(N+1)=dxn; for k=0:N-1
S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1)); S(k+1,2)=M(k+1)/2; S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1); end
(11)
根据(9)(10)求出 公式计算 的样条系数
,,,,,
后,可利用下面的 。
3、 源程序
csfit1:第一类边界条件
function S=csfit1(X,Y,dx0,dxn) N=length(X)-1; H=diff(X); D=diff(Y)./H; A=H(2:N-1); B=2*(H(1:N-1)+H(2:N)); C=H(2:N); C=H(2:N); U=6*diff(D);