1、1实验目的实验目的:.了解最小二乘法的原理了解最小二乘法的原理.通过实例的学习通过实例的学习,懂得如何用拟合和插值的方法解决实懂得如何用拟合和插值的方法解决实际的问题际的问题,并能注意它们的联系与区别并能注意它们的联系与区别,会用会用 MatlabMatlab来求来求解解.实验六 拟合与插值.21 1 拟合的分类拟合的分类1 直线拟合假设所给数据点假设所给数据点 i=1,2,N的分布大致的分布大致成一条直成一条直线,虽然我们并不要求所作的拟合直线严格地通过所有的线,虽然我们并不要求所作的拟合直线严格地通过所有的数据点数据点 ,但总希望它尽可能地从所给数据点附近通,但总希望它尽可能地从所给数据点
2、附近通过,就是说,要求近似成立,过,就是说,要求近似成立,i=1,2,Ni=1,2,N这里,数据点这里,数据点数目通常远大于待定系数的数目即数目通常远大于待定系数的数目即N2N2,因此,拟合直线,因此,拟合直线的构造,本质上是个解超定方程组的代数问题。的构造,本质上是个解超定方程组的代数问题。(xi,yi)(,)xi yi.3设设 i=1,2,N i=1,2,N 表示按拟合直线表示按拟合直线 求得的近似值,一般地说,它不同于实测值,两者之差称求得的近似值,一般地说,它不同于实测值,两者之差称 残差。显然,残差的大小是衡量拟合好坏的重残差。显然,残差的大小是衡量拟合好坏的重要标志,具体地说,我们
3、可以采用下列三种准则:要标志,具体地说,我们可以采用下列三种准则:l使残差的最大绝对值为最小:使残差的最大绝对值为最小:l使残差的绝对值之和最小:使残差的绝对值之和最小:l使残差的平方和为最小:使残差的平方和为最小:分析以上三种准则,(分析以上三种准则,(1 1)、()、(2 2)两种提法比较自然,但)两种提法比较自然,但由于含有绝对值运算不方便于实际应用,而基于(由于含有绝对值运算不方便于实际应用,而基于(3 3)来)来选取拟合曲线的方法称选取拟合曲线的方法称曲线拟合的最小二乘法。maxminiie miniie 2miniieiiyabxyabxiiieyy.4 (xi,yi)1,2,3,
4、iNyabx2()niiiQyabx对于给定的数据点对于给定的数据点直线拟合问题可用数学语言描述如下:直线拟合问题可用数学语言描述如下:,求作一次式求作一次式,使总误差使总误差最小。最小。.5(,)iix y1,2,3,iNmNmjjj oya x21()Nmjjiij oQya x2 曲线拟合曲线拟合有时候所给出数据点用直线拟合不合适,这时可考虑用多项有时候所给出数据点用直线拟合不合适,这时可考虑用多项式拟合,而多项式拟合也是多项式运算的一个重要组成部分,式拟合,而多项式拟合也是多项式运算的一个重要组成部分,在工程应用及科研工作中都得到了广泛的应用。在工程应用及科研工作中都得到了广泛的应用。
5、用数学语言描述如下:用数学语言描述如下:对于给定的一组数据对于给定的一组数据 ,寻求作次多项式,寻求作次多项式 (),使总误差),使总误差 为最小。为最小。.6用Matlab求解拟合问题的函数为polyfit.调用格式为:调用格式为:polyfit(x,y,n)polyfit(x,y,n)%x,y为拟合数据,n为拟合多项式的阶数。.70,2x x-1-1-0.75-0.75-0.5-0.5-0.25-0.250 00.250.250.50.50.750.751 1y y-0.2209-0.22090.32950.32950.88260.88261.43921.43922.00032.00032
6、056452056453.13343.13343.70613.70614.28364.2836(2)用5阶多项式对 的正弦函数值进行最小二乘法。(1)给出下表数据,试用最小二乘法求一次和二次拟合多项式。例题.8 x=-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1;y=-0.2209,0.3295,0.8826,1.4392,2.0003,2.05645,3.1334,3.7061,4.2836;p1=polyfit(x,y,1)p1=2.2178 1.9567 p2=polyfit(x,y,2)p2=0.1809 2.2178 1.8813.9 x1=linspac
7、e(-1,1,100);z1=polyval(p1,x1);z2=polyval(p2,x1);plot(x1,z1,r,x1,z2,b)hold on plot(x,y,o,x,y).10-1-0.8-0.6-0.4-0.200.20.40.60.81-0.500.511.522.533.544.5.11 x=0:0.1:pi/2;y=sin(x);pp=polyfit(x,y,5);r=polyval(pp,x);plot(x,y,*,x,r,r).1200.511.500.10.20.30.40.50.60.70.80.91.132 2、插值、插值数据量不够,需要补充,且认定已有数据可信
8、时,通常利用函数插值方法。l插值与插值函数插值与插值函数 已知由 (可能未知或非常复杂)产生的一批离散数据 ,且 n个互异插值节点 ,在插值区间内寻找一个相对简单的函数 ,使其满足下列插值条件:再利用已求得的 计算任一非插值节点 的近似值 ,这就是插值。其中 称为插值函数,称为被插函数。()g x.14l1、一维插值、一维插值一维插值就是对一维函数一维插值就是对一维函数y=f(x)的数据进行插值,是最常用的数据进行插值,是最常用的插值运算,一维插值函数调用格式:的插值运算,一维插值函数调用格式:yi=interp1(x,y,xi,method)%输入参数输入参数x为原始数据点的横坐标向量,为原
9、始数据点的横坐标向量,y为纵坐标向量为纵坐标向量或矩阵,或矩阵,method为插值方法选项。如果为插值方法选项。如果y是矩阵,那么插是矩阵,那么插值按照值按照y的列向量进行,返回值的列向量进行,返回值yi和矩阵和矩阵y的列数相等,的列数相等,xi为插值点的横坐标,为插值点的横坐标,yi时在时在xi指定位置计算出的插值结果。指定位置计算出的插值结果。插值方法插值方法.15l一维插值有四种方法,分别是:一维插值有四种方法,分别是:(1)邻近点插值)邻近点插值(method=nearest)将插值结果的值设置为将插值结果的值设置为最近数据点的值最近数据点的值(2)线性插值)线性插值(method=l
10、inear)在两个数据点之间连接直在两个数据点之间连接直线,根据给定的插值点计算出它们在直线上的值,作为插线,根据给定的插值点计算出它们在直线上的值,作为插值结果。缺省形式。值结果。缺省形式。(3)三次样条插值)三次样条插值(method=spline)通过数据点拟合出三通过数据点拟合出三次样条曲线,根据给定的插值点计算出它们在曲线上的值,次样条曲线,根据给定的插值点计算出它们在曲线上的值,作为插值结果。作为插值结果。(4)立方插值)立方插值(method=pchip/cubic)通过三次多项式计通过三次多项式计算插值结果。算插值结果。.16l由于在很多情况下,三次样条插值效果最好,由于在很多
11、情况下,三次样条插值效果最好,matlab matlab 还专门提供了三次样条插值函数还专门提供了三次样条插值函数yi=spline(x,y,xi)yi=spline(x,y,xi),其中输入、输出参数含义同上。其中输入、输出参数含义同上。.17例 一维插值函数插值方法的比较一维插值函数插值方法的比较 clear x=0:2*pi;y=cos(x);xi=0:0.1:2*pi;%将插值方法定义成单元数组将插值方法定义成单元数组 method=nearest,linear,spline,cubiclable=(a)method=nearest,(b)method=linear,(c)=metho
12、d=spline,(d)method=cubic;for i=1:4 yi=interp1(x,y,xi,methodi);%在一个图形窗口绘制在一个图形窗口绘制4幅图形幅图形 subplot(2,2,i),plot(x,y,ro,xi,yi,b),xlabel(lablei)end.1802468-1-0.500.51(a)method=nearest02468-1-0.500.51(b)method=linear02468-1012(c)=method=spline02468-1012(d)method=cubic.19四种一维插值方法的比较 x=-5:1:5;y=1./(1+x.2);x
13、0=-5:0.1:5;y1=interp1(x,y,x0,nearest);y2=interp1(x,y,x0,linear);y3=interp1(x,y,x0,spline);y4=interp1(x,y,x0,cubic,);plot(x,y,o,x0,y1,:,x0,y2,-,x0,y3,xk,x0,y4,p).20-5-4-3-2-101234500.10.20.30.40.50.60.70.80.91.21l2、二维插值、二维插值二维插值与一维插值的基本思想相同,它是对两个自变量的二维插值与一维插值的基本思想相同,它是对两个自变量的函数函数z=f(x,y)进行插值。进行插值。lma
14、tlab中二维插值函数为中二维插值函数为interp2,该函数的调用格式为:,该函数的调用格式为:zi=interp1(x,y,z,xi,yi,method)输入参数输入参数x,y为两个向量,为两个向量,z是矩阵,是由是矩阵,是由x和和y确定的点的确定的点的值值z(i,:)=f(x,y(i)和和z(:,j)=f(x(j),y),method为插值方法选项。为插值方法选项。.22l二维插值有四种插值方法:二维插值有四种插值方法:(1)邻近点插值)邻近点插值(method=nearest)(2)双线性插值)双线性插值(method=linear)该方法是该方法是interp2的缺的缺省插值形式。省
15、插值形式。(3)三次样条插值)三次样条插值(method=spline)(4)二重立方插值)二重立方插值(method=cubic).23例例 二维插值方法比较二维插值方法比较clearx,y,z=peaks(6);%生成双峰函数值surf(x,y,z)%画出表面图xi,yi=meshgrid(-3:0.2:3,-3:0.2:3);%生成供插值的数据z1=interp2(x,y,z,xi,yi,nearest);z2=interp2(x,y,z,xi,yi,linear);z3=interp2(x,y,z,xi,yi,spline);z4=interp2(x,y,z,xi,yi,cubic);
16、figure,surf(xi,yi,z1),title(nearest)%绘制邻近点插值的表面图figure,surf(xi,yi,z2),title(linear)%绘制双线性插值的表面图figure,surf(xi,yi,z3),title(spline)%绘制三次样条插值的表面图figure,surf(xi,yi,z4),title(cubic)%绘制二重立方插值的表面图.24-4-2024-4-2024-6-4-20246.25-4-2024-4-2024-6-4-20246nearest.26-4-2024-4-2024-6-4-20246linear.27-4-2024-4-2024-10-50510spline.28-4-2024-4-2024-6-4-20246cubic.