您好,欢迎访问三七文档
第七章数据处理及应用【教学目的】:本章着重介绍数据的插值、拟合与多元回归分析,并利用Matlab相应工具结合具体案例进行分析。【教学重点难点】:教学重点:插值与拟合,回归分析,聚类与分类。教学难点:定性与定量的结合,如何在定性分析基础上给出适当的定量关系。【课时安排】:8学时【教学方法】:采用多媒体教学手段,配合实例教学法,通过对典型例题的讲解启发学生思维,并给与学生适当的课后思考讨论的时间,加深知识掌握的程度。安排一定课时的上机操作。【教学内容】:7.1数据插值与拟合在工程和科学实验中,当研究对象的机理不清楚的时候,经常需要从一组实验观测数据(xi,yi)(i=1,2,…,n)中寻找自变量x与因变量y之间的某种函数关系y=f(x)。比如测量了人的身高和体重的一些数据,要确定两者的函数关系,但身高与体重的机理我们不清楚,所以寻找尽量吻合这组测量数据的近似函数模型就很重要了。函数f(x)的产生办法因观测数据与要求的不同而异,通常可采用数据插值与数据拟合的方法。7.1.1数据插值1.插值问题的描述对给定的一组测量数据,要确定通过所有这些数据点的曲线或曲面的问题就是插值问题。对一维插值问题可以这样描述:设f(x)在区间[a,b]上连续,x0,x1,…,xn为[a,b]上n1个互不相同的点,且已知f(x)的一组实验观测数据(xi,yi)(i=1,2,…,n),要求一个性质优良、便于计算的近似函数(x),使得iiyx)(,i=0,1,…,n(7.1)成立,这就是一维插值问题。其中称[a,b]为插值区间,点x0,x1,…,xn为插值节点,函数(x)为插值函数,f(x)为被插值函数,式(1)为插值条件。求插值函数(x)的方法称为插值法。关于高维插值可类似定义,本节只介绍一维和二维插值。2.基本插值方法简介插值函数的取法很多,可以是代数多项式,也可以是三角多项式或有理函数;可以是[a,b]上任意光滑函数,也可以是分段光滑函数。对一维插值,最常用最基本的插值方法有:分段多项式插值与三次样条插值;二维插值根据数据分布规律可分为网格节点插值和散乱数据插值,相应的方法有双三次样条插值方法和改进的Shepard方法。具体的方法原理请参阅计算方法的专业书籍,这里不再详细介绍。下面我们着重介绍Matlab中如何实现数据插值。3.插值方法的Matlab实现一维数据插值MATLAB中用函数interp1()来处理一维数据插值,它提供了四种插值方法供选择:线性插值、三次样条插值、三次插值和最临近插值。命令interp1格式yi=interp1(x,y,xi,'method')%对被插值节点xi,用method方法进行插值.说明(1).输入参数说明:x,y为插值节点,均为向量;xi为任取的被插值点,可以是一个数值,也可以是一个向量;yi为被插值点xi处的插值结果;(2).其中method是选用的插值方法,具体有:'nearest'—表示最临近插值'linear'—表示线性插值,默认'cubic'—表示三次插值'spline'—表示三次样条函数插值注意上述method中所有的插值方法都要求x是单调的,并且xi不能超过x的取值范围,其中最后一种插值的曲线比较平滑;(3)三次样条插值函数的调用格式有两种等价格式:yi=interp1(x,y,xi,'spline')yi=spline(x,y,xi)例1:下表给出了12名成年女子的身高与腿长的测量数据:试研究身高与腿长的关系,并给出身高为148、150、160时腿长的预测值。解:在matlab中输入代码:x=[143145146149153155156157158159162164];%插值节点y=[888588929396989796987072];x1=143:0.2:164;%被插值节点,用于确定插值函数.plot(x,y,'o');holdon%原始测量数据散点图.y1=interp1(x,y,x1,'spline');%求被插值节点处的函数值.yp=interp1(x,y,[148150160],'spline')%求身高为148、150、160时腿长.plot(x1,y1,x,y,'r:')%画出插值函数图形及测量数据的折线图.xlabel('身高'),ylabel('腿长')%加坐标轴标签输出结果为:yp=91.456192.194299.4787%对应身高的腿长输出图形见图7.1:图7.1注意:1).matlab只会给出被插值节点处的函数值,而不会给出具体的函数解析表达式,这有点类似于我们求微分方程的数值解。需要求点对应的插值(未知的),可以将被插值节点放在xi中;2).图7.1中有三条曲线,其中圆圈点是原始测量数据点(横坐标为插值节点),实线是插值函数图形,虚线是插值节点间的连接折线段。身高143145146149153155156157158159162164腿长888588929396989796987072二维数据插值针对二维插值中的插值基点为网格节点和散乱节点,MATLAB中分别提供了函数interp2()和griddata()来进行二维插值。先介绍规则区域上给定数据有规律分布的二维插值。命令interp2格式zi=interp2(x,y,z,xi,yi,'method')%针对网格节点的二维插值.说明(1).输入参数说明:x,y,z为插值节点,其中x和y是自变量,x是m维向量,指明数据网格的横坐标,y是n维向量,指明数据网格的纵坐标,z是nm阶矩阵,表示相应于网格点的函数值;zi为被插值点(xi,yi)处的插值结果;(2).其中method是选用的插值方法,具体有:'nearest'—表示最临近插值'linear'—表示双线性插值,默认'cubic'—表示双三次插值'spline'—表示双三次样条函数插值注意上述method中所有的插值方法都要求x和y是单调的网格,x和y可以是等距的也可以是不等距的。xi和yi应是方向不同的向量,即一个是行向量,另一个是列向量。几种方法中最后一种插值的曲面比较平滑。例2:已知在某山区测得一些地点的高程如下表。其平面区域为40001200x,36001200y,试用不同的插值方法作出该山区的地貌图。xy12001600200024002800320036004000120011301250128012307409005007001600132014501420140013007009008502000139015001500140090017076095024001500120017013501450120011507728001500120017015501600155013807703200150015501600155016001600160015503600148015001550157143013001200980解:输入程序代码:x=1200:400:4000;y=1200:400:3600;z=[11301250128012307409005007001320145014201400130070090085013901500150014009001707609501500120017013501450120011507715001200170155016001550138077015001550160015501600160016001550148015001550157143013001200980];%原始数据的山区地貌图figure(1)meshz(x,y,z)xlabel('X'),ylabel('Y'),zlabel('Z')title('原始数据地貌图')%为平滑曲面,加密网格x1=1200:50:4000;y1=1200:50:3600;%最临近插值figure(2)zn=interp2(x,y,z,x1,y1','nearest');surfc(x1,y1,zn)xlabel('X'),ylabel('Y'),zlabel('Z')title('最临近插值地貌图')%双线性插值figure(3)zl=interp2(x,y,z,x1,y1','linear');surfc(x1,y1,zl)xlabel('X'),ylabel('Y'),zlabel('Z')title('双线性插值地貌图')%双三次插值figure(4)zc=interp2(x,y,z,x1,y1','cubic');surfc(x1,y1,zc)xlabel('X'),ylabel('Y'),zlabel('Z')title('双三次插值地貌图')%双三次样条函数插值figure(5)zs=interp2(x,y,z,x1,y1','spline');surfc(x1,y1,zs)xlabel('X'),ylabel('Y'),zlabel('Z')title('双三次样条函数插值地貌图')输出可视化图形分别见图7.2—图7.6:图7.2图7.3图7.4图7.5图7.6从图形可以看出,原始数据地貌图是很粗糙的,因为测量点比较少。几种插值方法中最临近插值和双线性插值效果较差,而最后一种插值的曲面比较平滑,效果较好。如果给定的数据是在规则区域上的散乱数据或随机分布的数据,即数据不是在网格上取的,则可用函数griddata()来解决二维插值问题。命令griddata格式zi=griddata(x,y,z,xi,yi,'method')%针对散乱数据的二维插值.说明(1).输入参数说明:x,y,z都是n维向量,分别指明所给插值节点的横坐标、纵坐标和z坐标;zi为被插值点(xi,yi)处的插值结果;xi和yi应是方向不同的向量,即一个是行向量,另一个是列向量;(2).其中method是选用的插值方法,具体有:'nearest'—表示最临近插值'linear'—表示双线性插值,默认'cubic'—表示双三次插值'v4'—表示matlab提供的插值方法其中'v4'方法比较好。针对二维散乱插值问题,在matlab中还提供了两个插值函数:e01sef()和e01sff()。通常两者要配合使用,其调用格式为:[fnodes,a,rnw,b,c]=e01sef(x,y,z)[sz(i,j),ifail]=e01sff(x,y,z,rnw,fnodes,sx(i),sy(j))其中:x,y,z—为插值节点,均为n维向量;sx(i),sy(j)—为被插值节点;sz(i,j)—为被插值点(sx(i),sy(j))处的插值结果;其他输出参数涉及插值算法。两个函数中e01sef输出fnodes和rnw为确定插值的参数,它们是e01sff需要的输入参数,因此两函数需配合使用。例3:在某海域测得一些点(x,y)处的水深z(单位:英尺),见下表,水深数据是在低潮时测得的。船的吃水深度为5英尺,问在矩形区域(75,200)(50,150)内的哪些地方船要避免进入(AMCM86A题)。x129.0140.073.588.0185.5195.075.5y7.5141.523.0147.022.5137.585.5z4868688x157.577.577.081.0162.0162.0117.5y6.581.03.056.566.584.033.5z99889491.基本假设除了一些散乱的测量数据外,题目没有给出其他信息。为了简化问题,首先给出以下合理假设:(1).所给测量数据是精确可用的;(2).该海域海底是平滑的,不存在珊瑚礁、水底峡谷、山脊等突变地形。2.问题分析在假设基础上,可以考虑用某种光滑的曲面去拟合逼近已知的数据点或以已知的数据点为基础,利用二维插值方法补充一些点的水深,然后作出海底曲面图和等高线图,并求出水深小于5的海域范围。3.问题求解(1).先作出测量点的分布散点图:输入代码:x=[129.0140.073.588.0185.5195.075.5157.577.577.081.0162.0162.0117.5];y=[7.5141.52
本文标题:第七章-数据处理
链接地址:https://www.777doc.com/doc-5742199 .html