关于三次样条插值函数的学习报告(研究生)资料

合集下载

关于用追赶法求解系数矩阵的三次样条插值实验报告。

关于用追赶法求解系数矩阵的三次样条插值实验报告。

x(n)=y(n); for i=(n-1):-1:1 x(i)=y(i)-u(i)*x(i+1); end 用 matlab 编程如下: function[s,y0]=spline3 (x,y,x0) %x,y 为数表 x0 为插值点 s 表示插值函数 y0 为 x0 对应的插值函数值 syms t n=length(x); %得出 n for i=1:n-1; h(i)=x(i+1)-x(i); end for i=2:n-1; lamda(i)=h(i)/(h(i-1)+h(i)); miu(i)=1-lamda(i); g(i)=3*(lamda(i)*((y(i)-y(i-1))/h(i-1))+miu(i)*((y(i+1)-y( i))/h(i))); end g(1)=3*((y(2)-y(1))/h(1)); g(n)=3*((y(n)-y(n-1))/h(n-1)); %前边求出 lamda miu 和 g 从而可以确定系数矩阵 miu(1)=1; miu(4)=0;
实验 for i=2:(n-1) 内容
L(i)=b(i)-a(i)*u(i-1); y(i)=(d(i)-y(i-1)*a(i))/L(i); u(i)=c(i)/L(i); end L(n)=b(n)-a(n)*u(n-1); y(n)=(d(n)-y(n-1)*a(n))/L(n); %“赶”的过程
数值分析实验报告
实验 名称
关于用追赶法求解系数矩阵的三次样条插值实验报告。
实验 结合求解线性方程组的解。 目的 算法如下:
会 使 用 matlab 语 言 编 程 使 用 追 赶 法 llowup(a,b,c,d) n=length(d); a(1)=0; %“追”的过程 L(1)=b(1); y(1)=d(1)/L(1); u(1)=c(1)/L(1);

样条插值实验报告

样条插值实验报告

四、三次样条插值1. 样条函数插值的原理给定区间[a,b]上划分A:a=x<x<<x<x=b,若分段函数S(x)满足:01n-1n1.S(x)在各个子区间[x,x],i=0,1,,n-1上均为x的三次多项式;ii+12.S(x)在整个区间[a,b]上有直至二阶的连续导数。

则称S(x)为[a,b]上依次划分的三次样条函数,简称样条函数。

具体地有分段表达式:ax3+bx2+cx+d,x G[x,x]000001ax3+bx2+cx+d,x G[x,x]111112S(x)=\ax3+bx2+cx+d,x G[x,x](1)222223ax3+bx2+cx+d,x G[x,x]、°*n-1n—T•••n-1n-1n-1n共有4n个参数a,b,c,d,i=0,1,,n,它们在内节点处满足iiii'S(x)=S(x),…i-0i+0<S'(x)=S'(x),i=1,2,,n-1.(2)i-0i-0S''(x)=S''(x),Ji-0i+0满足样条函数定义的函数集合称为分划A上的三次样条函数空间,记为S(3,A),可以证明S(3,A)为线性空间。

若S(x)G S(3,A),且进一步满足插值条件S(x)=y=f(x),i=0,1,,n(3)iii其中y为节点x处的给定函数值(若被插函数了(x)已知;••则用了(x)代替之),iii则称S(x)为以x,x,,x,x为节点的三次样条函数。

01n-1n其中式(3)插值节点提供了n+1个约束条件;加上式(2)的3n-3个,合起来共有4n-2个;欲求4n个待定参数的唯一解;尚缺两个条件。

这两个条件一般由样条函数的边界条件提供。

常用三类边界条件;他们分别与三次样条函数;构成不同边界条件的样条函数插值问题。

2. 三类样条函数插值问题2.1第二类边界条件给定边界条件两端的一阶导数值:S'(x)=y'=m,S'(x)=y'=m000nnn这相当于样条两短处的方向给定(压铁在两端点的压力方向确定),对应的插值问题如下:对于分划A:a=x<x<<x<x=b,给定节点对应的函数值01n—1ny,y,y,,y,以及两端点处的一阶导数值y'=m,y'=m,求三次样条函数012n00nnS(x),使…f S(x)=y,i=0,1,,n2iiI S'(x)=m,S'(x)=mJ00n…n2.2第一类边界条件给定边界两端的二阶导数值:S''(x)=y''=M,S''(x)=y''=M000nnn这相当于在样条两端处外加一个力矩,使梁两端点处有相应的曲率。

