- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 数据插值与拟合 例: 已知的数据点来自函数根据生成的数据进行插值处理,得出较平滑的曲线直接生成数据。 数据点: x = 0: 0.12: 1; y = (x.^2 - 3*x + 5).*exp(-5*x).*sin(x); plot(x,y,x,y,o) 调用interp1( )函数: x0 = 0:0.02:1; y0 = (x0.^2-3*x0+5).*exp(-5*x0).*sin(x0); y1 = interp1(x, y, x0); y2 = interp1(x, y, x0, cubic); y3 = interp1(x, y, x0, spline); y4 = interp1(x, y, x0, nearest); plot(x0, [y1, y2, y3, y4], :, x, y, o, x0, y0) 误差分析 [max(abs(y0(1:49)-y2(1:49))), max(abs(y0-y3)), max(abs(y0-y4))] ans = 0.0177 0.0086 0.1598 功能 三次样条数据插值 格式 yy = spline(x,y,xx) 例:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算: x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x); xx = 0:.25:20; yy = spline(x,y,xx); plot(x,y,o,xx,yy) Lagrange插值 x0= -1 + 2*[0:10]/10; y0=1./(1+25*x0.^2); x=-1: 0.01: 1; y=lagrange(x0,y0,x); ya=1./(1+25*x.^2); plot(x, ya, x, y, :) 调用interp1函数 y1=interp1(x0,y0,x,cubic);y2=interp1(x0,y0,x,spline); plot(x,ya,x,y1,:,x,y2,--) 例:利用Hermite插值法求sin0.34的近似值。 x0=[0.3,0.32,0.35]; y0=[0.29552,0.31457,0.34290]; y1=[0.95534,0.94924,0.93937]; y=hermite(x0,y0,y1,0.34) y = 0.3335 sin(0.34) %与精确值比较 ans = 0.3335 例 由二元函数 获得一些较稀疏的网格数据,对整个函数曲面进行各种插值,并比较插值结果 绘制已知数据的网格图 [x, y] = meshgrid(-3:0.6:3, -2:0.4:2); z = (x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surf(x, y, z); axis([-3, 3, -2, 2, -0.7, 1.5]) 默认线性插值算法进行插值 [x1,y1]=meshgrid(-3:.2:3,-2:.2:2); z1=interp2(x,y,z,x1,y1); surf(x1,y1,z1), axis([-3,3,-2,2,-0.7,1.5]) 立方和样条插值: z1=interp2(x,y,z,x1,y1,cubic); z2=interp2(x,y,z,x1,y1,spline); surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5]) figure;surf(x1,y1,z2),axis([-3,3,-2,2,-0.7,1.5]) 算法误差的比较 z=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1); surf(x1,y1,abs(z-z1)),axis([-3,3,-2,2,0,0.08]) figure;surf(x1,y1,abs(z-z2)),axis([-3,3,-2,2,0,0.025]) cubic和v4算法 [x1, y1]=meshgrid(-3:0.2:3,-2:0.2:2); z1 = griddata(x, y, z, x1, y1, cubic); surf(x1, y1, z1); axis([-3, 3, -2, 2, -0.7, 1.5]) z2=griddata(x,y,z,x1,y1,v4); figure; surf(x1,y1,z2); axis([-3, 3, -2, 2, -0.7, 1.5])
文档评论(0)