数值分析课程设计(三次样条插值)_第1页
数值分析课程设计(三次样条插值)_第2页
数值分析课程设计(三次样条插值)_第3页
数值分析课程设计(三次样条插值)_第4页
数值分析课程设计(三次样条插值)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数值分析课程设计》报告专业:学号:学生姓名:指导教师:7.掌握三次样条插值函数的构造方法,体会三次样条插值函数对被逼近函数的近似。三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。以第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个边界条件。通常由实际问题对三次样条插值在端点的状态要求给出。常用边界的条件有以下3类。第1类边界条件:给定端点处的一阶导数值,S'(x1)=y1',S'(xn)=yn'。第2类边界条件:给定端点处的二阶导数值,S"(x1)=y1",S"(xn)=yn"。特殊情况y1"=yn"=0,称为自然边界条件。第3类边界条件是周期性条件,如果y=f(x)是以b-a为周期的函数,于是S(x)在端点处满足条件S'(x1+0)=S'(xn-0),S"(x+0)=S"(xn-0)。下以第1边界条件为例,利用节点处二阶导数来表示三次样条插值函数,给出具体的推导过程。2三次样条插值函数的推导过程注意到S(x)在[xj,xj+1]〔j=1,2,⋯,n-1〕上是三次多项式,于是S"(x)在[xj,xj+1]上是一次多项式,如果S"(x)在[xj,xj+1]〔j=1,2,⋯,n-1〕两端点上的值,设S"(xj)=Mj,S"(xj+1)=Mj+1,其中hj=xj+1-xj,对S"(x)进行两次积分,那么得到1个具有2个任意常数Aj,Bj的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为插值点')x0h=zeros(1,N-1);fori=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);fori=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;fori=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;fori=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;fori=2:Ny(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);fori=N-1:-1:1x(1,i)=y(1,i)-q(1,i)*x(1,i+1);endfprintf('M为三对角方程的解\n');M=x;fprintf('\n');symst;digits(m);fori=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));iflength(coeff)~=4tt=coeff(1:3);coeff(1:4)=0;coeff(2:4)=tt;endifx0>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);fork=1:length(val)fval(k)=coeff(1)*val(k)^3+coeff(2)*val(k)^2+coeff(3)*val(k)+coeff(4);endifmod(i,2)==1plot(val,fval,'r+')elseplot(val,fval,'b.')endholdonclearvalfvalans=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程序中:X,Y为输入结点,dY为两端点一阶导数矩阵,x0为待求插值点,m为有效数字位数。应用实例[1]:函数y=f(x)的函数值如表1。x0为插值点x0=1.5;M为三对角方程的解M=-5.00004.00004.000016.0000在区间[-1.5,0.0]内,三次样条函数S(1)t32t2−1;在区间[0.0,1.0]内,三次样条函数S(2)2t2−1;在区间[1.0,2.0]内,三次样条函数S(3)2t3−4t26t−3。5结论Matlab环境下编写求解三次样条插值的通用程序,可直接显示各区间段三次样条函数的具体表达式,计算出已给点的插值,最后显示各区间分段曲线图,为三次样条插值函数的应用提供简便方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论