三次样条插值方法的应用

三次样条插值方法的应用

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在矩阵运算上的优势。

LAB03_三次样条插值实验

LAB03_三次样条插值实验

Lab03.三次样条插值实验【实验目的和要求】1.使学生深入理解三次样条插值法,深入进行程序设计能力训练;2.对第一与第二种边界条件,按三弯矩法,通过用Matlab 语言设计计算三次样条插值的程序,以提高学生程序设计的能力。

【实验内容】1.根据Matlab 语言特点,描述三次样条插值法。

2.对第一与第二种边界条件,按三弯矩法,用Matlab 语言设计计算三次样条插值的程序。

3对(1) 自然边界条件0)0.1()2.0(=''=''S S ;(2) 第一种边界条件55741.1)0.1( ,20271.0)2.0(='='S S . 输出用追赶法解出的弯矩向量),,(521M M M 和)1.02.0(i S + (i =0,1,…,8)的值,并画出)(x S y =的图形。

4.完成教材P45例8的计算,并将计算结果与Langrage 插值法计算的结果进行比较,由此说明三次样条插值的优越性。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:2011 年 月 日Lab03.三次样条插值实验一、算法描述1.根据Matlab语言特点,描述三次样条插值法.答: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,则S"(x) 的表达式为:= ,其中h j =x j+1-x j,对S"(x) 进行两次积分,则得到1 个具有2二、程序设计2.对第一与第二种边界条件,按三弯矩法,用Matlab语言设计计算三次样条插值的程序。

Matlab实验报告六(三次样条与分段线性插值)

Matlab实验报告六(三次样条与分段线性插值)
数学与信息科学系实验报告
实验名称插值与拟合
所属课程数学软件与实验
实验类型综合型实验
专业信息与计算科学
班级
学号
姓名
指导教师
一、实验概述
【实验目的】
学会在matlab环境下使用几种不同的插值法和拟合两种方法构造函数依据已经知道的某些特殊点来推测实际问题中需要知道但又不便于测量出来的量。
【实验原理】
1.z=interp2(x0,y0,z0,x,y,’method’): 要求x0,y0单调;x, y可取为矩阵, 或x取行向量, y取为列向量, x,y的值分别不能超出x0,y0的范围。
2.分段线性插值与计算量与n无关;n越大, 误差越小.
3.三次样条插值比分段线性插值更光滑。
4.‘linear’ : 分段线性插值;‘spline’ : 三次样条
二、实验内容
问题1 对函数, x([-5,5], 分别用分段线性插值和三次样条插值作插值(其中插值节点不少于20), 并分别作出每种插值方法的误差曲线.
1180 1320 1450 1420 1400 1300 700 900];
mesh(x,y,z)
xi=0:20:2800;
yi=0:20:2400;
zi=interp2(x,y,z,xi',yi,'cubic');
mesh(xi,yi,zi)
3.结果
4.结论及分析
通过实验,结果正确,分析无误。
三、实验小结
1270 1500 1200 1100 1350 1450 1200 1150
1230 1390 1500 1500 1400 900 1100 1060
1180 1320 1450 1420 1400 1300 700 900

三次样条实验报告范文三次样条插值的实验报告范文

三次样条实验报告范文三次样条插值的实验报告范文

三次样条实验报告范文三次样条插值的实验报告范文湘潭大学实验报告课程名称计算机图形学实验名称参数三次样条的绘制页数专业计算机科学与技术班级一班同组者姓名学号2022551208姓名刘兆臣实验日期2022.05.05实验目的使学生掌握三次参数样条的定义、画法和程序的编写。

实验内容和要求给定型值点,要求用VC++6.0画出通过给定型值点的参数三次样条曲线。

实验方案设计给定型值点,计算出参数三次样条曲线的每个区间段的代数式,由Hermit曲线定义画出每个区间的曲线。

开始开始给定型值点给定型值点计算出参数计算出参数ifn=1Yifn=1N给系数矩阵赋值给系数矩阵赋值Ifn=2YIfn=2给定系数值给定系数值N求解方程组,计算出各点导数求解方程组,计算出各点导数Ifi<ni=0Ifi<ni=0Y计算第i段的二次项,三次项系数计算第i段的二次项,三次项系数结束结束t=0t=0Ift<tt[i-1]Ift<tt[i-1]NYt=t+et=t+e计算出第i段中各点的某,y值计算出第i段中各点的某,y值连线段连线段i++i++程序运行和实验结果说明和分析。

使用VC++6.0运行程序后得到如下图形图为四段曲线组成的三次参数样条曲线,其中各段的绘制是通过给定了型值点的相关参数计算出型值点的导数,再由Hermit曲线知识,在各段上以直代曲绘制出每段的图形。

基本达到了实验目的,完成实验要求。

性能、扩展性等方面存在的不足和可能的改进之处。

不足:在源代码中的n个点采用了数据初始化的方法给出且给定了型值点的个数。

由于给定型值点较少,三次参数样条曲线看起来不够明显。

可改进:可将初始化的型值点数据去除,采用手动键盘输入或文件输入的方法导入多个型值点数据。

附件一源程序,执行程序,符号列表文件。

#include<graphic.h>#include<math.h>#include<conio.h>main(){intgdriver=DETECT,gmode;float某[100],y[100],a[100],b[100],c[100];floatp某[100],py[100],q某[100],qy[100],tt[100];floatd某[100],dy[100];inti,n=4,t,e=3;floatb某3,b某4=0.0,by3=0.0,by4,c某,cy;initgraph(&gdriver,&gmode,"");for(i=0;i<n;i++) {a[i]=0.0;b[i]=0.0;c[i]=0.0;p某[i]=0.0;py[i]=0.0;d某[i]=0.0;dy[i]=0.0;tt[i]=0.0;q某[i]=0.0;qy[i]=0.0;}p某[0]=1.0;py[0]=1.0;p某[4]=1.0;py[4]=1.0;某[0]=10.0;y[0]=110.0;某[1]=40.0;y[1]=100.0;某[2]=80.0;y[2]=90.0;某[3]=130.0;y[3]=95.0;某[4]=200.0;y[4]=105.0;moveto(某[0],y[0]);for(i=0;i<n;i++)putpi某el(某[i],y[i],15);putpi某el(某[0],y[0],15);for(i=0;i<n;i++)tt[i]=qrt((某[i]-某[i-1])某(某[i]-某[i-1])+(y[i]-y[i-1])某(y[i]-y[i-1]));if(n==1)gotopO;for(i=1;i<=n-1;i++){a[i]=2某(tt[i]+tt[i+1]);b[i]=tt[i+1];c[i]=tt[i];d某[i]=3某(tt[i]某(某[i+1]-某[i])/tt[i+1]+tt[i+1]某(y[i]-y[i+1])/tt[i]);}d某[i]=d某[1]-tt[2]某p某[0];d某[n-1]=d某[n-1]-tt[n-1]某p某[n];dy[1]=dy[1]-tt[2]某py[0];dy[n-1]=dy[n-1]-tt[n-1]某py[n];if(n==2){p某[1]=d某[1]/a[1];py[1]=dy[1]/a[1];gotopO;}c[1]=c[1]/a[1];for(i=2;i<=n-1;i++){a[i]=a[i]-b[i]某c[i-1];c[i]=c[i]/a[i];}q某[1]=d某[1]/a[1];qy[1]=dy[1]/a[1];for(i=2;i<=n-1;i++){q某[i]=(d某[i]-b[i]某q某[i-1])/a[i]; qy[i]=(dy[i]-b[i]某qy[i-1])/a[i];}p某[n-1]=q某[n-1];qy[n-1]=qy[n-1];for(i=n-2;i>=1;i--){p某[i]=q某[i]-c[i]某p某[i+1];py[i]=qy[i]-c[i]某py[i+1];}pO:for(i=0;i<=n-1;i++){b某3=(3某(某[i+1]-某[i])/tt[i+1]-2某p某[i]-p某[i+1])/tt[i+1];b某4=((2某(某[i]-某[i+1])/tt[i+1]+p某[i]+p某[i+1])/tt[i+1])/tt[i+1];by3=(3某(y[i+1]-y[i])/tt[i+1]-2某py[i]-py[i+1])/tt[i+1];by4=((2某(y[i]-y[i+1])/tt[i+1]+py[i]+py[i+1])/tt[i+1])/tt[i+1];t=0;do{t=t+e;c某=某[i]+(p某[i]+(b某3+b某4某t)某t)某t;cy=y[i]+(py[i]+(by3+by4某t)某t)某t;lineto(c某,cy);}while(t<tt[i+1]);}getch();cloegraph();}某[i]i型值点某坐标y[i]i型值点Y坐标a[i]初始赋值方程组系数矩阵mi,i的值b[i]初始赋值方程组系数矩阵mi,i+1的值c[i]初始赋值方程组系数矩阵mi,i-1的值p某[i]i型值点导函数某值py[i]i型值点导函数Y值q某[i],qy[i],d某[i],dy[i]均为解方程组中的各项系数tt[i]第i段参数范围(型值点i-1到型值点i的距离)b某,y3每段函数中二次项的系数b某,y4每段函数中三次项的系数c某每段函数中各点的某值cy每段函数中各点的Y值e作图时每段‘以直代曲’中的参数增量其中方程矩阵形式为:m1,1m1,2p1C1m2,1m2,2m2,3p2C2m3,2m3,3m3,4p3C3............=...mn-1,n-2mn-1,n-1mn-1,npn-1Cn-1mn,n-1mn,npnCn将系数矩阵改写为:其中方程矩阵形式为:(变量与代码变量不对应,如a2不等于a[2]) m1,1m1,2l11u1m2,1m2,2m2,3a2l21u2m3,2m3,3m3,4a3l31u3.........=.........mn-1,n-2mn-1,n-1mn-1,nan-1ln-11un-1mn,n-1mn,nanln1pi对应代码中p某[i],py[i]的值Ci对应代码中q某[i],qy[i]的值附件二运行结果文件。

三次样条函数范文

三次样条函数范文

三次样条函数范文三次样条函数是一个连续的函数,它由一系列的样条插值点组成。

样条插值是用一条连续的曲线连接离散的数据点,可以用于数据拟合、曲线绘制、图像处理和计算机图形学等领域。

三次样条函数在这些应用中是最常用的一种。

三次样条函数在每个插值段都由一个三次多项式表示。

这些多项式在每个插值点都满足插值条件,即通过插值点,并且有连续的一阶和二阶导数。

这样,三次样条函数可以保证在插值区间内的平滑性,并且能够更好地逼近实际数据。

三次样条函数的定义域可分为多个局部区间,在每个区间上通过插值点构造多项式。

两个相邻的插值点之间的区间称为一个插值段。

在每个插值段上,我们需要构造一个三次多项式。

这个多项式有四个系数,分别是a,b,c和d,用来表示多项式的相关特性。

S(x)=S_i(x)=a_i(x-x_i)^3+b_i(x-x_i)^2+c_i(x-x_i)+d_i其中,x_i是插值点的位置,a_i,b_i,c_i和d_i是与插值段i对应的多项式的系数。

为了使得多项式在插值点处满足插值条件,我们可以得到以下的方程组:1.S_i(x_i)=f(x_i),其中,f(x_i)是已知的插值点的函数值。

2.S_i(x_{i+1})=f(x_{i+1}),同样,f(x_{i+1})也是已知的插值点的函数值。

3.S'_i(x_{i+1})=S'_{i+1}(x_{i+1}),这个条件表明函数在插值点处的一阶导数值相等,为了平滑连接相邻的插值段。

4.S''_i(x_{i+1})=S''_{i+1}(x_{i+1}),这个条件表明函数在插值点处的二阶导数值相等,为了更好地逼近数据。

根据这些条件,我们可以求解出每个插值段的四个系数。

然后,利用这些系数可以计算出在任意位置x上的函数值S(x),即得到了三次样条函数。

三次样条函数的优点在于其平滑性和在插值区间内呈现出较好的逼近效果。

通过增加插值点的密度,可以进一步增强插值效果。

关于三次样条插值函数的学习报告

关于三次样条插值函数的学习报告

关于三次样条插值函数的学习报告三次样条插值函数是一种广泛应用于数值分析领域的插值方法,用于逼近一组已知数据点构成的函数。

在这篇学习报告中,我将介绍三次样条插值函数的定义、原理、应用及其优缺点,并通过实际例子说明其如何在实际问题中使用。

一、三次样条插值函数的定义三次样条插值函数是指用分段三次多项式对一组已知数据点进行插值的方法。

具体来说,对于已知数据点$(x_0,y_0),(x_1,y_1),...,(x_n,y_n)$,三次样条插值函数会在每相邻两个数据点之间构造一个三次多项式,使得这些多项式在相应的数据点上满足插值条件,并且在相邻两个多项式之间满足一定的连续性条件。

二、三次样条插值函数的原理三次样条插值函数的原理是利用三次多项式在每个数据点上的取值和导数值来确定三次多项式的系数,从而构造出满足插值条件和连续性条件的插值函数。

具体来说,对于每个相邻的数据点$(x_i,y_i),(x_{i+1},y_{i+1})$,我们可以构造一个三次多项式$S_i(x)$,满足以下条件:1.$S_i(x_i)=y_i$,$S_i(x_{i+1})=y_{i+1}$,即在数据点上满足插值条件;2.$S_i'(x_{i+1})=S_{i+1}'(x_{i+1})$,$S_i''(x_{i+1})=S_{i+1}''(x_{i+1})$,即在数据点上满足连续性条件。

通过求解上述条件,可以得到每个相邻数据点之间的三次多项式$S_i(x)$,从而得到整个插值函数。

三、三次样条插值函数的应用三次样条插值函数在数值分析领域有广泛的应用,尤其在曲线拟合、数据逼近等问题中起到重要作用。

例如,当我们需要根据已知的离散数据点绘制平滑的曲线图形时,可以使用三次样条插值函数来进行插值,从而得到更加连续和光滑的曲线。

另外,在信号处理、图像处理等领域也常常会用到三次样条插值函数。

例如,在数字图像处理中,我们需要对像素点进行插值以得到更高分辨率的图像,三次样条插值函数可以很好地满足这个需求,使图像更加清晰和真实。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学习报告——三次样条函数插值问题的讨论班级:数学二班学号:152111033姓名:刘楠楠样条函数:由一些按照某种光滑条件分段拼接起来的多项式组成的函数;最常用的样条函数为三次样条函数,即由三次多项式组成,满足处处有二阶连续导数。

一、三次样条函数的定义:对插值区间[,]a b 进行划分,设节点011n n a x x x x b -=<<<<=,若函数2()[,]s x c a b ∈在每个小区间1[,]i i x x +上是三次多项式,则称其为三次样条函数。

如果同时满足()()i i s x f x = (0,1,2)i n =,则称()s x 为()f x 在[,]a b 上的三次样条函数。

二、三次样条函数的确定:由定义可设:1012121(),[,](),[,]()(),[,]n n n s x x x x s x x x x s x s x x x x -∈⎧⎪∈⎪=⎨⎪⎪∈⎩其中()k s x 为1[,]k k x x -上的三次多项式,且满足11(),()k k k k k k s x y s x y --== (1,2,,k n =由2()[,]s x C a b ∈可得:''''''()(),()(),k k k k s x s x s x s x -+-+== 有''1()(),k k k k s x s x -++=''''1()(),(1,2,,1)k k k k s x s x k n -++==-,已知每个()k s x 均为三次多项式,有四个待定系数,所以共有4n 个待定系数,需要4n 个方程才能求解。

前面已经得到22(1)42n n n +-=-个方程,因此要唯一确定三次插值函数,还要附加2个条件,一般上,实际问题通常对样条函数在端点处的状态有要求,即所谓的边界条件。

1、第一类边界条件:给定函数在端点处的一阶导数,即 ''''00(),()n n s x f s x f ==2、第二类边界条件:给定函数在端点处的二阶导数,即''''''''00(),()n n s x f s x f ==特别地,当''''0()()0n s x s x ==时,称为自然边界条件,此时的样条函数称为自然样条函数。

3、第三类边界条件:设()f x 是周期函数,并设0n x x -是一个周期,于是()s x 满足''''''00()(),()()n n s x s x s x s x == 三、三次样条函数的分析计算:设出()s x 在每个节点处的二阶导数值,即''(),(0,1,2,,)j j s x M j n == 考虑区间1[,]j j x x -,在此区间上,()()j s x s x =是三次多项式,故''()j s x 为线性函数,且 ''''''''111()(),()()j j j j j j j j s x s x M s x s x M ---==== 利用线性插值公式,可得''()j s x 的表达式: 1''11(),j j j j j j j j jjx x x x s x M M h x x h h -----=+=-积分两次后可得()j s x 的表达式: 331112()()()66j j j j j jjx x x x s x M M c x c h h ----=+++将插值条件11(),()j j j j j j s x y s x y --==代入可确定积分常数1c 和2c ,整理上式得332211111()()()6666j j j j j j jj j j j j j jjj j x x x x M h x x M h x x s x M M y y h h h h -----⎛⎫⎛⎫----=++-+- ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭只需确定01,,,n M M M 即可给出()s x 的表达式。

()s x 在各个节点处的一阶导数存在''()()j j s x s x -=即有''1()()j j j j s x s x -++=对()j s x 求导得:22111'1()()()226j j j j j j jj j j jjjx x x x y y M M s x M M h h h h --------=-++-则1111111()()2626j j j j j j j jj j j j j j jj h h y y h h y y M M M M M M h h -+++-++----+=---+整理得关于1,j j M M -和1j M +的方程:112j j j j j j M M M d μλ-+++=其中111111111,,166[,,]j j j j j j j j j j j j j j j j j j j j j j h h h h h h y y y y d f x x x h h h h μλμλ++++--+++⎧==+=⎪++⎪⎨⎛⎫--⎪=-= ⎪⎪ ⎪+⎝⎭⎩1,2,,1j n =-共1n -个方程,附加边界条件后,补充两个方程,便可确定1n +个未知量01,,,n M M M 。

第一类边界条件:''''00(),()n ns x y s x y ==直接代入()j s x 的一阶导数表达式即得 ''1100101011()()26,26n n n n n n nny y y y y y h h M M d M M d h h --⎛⎫⎛⎫---- ⎪ ⎪⎝⎭⎝⎭+=≡+=≡与前面的1n -个方程联立得到1n +阶线性方程组:001111222211112122212n n n n n n M d M d M d M d M d μλμλμλ----⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦类似的有第二类和第三类边界条件得到的方程组:''1111022222222''11112222n n n n n n n n n M d y M d M d M d y λμμλμλμλ--------⎡⎤-⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦111222211112222n n n n nnn n M d M d M d M d λμλμλλμ----⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦又知上述三个方程组的系数矩阵严格对角占优,故矩阵可逆,则方程组的解存在且唯一。

四、三次样条函数的一致收敛性和稳定性:1、收敛性:设2()[,],()f x C a b S x ∈是以(0,1,,)k x k n =为节点,满足任意边界条件得三次样条插值函数,设10101,max,min i i i i i i n i n h x x h h h δ+≤≤-≤≤-=-==,则当hc δ≤<∞时,()S x 和'()S x 在[,]a b 上一致收敛到()f x 和'()f x ,即''00lim()(),lim ()(),[,]h h S x f x S x f x x a b →→==∈从而我们可以知道:当插值节点越多时,三次样条插值函数就越接近被插函数,也就不会产生龙格现象中不收敛的情况。

2、稳定性:在三次样条插值法中,插值节点处函数值的波动,只对这个节点两边的分段有影响,而对离该点较远的分段的影响会逐渐变小,因此样条插值法具有较好的稳定性。

五、三次样条插值函数的算例与实际应用:例1、求满足下面函数表所给出的插值条件的三次样条插值函数。

解:已知031,0M M ==,算得030λμ==,111112λ==+,211112λ==+, 11112μλ=-=,22112μλ=-=,02d =,1230d d d ===,所以由 第二类边界条件可得:0123202122120122120020M M M M ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦计算M 及样条系数得:01231,415,115,0M M M M ==-==x 0 1 2 3 y0 0 0 0 ''y10,10,20,31,11,22690,12,1990,790,215C C C C C =-==-==-1,32,12,22,3118,290,130,190C C C C ==-==-所以三次样条插值函数为32323219126,[0,1]90290127()(1)(1)(1),[1,2]181590112(2)(2)(2),[2,3]903090x x x x s x x x x x x x x x ⎧-+-∈⎪⎪⎪=---+-∈⎨⎪⎪--+---∈⎪⎩例2、已知一组数据点,求解满足这些数据点的三次样条插值函数解:由于数据点含有多位小数,不便计算,所以本题采用Matlab 编程,源代码见附录,结果为2.8620,2.7541,2.4130,2.2421,2.1450g =2.0000 1.00000.6429 2.00000.35710.4000 2.00000.60000.5714 2.00000.42861.0000 2.0000Q ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦ 0.9697,0.9227,0.7992,0.7424,0.7013m =插值函数为s1=264523075327265143/56294995342131200*X^2-23087199381998953/112589990684262400*X+40023205577025431/112589990684262400-17634871688484217/2814749767106560*X^3s2=-160081743506404901/60798594969501696*X^2+404209705972252i x 0.250.30.390.450.53iy0.50000.54770.62450.67080.7280727/202661983231672320*X+429142243010323951/3166593487994880000+257361898089296225/136796838681378816*X^3s3=1437374409830143/13510798882111488*X^2+10427488839800859/11258999068426240*X+12358231431982259943/45035996273704960000-3495912536773825/7599824371187712*X^3s4=26732501105874704913/720575940379279360000+38626753769033575/18014398509481984*X^3-245666153971053021/72057594037927936*X^2+3614707928905781673/1441151880758558720*X0.250.30.350.40.450.50.550.60.50.550.60.650.70.75xy图像eval例3、已知汽车门曲线型值点的数据如下: i x 0 12 3 4 5 6 7 8 9 10i y 2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.575.70 5.80求车门的三次样条插值函数,并打印出(4.5)s ,端点条件为''0100.8,0.2y y ==解:源代码见附录,插值函数为3232323232(1)0.00851400.00148600.80000 2.5100(2)0.00445790.0136540.81217 2.5059(3)0.00365440.0184750.82181 2.4995(4)0.0409240.316960.18448 3.5058(5)0.10735 1.46246s t t t s t t t s t t t s t t t s t t =--++=--++=--++=-+-+=-+3232323232.9328 5.9839(6)0.26848 4.175221.25540.996(7)0.426598.336153.813109.14(8)0.26786 6.247448.272129.06(9)0.054872 1.498313.69436.184(10)0.058376 1.592914.545t s t t t s t t t s t t t s t t t s t t -=-+-+=-+-=-+-+=-+-=-+38.738t -插值点处值为 (4.5) 5.3833s =0123456789102.533.544.555.56附录例2、源代码: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-1h(i)=x(i+1)-x(i);endfor i=1:n-2k(i)=h(i+1)/(h(i)+h(i+1));u(i)=h(i)/(h(i)+h(i+1));endfor i=1:n-2gl(i)=3*(u(i)*(y(i+2)-y(i+1))/h(i+1)+k(i)*(y(i+1)-y(i))/h(i)); endg0=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-1p1(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);p(i)=p1(i)+p2(i)+p3(i)+p4(i);p(i)=simple(p(i));ends1=p(1)s2=p(2)s3=p(3)s4=p(4)for k=1:4for z=x(k):0.001:x(k+1)q=eval(subs(p(k),'X','z'));plot(z,q,'b')hold onendendgrid onlegend('eval')title('图像')xlabel('x')ylabel('y')例3、源代码:function []=spline3(X,Y,dY,x0,m)N=size(X,2);s0=dY(1);sN=dY(2);interval=0.025;disp('x0为插值点')x0h=zeros(1,N-1);for i=1:N-1h(1,i)=X(i+1)-X(i);endd(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-1d(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-2u=h(1,i+1)/(h(1,i)+h(1,i+1));mu(1,i+1)=u;md(1,i)=1-u;endp(1,1)=2;q(1,1)=mu(1,1)/2;for i=2:N-1p(1,i)=2-md(1,i-1)*q(1,i-1);q(1,i)=mu(1,i)/p(1,i);endp(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三次样条函数插值问题的讨论- 10 - - 10 - y(1,i)=(d(i)-md(1,i-1)*y(1,i-1))/p(1,i);endx=zeros(1,N);x(1,N)=y(1,N);for i=N-1:-1:1x(1,i)=y(1,i)-q(1,i)*x(1,i+1);endfprintf('M 为三对角方程的解\n');M=x;fprintf('\n');syms t;digits(m);for i=1:N-1pp(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)~=4tt=coeff(1:3);coeff(1:4)=0;coeff(2:4)=tt;endif x0>X(i)&x0<X(i+1)L=i;y0=coeff(1)*x0^3+coeff(2)*x0^2+coeff(3)*x0+coeff(4);endval=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);endif mod(i,2)==1plot(val,fval,'r+')elseplot(val,fval,'b.')endhold onclear val fvalans=sym(coeff,'d');ans=poly2sym(ans,'t');fprintf('在区间[%f,%f]内\n',X(i),X(i+1));fprintf('三次样条函数S(%d)=',i);pretty(ans);endfprintf('x0所在区间为[%f,%f]\n',X(L),X(L+1));fprintf('函数在插值点x0=%f 的值为\n',x0);y0。

相关文档
最新文档