收藏 分销(赏)

实验次样条插值实验知识讲解.doc

上传人:精*** 文档编号:3917779 上传时间:2024-07-23 格式:DOC 页数:6 大小:127.50KB 下载积分:6 金币
下载 相关 举报
实验次样条插值实验知识讲解.doc_第1页
第1页 / 共6页
实验次样条插值实验知识讲解.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
实验次样条插值实验 精品文档 数值分析实验报告 姓 名 忘川 学 号 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.0086 (2)作原函数、Langrage插值函数和三次样条插值函数的图像,并比较它们的区别。 先写拉格朗日插值的程序,如下: function y=lagr1(x0,y0,x) n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end end 然后直接在matlab的命令窗口输入: x0=[-5 -4 -3 -2 -1 0 1 2 3 4 5 ]; y0=1./(x0.^2+1); x=-5:0.01:5; df=diff(y0); conds=1; y=selfspline(x0,y0,df,x,conds); y1=1./(x.^2+1); y2=lagr1(x0,y0,x); plot(x,y1,'b',x,y,'y-',x,y2,'r:') legend('原函数','三次样条插值','Lagrange插值') 即可得到以下图形: (3) 分析结果: 根据图像可知,用拉格朗日插值函数进行插值时,在次数较高时会出现龙格现象,导致其值与原函数相差甚大,在一定范围内插值拟合效果不好,而三次样条插值函数可以很好地接近原函数且光滑性较好,是比较理想的插值函数。 五、教师评语(或成绩) 教师签字 :       年 月 日 收集于网络,如有侵权请联系管理员删除
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服