数值分析课程设计(三次样条插值)
《数值分析课程设计》
报告
专业:
学号:
学生姓名:
指导教师:
7.掌握三次样条插值函数的构造方法,体会三次样条插值函数对被逼近函数的近似。
三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。
以第1 边界条件为例,
用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。
通过Matlab 编制三次样条函数的通用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图。
引言
分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。
利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。
故给出分段三次样条插值的构造过程算法步骤,利用Matlab软件编写三次样条插值函数通用程序,并通过数值算例证明程序的正确性。
三次样条函数的定义及特征
定义:设[a,b] 上有插值节点,a=x1<x2<…x n=b,对应函数值为y1,y2,⋯y n。
若函数S(x) 满足S(x j) =y j (j =1,2, ⋯,n ),S(x) 在[x j,x j+1] (j =1,2,⋯,n-1)上都是不高于三的多项式(为了与其对应j 从1 开始,在Matlab 中元素脚标从1 开始)。
当S(x) 在[a,b] 具有二阶连续导数。
则称S(x) 为三次样条插值函数。
要求S(x) 只需在每个子区间[x j,x j+1] 上确定1 个三次多项式,设为:
Sj(x)=ajx3+bjx2+cjx+dj, (j=1,2,⋯,n-1) (1)
其中a j,b j,c j,d j 待定,并要使它满足:
S(x j)=y j, S(x j-0)=S(x j+0), (j=2,⋯,n-1) (2)
S'(x j-0)=S'(x j+0), S"(x j-0)=S"(x j+0), (j=2,⋯,n-1) (3)
式(2)、(3)共给出n+3(n-2)=4n-6 个条件,
需要待定4(n-1) 个系数,因此要唯一确定三次插值函数,还要附加2 个边界条件。
通常由实际问题对三次样条插值在端点的状态要求给出。
常用边界的条件有以下3 类。
第1 类边界条件:给定端点处的一阶导数值,S'(x1)=y1',S'(x n)=y n'。
第 2 类边界条件:给定端点处的二阶导数值,S"(x1)=y1",S"(x n)=y n"。
特殊情况y1"=y n"=0,称为自然边界条件。
第3 类边界条件是周期性条件,如果y=f(x)是以b-a 为周期的函数,于是S(x) 在端点处满足条件S'(x1+0)=S'(x n-0),S"(x+0)=S"(x n-0)。
下以第1 边界条件为例,利用节点处二阶导数来表示三次样条插值函数,给出具体的推导过程。
2 三次样条插值函数的推导过程
注意到S(x) 在[x j, x j+1](j=1,2,⋯,n-1)上是三次多项式,于是S"(x)在[x j, x j+1] 上是一次多项式,如果S"(x) 在[x j,x j+1](j=1,2,⋯,n-1)两端点上的值已知,设S"(x j)=M j,S"(x j+1)=M j+1,其中h j =x j+1-x j,对S"(x) 进行两次积分,则得到1 个具有2个任意常数A j,B j 的S(x) 表达式。
对S"(x) 求两次积分
4 三次样条插值函数的Matlab 程序设计在Matlab[3]环境下根据上述算法步骤进行编程,源程序如下:
function []=spline3(X,Y,dY,x0,m)
N=size(X,2);
s0=dY(1); sN=dY(2);
interval=0.025;
disp('x0为插值点')
x0
h=zeros(1,N-1);
for i=1:N-1 h(1,i)=X(i+1)-X(i); end
d(1,1)=6*((Y(1,2)-Y(1,1))/h(1,1)-s0)/h(1,1);
d(N,1)=6*(sN-(Y(1,N)-Y(1,N-1))/h(1,N-1))/h(1,N-1);
for i=2:N-1
d(i,1)=6*((Y(1,i+1)-Y(1,i))/h(1,i)-(Y(1,i)-Y(1,i-1))
/h(1,i-1))/ (h(1,i)+h(1,i-1)); endmu=zeros(1,N-1); md=zeros(1,N-1);
md(1,N-1)=1; mu(1,1)=1;
for i=1:N-2
u=h(1,i+1)/(h(1,i)+h(1,i+1)); mu(1,i+1)=u;
md(1,i)=1-u; end
p(1,1)=2; q(1,1)=mu(1,1)/2;
for i=2:N-1
p(1,i)=2-md(1,i-1)*q(1,i-1); q(1,i)=mu(1,i)/p(1,i); end
p(1,N)=2-md(1,N-1)*q(1,N-1);
y=zeros(1,N); y(1,1)=d(1)/2;
for i=2:N y(1,i)=(d(i)-md(1,i-1)*y(1,i-1))/p(1,i); end
x=zeros(1,N); x(1,N)=y(1,N);
for i=N-1:-1:1 x(1,i)=y(1,i)-q(1,i)*x(1,i+1); end
fprintf ('M为三对角方程的解\n'); M=x;
fprintf ('\n');
syms t;
digits (m);
for i=1:N-1
pp(i)=M(i)*(X(i+1)-t)^3/(6*h(i))+M(i+1)*(t-X(i))^3
/(6*h(i))+(Y(i)-M(i)*h(i)^2/6)*(X(i+1)-t)/h(i)+
(Y(i+1)-M(i+1)*h(i)^2/6)*(t-X(i))/h(i);
pp(i)=simplify(pp(i)); coeff=sym2poly(pp(i));
if length(coeff)~=4
tt=coeff(1:3); coeff(1:4)=0; coeff(2:4)=tt; end
if x0>X(i)&x0<X(i+1) L=i;
y0=coeff(1)*x0^3+coeff(2)*x0^2+coeff(3)*x0+coeff(4);
end
val=X(i):interval:X(i+1);
for k=1:length(val)
fval(k)=coeff(1)*val(k)^3+coeff(2)*val(k)^2+coeff(3)*val(k)+coeff(4); end if mod(i,2)==1 plot(val,fval,'r+')
else plot(val,fval,'b.') end
hold on
clear val fval
ans=sym(coeff,'d');
ans=poly2sym(ans,'t');
fprintf('在区间[%f,%f]内\n',X(i),X(i+1));
fprintf('三次样条函数S(%d)=',i);
pretty(ans); end
fprintf ('x0所在区间为[%f,%f]\n',X(L),X(L+1));
fprintf ('函数在插值点x0=%f的值为\n',x0);
y0
程序中:X,Y 为输入结点,dY 为两端点一阶导数矩阵,x0 为待求插值点,m 为有效数字位数。
应用实例[1]:已知函数y=f(x)的函数值如表1。
x0 为插值点x0=1.5;M 为三对角方程的解M=-5.0000 4.0000 4.0000 16.0000 在区间[-1.5,0.0] 内,三次样条函数S(1) = t3 + 2t2 1;在区间[0.0,1.0]内,三次样条函数S(2) = 2t2 1;在区间[1.0,2.0]内,三次样条函数S(3) = 2t3 4t2 + 6t 3。
5 结论
Matlab 环境下编写求解三次样条插值的通用程序,可直接显示各区间段三次样条函数的具体表达式,计算出已给点的插值,最后显示各区间分段曲线图,为三次样条插值函数的应用
1.3 运行结果
8
提供简便方法。
参考文献:
[1] 易大义, 沈云宝, 李有法. 计算方法[M]. 浙江: 浙江大学出版社. 2002, (6): 55-63.
[2] 谢文龙. 三次样条函数的构造方法[J]. 江南学院学报,2000, (6).
[3] 张铮, 杨文平, 石博强, 等. MATLAB 程序设计与实例应用[M]. 北京: 中国铁道出版社, 2003.。
数值分析实验报告-插值、三次样条
实验报告:牛顿差值多项式&三次样条问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1. 认真分析问题,深刻理解相关理论知识并能熟练应用;2. 编写相关程序并进行实验;3. 调试程序,得到最终结果;4. 分析解释实验结果;5. 按照要求完成实验报告。
实验原理:详见《数值分析 第5版》第二章相关内容。
实验内容:(1)牛顿插值多项式1.1 当n=10时:在Matlab 下编写代码完成计算和画图。
结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.^2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p ;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x^2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0202e-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
(精品)数值分析课程设计-三次样条插值
《数值分析课程设计-三次样条插值》报告掌握三次样条插值函数的构造方法,体会三次样条插值函数对被逼近函数的近似。
三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。
以第1 边界条件为例,用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。
通过Matlab 编制三次样条函数的通用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图。
引言分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。
利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。
故给出分段三次样条插值的构造过程算法步骤,利用Matlab软件编写三次样条插值函数通用程序,并通过数值算例证明程序的正确性。
三次样条函数的定义及特征定义:设[a,b] 上有插值节点,a=x1<x2<…xn=b,对应函数值为y1,y2,⋯yn。
若函数S(x) 满足S(xj) = yj ( j = 1,2, ⋯,n ), S(x) 在[xj,xj+1] ( j =1,2,⋯,n-1)上都是不高于三的多项式(为了与其对应j 从1 开始,在Matlab 中元素脚标从1 开始)。
当S(x) 在 [a,b] 具有二阶连续导数。
则称S(x) 为三次样条插值函数。
要求S(x) 只需在每个子区间[xj,xj+1] 上确定 1 个三次多项式,设为:Sj(x)=ajx3+bjx2+cjx+dj, (j=1,2,⋯,n-1) (1)其中aj,bj,cj,dj 待定,并要使它满足:S(xj)=yj, S(xj-0)=S(xj+0), (j=2,⋯,n-1) (2)S'(xj-0)=S'(xj+0), S"(xj-0)=S"(xj+0), (j=2,⋯,n-1) (3)式(2)、(3)共给出n+3(n-2)=4n-6 个条件,需要待定4(n-1) 个系数,因此要唯一确定三次插值函数,还要附加2个边界条件。
数值分析课程设计报告书三次样条插值的三弯矩法
数值分析课程设计报告书院系名称:学生姓名:专业名称:班级:时间:实验一 三次样条插值的三弯矩法一、实验目的已知数据i x ,()i i y f x =,0,,i n =及边界条件()n j x y j j 1,0),(2=,求)(x f 的三次样条插值函数)(x S .要求输出用追赶法解出的弯矩向量0[,,]n M M M =及()(),0,,,0,1,2k i S t i m k ==的值.画出)(x S y =的图形,图形中描出插值点(,)i i x y 及(,())i i t S t 分别用‘o ’和‘*’标记.二、实验原理1.用追赶法求解第二类边界条件的三弯矩方程:0010012111121111[,,]21[,,]26[,,]212[,,]n n n n n n n n n n f x x x M f x x x M M f x x x M f x x x μλμλ------⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 其中1111,,j jj j j j j j j j j h h h x x h h h h μλ-+--===-++.2.得出样条函数表达式:332211111()()()()()6666j j j j j j j j j j j j j j j jx x x x M h x x M h x x S x M M y y h h h h +++++----=++-+-. 3.计算(k)(),0,,,0,1,2i S t i m k ==.三、实验结果所用数据:x=[-2.223,-1.987,-1.8465,-1.292,-1.2266,-1.1056,-0.8662,-0.6594,-0.2671,-0.0452,0.5385,1.2564,1.4398,1.5415,1.7646,1.9678,2.236];y=[0.83995,1.1696,1.3141,1.6992,1.7312,1.7847,1.8708,1.9262,1.9881,1.9997,1.9511,1.7169,1.618,1.5543,1.3871,1.191,0.81662];d2s1= -4.5000;d2sn= -4.8967; %第二种边界条件t=[-2.223,-1.9443,-1.6656,-1.3869,-1.1083,-0.82956,-0.55088,-0.27219,0.0065,0.28519,0.56387,0.84256,1.1212,1.3999,1.6786,2.236]; ;(指定计算点)计算结果:-2.5-2-1.5-1-0.500.51 1.52 2.50.811.21.41.61.82四、实验分析通过实验结果我们,知道三弯矩法求出满足初始条件的三次样条函数,与其他插值函数的构造相比,三次样条插值法的计算量要小得多。
C _数值分析_三次样条插值_自动选取步长梯形法_ROMBERG求积法_列主元高斯消去法_列主元LU分解法_JACOBI迭
//系数矩阵 //右端项 //中间项 //输出 //选取列主元的比较器
int i,j,k;
//计数器
void main() {
cout << "请输入线性方程组(ai1,ai2,ai3......ain, yi):"<<endl; for ( i = 0; i < N ;i++) {
for (int j = 0; j< N ;j++ ) cin >> A[i][j];
A[i][j] = A[i][j] - T * A[k][j]; } } } X[N-1] = B[N-1]/A[N-1][N-1]; for (i = N-2; i >=0 ; i--) {
6
double Temp = 0; for (int j = i+1; j<N ;j++)
Temp = Temp + A[i][j] * X[j]; X[i] = (B[i] - Temp) /A[i][i]; } cout << "线性方程组的解(X1,X2,X3......Xn)为:"<<endl; for( i = 0; i < N ;i++) { cout << X[i] <<" "; } } 运行结果截图:
double fun(double a) {
return 2/( 1+a*a ); } double SelfSelLength(double R_a,double R_b,double e) {
double h = (R_b-R_a)/2; double R1 = (fun(R_a)+fun(R_b)) * h; int n = 1; double R0; double S; double E; do //每当误差值不符合要求时,计算下一个 result 值 {
计算方法三次样条插值课程设计
摘要本文细致的讲解了三次样条插值函数的产生及在实际中解决的问题,通过MATLAB的程序编写,可以将复杂的计算省去,直接的给出了三次样条插值的结果与实际结果间的误差,验证实际结果和理论值的一致性。
避免了求解方程中的不必要计算,使求解效率得到显著的提高。
关键词插值函数三次样条插值 MATLAB1 三次样条插值函数概论当插值节点很多时,插值多项式的次数就会很高,这不仅增大了计算量,还会影响结果的精确度.虽然可以采用上述分段插值,但是主要缺点就是个分段接头处不光滑,插值函数的导数不连续,因此想构造这样的插值:既能分段的低次插值,又能保证接头处的光滑,就产生了三次样条插值函数.1.1定义设函数()f x 市区间[a,b]上的二次连续可微函数,在区间[a,b]上给处一个划分。
设函数()f x 是区间[a,b]上的一个划分011...n n a x x x x b -∆=<<<<=如果函数()S x 满足条件(1)在每个小区间1[,]k k x x +(k=1,2,….,n )上()S x 是一个部超过m 次的多项式。
(2)在节点k x (k=1,2,….,n )处具有m-1阶的连续导数。
(3)()()(0,1,2,...)j j s x f x j n ==1.2三次样条差值函数的构造由于三次样条插值我、函数s(x)的插值节点处的二阶导数存在,因此令各节点处的二阶导数为'()(0,1,...,)k s x m k n == (1.01)根据样条插值函数的定义,三次样条插值函数是s(x)在每一个小区间)1....,1,0](,[]1-=+n k x x k k 上市不超过三次的多项式。
在每一个小区间)1....,1,0](,[]1-=+n k x x k k 上,其二阶导数为线性函数,即''1111()k kk k k k k kx x x x s x m m x x x x ++++--=+-- (1.02)对式(1.02)积分两次,则得到k k k kk k k k k b x x a h x x m h x x m x s +-+-++=++)(6)(6)()(3131 (1.03)其中k k k k k b a x x h ,,1-=+为任意常数。
三次样条插值的方法和思路
三次样条插值的方法和思路摘要:1.三次样条插值的基本概念2.三次样条插值的数学原理3.三次样条插值的实现步骤4.三次样条插值的优缺点5.三次样条插值在实际应用中的案例正文:在日常的科学研究和工程应用中,我们经常会遇到需要对一组数据进行插值的问题。
插值方法有很多,其中三次样条插值是一种常见且有效的方法。
本文将从基本概念、数学原理、实现步骤、优缺点以及实际应用案例等方面,全面介绍三次样条插值的方法和思路。
一、三次样条插值的基本概念三次样条插值(Cubic Spline Interpolation)是一种基于分段多项式的插值方法。
它通过在各个节点上构建一条三次多项式曲线,使得这条曲线在节点之间满足插值条件,从而达到拟合数据的目的。
二、三次样条插值的数学原理三次样条插值的数学原理可以分为两个部分:一是分段三次多项式的构建,二是插值条件的满足。
1.分段三次多项式的构建假设有一组数据点序列为(x0,y0),(x1,y1),(x2,y2),(x3,y3),我们可以将这些数据点连接起来,构建一条分段三次多项式曲线。
分段三次多项式在每个子区间上都是一个三次多项式,它们之间通过节点值进行连接。
2.插值条件的满足为了使分段三次多项式在节点之间满足插值条件,我们需要在每个子区间上满足以下四个条件:(1)端点条件:三次多项式在区间的端点上分别等于节点值;(2)二阶导数条件:三次多项式在区间内的二阶导数等于节点间的斜率;(3)三阶导数条件:三次多项式在区间内的三阶导数等于节点间的曲率;(4)内部点条件:三次多项式在区间内部满足插值函数的连续性。
通过求解这四个条件,我们可以得到分段三次多项式的系数,从而实现插值。
三、三次样条插值的实现步骤1.确定插值节点:根据数据点的位置,选取合适的节点;2.构建分段三次多项式:根据节点值和插值条件,求解分段三次多项式的系数;3.计算插值结果:将待插值点的横坐标代入分段三次多项式,得到插值结果。
三次样条插值方法的应用
CENTRAL SOUTH UNIVERSITY数值分析实验报告三次样条插值方法的应用一、问题背景分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。
样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。
下面我们讨论最常用的三次样条函数及其应用。
二、数学模型样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。
设区间[]b ,a 上给定有关划分b x x n =<<<=Λ10x a ,S 为[]b ,a 上满足下面条件的函数。
● )(b a C S ,2∈;● S 在每个子区间[]1,+i i x x 上是三次多项式。
则称S 为关于划分的三次样条函数。
常用的三次样条函数的边界条件有三种类型:● Ⅰ型 ()()n n n f x S f x S ''0'',==。
● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。
● Ⅲ型 ()()Λ3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。
鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。
三、算法及流程按照传统的编程方法,可将公式直接转换为MATLAB可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB在矩阵运算上的优势。
数值分析三次样条插值
0
2
1
n1
1
n2
2 n1
M d 0
MM dd n2 M d 2
1 1 2 2
n1 n1 n n
di f xi2, xi1, xi
华长生制作
7
2、 三弯矩构造法
三次样条插值函数 S( x) 可以有多种表达式,有时用二阶导数
值S( xi) Mi (i 0,1,, n)
Mi
xi
表示时,使用更方便。 在力学上解释
为细M梁i 在 S处( x的) 弯矩,并且得到的弯矩与相邻两个弯矩有关,故
称用由于表S(示x)在区间的算[x法i , x为i三1](弯i 矩0,算1,法,。n 1) 上是三次多项式,
hn
n1 3
Mn
f
x0 , x1 f
xn1, xn
其中
0
h1 h1h n
1
0 ,
hn , 0 hnh0
d1
6(
f
[
x
,
0
x1]
f
x[ , n1
x
n])(h1
h
n)
1
.
可解出 M i (i 0,1,, n) ,方程组的矩阵形式为
2
hi
min hi
,M4
max x[a,b]
f (4) (x)
1in
华长生制作
16
精品课件!
精品课件!
可见S(x), S(x)和S(x)在[a,b]上一致收敛到f (x), f (x)和f (x)
(完整word版)数值分析作业-三次样条插值..0001
数值计算方法作业实验4.3三次样条差值函数实验目的:掌握三次样条插值函数的三弯矩方法实验函数:求和的近似值实验内容:(1) 编程实现求三次样条插值函数的算法,分别考虑不同的边界条件;(2) 计算各插值节点的弯矩值;(3) 在同一坐标系中绘制函数f(x),插值多项式,三次样条插值多项式的曲线比较插值结果。
实验4.5三次样条差值函数的收敛性实验目的:多项式插值不一定是收敛的,即插值的节点多,效果不一定好。
对三次样条插值函数如何呢?理论上证明三次样条插值函数的收敛性是比较困难的,通过本实验可以证明这一理论结果。
实验内容:按照一定的规则分别选择等距或非等距的插值节点,并不断增加插值节点的个数。
实验要求:(1)随着节点个数的增加,比较被逼近函数和三样条插值函数的误差变化情况,分析所得结果并与拉格朗日插值多项式比较;(2)三次样条插值函数的思想最早产生于工业部门。
作为工业应用的例子,考虑如下例子:某汽车制造商根据三次样条插值函数设计车门曲线, 其中一 段数据X k 0 1 23 4 5678910y k 0.00.79 1.532.19 2.713.03 3.27 2.89 3.06 3.19 3.29y k0.80.2算法描述:拉格朗日插值:错误!未找到引用源。
n(x _ X ) 其中错误!未找到引用源。
是拉格朗日基函数,其表达式为:h(x)」j=0 (x i- X j )牛顿插值:N n (x) =f (X g ) f[X o ,X i ](X -xO) f[X o ,X i ,X 2〕(X - xO)(x - X i ) •…f[X g ,X i ...X n ] =(f[X i ,X 2,...X n ] - f [ X 。
,为,..人」)/(X . - X g )三样条插值:所谓三次样条插值多项式Sn(x)是一种分段函数,它在节点Xi(a<X0<X1……<Xn<b)分成的每个小区间[x i-i ,x i ]上是三次多项式,其在此区间 上的表达式如下:f[X °,X i ,X 2,...X n ](X -X °)(X -X i )...(X-Xn J )f [X i , X j ]f (X i ) - f (X j ) X i -X jf [X i , X j ,X k]=其中*.f[X j ,X k ] - f[K ,X j ]X k -X iS(x)二 M 3(X i -x) 6h i.Mi (x —Xy )3 . [ y i - y i4 h i (M i - My)6h i h i 6 h ih i M i 4 h i M iy i- 6)( 6*,皿"]因此,只要确定了 Mi 的值,就确定了整个表达式,Mi 的计算方法如下:i 4式中 Mi= S (X i ).则Mi 满足如下n-1个方程:7 M i 」■ 2M i …冷 M i i = di , i =1,2,...n —'1 常用的边界条件有如下几类:(1)给定区间两端点的斜率 m o ,m n ,即s(x 0) = y 0 =m 0,S(x n ) = y n = m n(2) 给定区间两端点的二阶导数 MO ,Mn,即S (XcH y 。
东南大学数值分析第四章三次样条插值
第四章 多项式插值与函数最佳逼近——曲线拟合之3次样条插值*****(学号) *****(姓名)上机题目要求见教材P195,37题。
一、算法原理题目要求编写第一边界条件的3次样条插值函数的通用程序,同时根据汽车门曲线值点构造三次紧压样条曲线函数()S x 。
其基本原理如下 定义设0{(,)}Nk k k x y =有N+1个点,其中01N a x x x b =<<<<。
如果存在N 个三次多项式()k S x ,系数为,0,1,2,3,,k k k k S S S S 和满足如下性质:23,0,1,2,3()()()()k k k k k k k k S x s s x x s x x s x x =+-+-+- (1)111''111''''111(), 0,1,...,()(), 0,1,...,2()(), 0,1,...,2()(), 0,1,...,2k k k k k k k k k k k k k k S x y for k N S x S x for k N S x S x for k N S x S x for k N +++++++++====-==-==- (2)则成()S x 为三次样条函数。
现证明其存在:由于()S x 是分段三次多项式,其二阶导数是在区间0[,]N x x 内是分段线性的。
根据线性拉格朗日插值"()"()k S x S x =可以表示为:11111"()"()"()k k k k k k k k kx x x x S x S x S x x x x x +++++--=+--(3)用111(),()k k k k k k k m S x m S x x x +++''===-和h 代入上式,得()()11"()k k k k k k km mS x x x x x h h ++=-+- (4)将上式积分两次,会引入两个积分常数,可得到如下形式:()()33111()()()66k k k k k k k k k k km m S x x x x x p x x q x x h h +++=-+-+-+- (5)将1k k x x +和代入上式,并利用11(), ()k k k k k k y S x y S x ++==可得两个方程:2211 ; 66k k k k k k k k k k m my h p h y h q h ++=+=+ (6)求解,k k p q ,并将所得的结果带入方程(5)得()()3311111()66 ()()66k k k k k k kk k k k k kk k k km m S x x x x x h h y m h y m h x x x x h h +++++=--+-+⎛⎫⎛⎫--+-- ⎪ ⎪⎝⎭⎝⎭(7)求式(7)的导数,并化简得1111112()6(),1,...,1,()/k k k k k k k kk k k k k k kh m h h m h m u u d d k N d y y h ---+-++++==-=-=- 其中 (8)由上述方程可得如下方程011121002()h h m h m u h m ++=- (9) 11112()k k k k k k k k h m h h m h m u ---++++= (10)12211112()N N N N N N N N h m h h m u h m -------++=-(11)重组上述方程,得三角线性方程组=HM V ,表示为11111222223223222111N N N N N N N N N m v b c a b c m v a b m v a b c a b m v ---------⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦(12)该式具有严格对角优势。
