文档详情

实验次样条插值实验.doc

发布:2017-03-26约2.98千字共5页下载文档
文本预览下载声明
数值分析实验报告 姓 名 忘川 学 号 1205025106 系 别 数学系 班级 12级 主讲教师 指导教师 实验日期 2014/6/25 专业 信息与计算科学专业 课程名称 数值分析 同组实验者 无 一、实验名称: 实验四、三次样条插值实验 实验目的: 1. 掌握三次样条插值的运用; 2. 了解拉格朗日插值在高次上的误差。 三、实验内容及要求: 给定函数节点 (1)编写三次样条程序求,取 (2)作原函数、Langrage插值函数和三次样条插值函数的图像,并比较它们的区别。 附: 算法描述: 三次样条插值(Cubic Spline Interpolation) PURPOSE: To find a piecewise cubic spline function . (,,? ). where , and ,?. INPUT: interpolated points; clamped boundary condition. OUTPUT: Step 1 For Step 2 By clamped boundary condition, Set ,, Step 3 Solve tri-diagonal system Step 4 Output . Stop 四、实验步骤(或记录) (1)编写三次样条程序求,取 程序如下: function [s,m]=selfspline(x0,y0,df,x,conds) n=length(x0); h=diff(x0); b=ones(1,n)*2; for j=2:n-1 a(j)=h(j-1)/(h(j-1)+h(j)); c(j)=h(j)/(h(j-1)+h(j)); d(j)=6*(h(j-1)*(y0(j+1)-y0(j))-h(j)*(y0(j)-y0(j-1)))/(h(j)*h(j-1)*(h(j)+h(j-1))); end a(1:n-2)=a(2:n-1); switch conds case 1 a(n-1)=1; c(1)=1; d(1)=6*((y0(2)-y0(1))/(x0(2)-x0(1))-df(1))/(x0(2)-x0(1)); d(n)=6*(df(2)-(y0(n)-y0(n-1))/(x0(n)-x0(n-1)))/(x0(n)-x0(n-1)); case 2 a(n-1)=0; c(1)=0; d(1)=2*df(1); d(n)=2*df(2); otherwise error(conds值错误, conds只能为1或2) end for i=2:n r=a(i-1)/b(i-1); b(i)=b(i)-r*c(i-1); d(i)=d(i)-r*d(i-1); end m(n)=d(n)/b(n); for i=n-1:-1:1 m(i)=(d(i)-c(i)*m(i+1))/b(i); end for j=1:length(x) for i=1:n-1 if x(j)=x0(i)x(j)=x0(i+1) s(j)=m(i)*(x0(i+1)-x(j))^3/(6*h(i))+m(i+1)*(x(j)-x0(i))^3/(6*h(i))+(y0(i)-m(i)*h(i)^2/6)*(x0(i+1)-x(j))/h(i)+(y0(i+1)-m(i+1)*h(i)^2/6)*(x(j)-x0(i))/h(i); end end end 在matlab的命令窗口输入: k=0:10; x0=-5+k; y0=1./(x.^2+1); x=-5:0.5:5; y=1./(x.^2+1); df=diff(y) 得到如下数据: df = 0.0086 0.0118 0.0166 0.0245 0.0379 0.0621 0.1077 0.1923 0.3000 0.2000 -0.2000 -0.3000 -0.1923 -0.1077 -0.0621 -0.0379 -0.0245 -0.0166 -0.0118 -0.
显示全部
相似文档