《第七章 数据的曲线拟合-席.ppt》由会员分享,可在线阅读,更多相关《第七章 数据的曲线拟合-席.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 数据的曲线拟合数据的曲线拟合 曲线拟合:用函数曲线拟合:用函数 拟合给定的节点拟合给定的节点 可以是可以是多项式、非线性函数或已知函数的线性多项式、非线性函数或已知函数的线性组合,但它必须有确定数量的未知系数。组合,但它必须有确定数量的未知系数。通常,所拟合的节点数通常,所拟合的节点数 L 必须大于未知数个数必须大于未知数个数 k。确定系数,使得拟合函数与节点的偏差最小,这种确定系数,使得拟合函数与节点的偏差最小,这种方法称为最小二乘法。方法称为最小二乘法。当当 时,由于拟合曲线通时,由于拟合曲线通过所有节点,将会简化我们的问题。过所有节点,将会简化我们的问题。1 1、联系、联系
2、都是根据实际中一组已知数据来构造一个能够反映数都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数的方法。据变化规律的近似函数的方法。2 2、区别、区别插值问题插值问题不一定得到近似函数的表达形式,仅通过插不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。值方法找到未知点对应的值。数据拟合数据拟合要求得到一个要求得到一个具体的近似函数的表达式。具体的近似函数的表达式。拟合模型可以分为直线拟合、曲线拟合和观察数拟合模型可以分为直线拟合、曲线拟合和观察数据修匀。据修匀。插值与插值与拟合的区别和联系拟合的区别和联系:一、直线拟合一、直线拟合若用线性函数拟合如下数据:若用线
3、性函数拟合如下数据:线性函数表示为:线性函数表示为:其中其中 为待定系数。为待定系数。拟合直线称为拟合直线称为回归直线回归直线。由于数据节点数大于未知数由于数据节点数大于未知数(即待定系数即待定系数)的个数的个数2,直线不可能经过每个点,但是直线与数据的偏差,直线不可能经过每个点,但是直线与数据的偏差一定要达到最小。一定要达到最小。直线与点的偏离程度(即残差)直线与点的偏离程度(即残差)定义为:定义为:残差的平方和为:残差的平方和为:要使要使 R 达到最小,达到最小,令令矩阵形式:矩阵形式:“线性最小二乘法线性最小二乘法”确定系数的另一种方法是直接求解超定线性方程组:确定系数的另一种方法是直接
4、求解超定线性方程组:其中其中方程组两边同时左乘方程组两边同时左乘 ,得常规方程组:,得常规方程组:求解:求解:在在MATLAB中,也可直接求解超定方程组的解:中,也可直接求解超定方程组的解:c=A y%可求得最小二乘解可求得最小二乘解或已知数据点或已知数据点 x 与与 y,用用polyfit命令命令c=polyfit(x,y,1)例例1 求拟合下列数据点的直线。求拟合下列数据点的直线。x=0.1 0.4 0.5 0.7 0.7 0.9;y=0.61 0.92 0.99 1.52 1.47 2.03;c=polyfit(x,y,1)c=1.7646 0.2862即线性函数即线性函数g(x)=1.
5、7646x+0.2862A=x ones(6,1);c=(A*A)(A*y)c=1.7646 0.2862c=Ayc=1.7646 0.2862绘图程序:绘图程序:x=0.1 0.4 0.5 0.7 0.7 0.9;y=0.61 0.92 0.99 1.52 1.47 2.03;c=polyfit(x,y,1);y1=polyval(c,x);plot(x,y,.,x,y1)gtext(y=1.7646x+0.2862);xlabel(X);ylabel(Y);二、非线性曲线拟合二、非线性曲线拟合对一组数据,若做拟合幂函数:对一组数据,若做拟合幂函数:为确定待定系数为确定待定系数 ,取自然对数
6、:,取自然对数:取:取:则:则:问题简化为线性回归,拟合数据点为:问题简化为线性回归,拟合数据点为:然后确定然后确定例例2 做下列数据点的幂函数拟合。做下列数据点的幂函数拟合。c=polyfit(log(x),log(y),1)c=0.2093 1.8588结果:结果:所以所以x=0.15 0.4 0.6 1.01 1.5 2.2 2.4 2.7 2.9 3.5 3.8 4.4 4.6 5.1 6.6 7.6;y=4.4964 5.1284 5.6931 6.2884 7.0989 7.5507 7.5106 8.0756 7.8708 8.2403 8.5303 8.7394 8.9981
7、9.1450 9.5070 9.9115;c=polyfit(log(x),log(y),1);alfa=c(1);beta=exp(c(2);y1=beta*x.alfa;subplot(2,2,1)plot(x,y,+)xlabel(X);ylabel(Y);subplot(2,2,2)plot(x,y,+)hold onloglog(x,y)xlabel(X);ylabel(Y);title(a)Loglog plot of y vs x,Color,r)subplot(2,2,3)plot(log(x),log(y),+,log(x),log(y)xlabel(log(X);ylabe
8、l(log(Y);title(b)Linear plot of log(y)vs log(x),Color,r);subplot(2,2,4)plot(x,y,+,x,y1)xlabel(X);ylabel(Y);title(c)Linear plot of y vs x,Color,r);hold off例例3 已知已知 x 0 1 2 3 4 y 1.5 2.5 3.5 5.0 7.5利用利用最小二乘法最小二乘法求求指数拟合指数拟合 y=c e ax 方法方法1 令令求求a,c 使使 S(a,c)=min%非线性最小二乘非线性最小二乘方法方法2非线性模型的线性化处理非线性模型的线性化处理
9、y=c e a x 取自然对数取自然对数 ln(y)=a x+ln(c)得得,Y=a x+b%线性最小二乘线性最小二乘确定了确定了a,b之后,可得之后,可得c=ebMATLAB提供了求提供了求非线性最小二乘拟合非线性最小二乘拟合的函数:的函数:lsqcurvefit:输入格式为输入格式为:(1)x=lsqcurvefit(fun,x0,xdata,ydata);(2)x=lsqcurvefit(fun,x0,xdata,ydata,options);(3)x=lsqcurvefit(fun,x0,xdata,ydata,options,grad);(4)x,options=lsqcurvefi
10、t(fun,x0,xdata,ydata,);(5)x,options,funval=lsqcurvefit(fun,x0,xdata,ydata,);(6)x,options,funval,Jacob=lsqcurvefit(fun,x0,xdata,ydata,);其中,其中,fun-事先定义的非线性拟合函数事先定义的非线性拟合函数x0-迭代初值迭代初值xdata,ydata-已知数据点已知数据点x=0 1 2 3 4;y=1.5 2.5 3.5 5.0 7.5;c=lsqcurvefit(fff,1;2,x,y)%非线性最小二乘法非线性最小二乘法yy=c(1)*exp(c(2)*x);c
11、1=polyfit(x,log(y),1);%线性化方法线性化方法y1=exp(c1(2)*exp(x*c1(1);plot(x,yy,b,x,y1,r)legend(最小二乘法最小二乘法,线性化方法线性化方法)xlabel(X);ylabel(Y);function y=fff(c,x)y=c(1)*exp(c(2)*x);y=c e ax Y=a x+b,c=eb三、高次多项式曲线拟合三、高次多项式曲线拟合最小二乘的思想可以推广到高次多项式拟合。最小二乘的思想可以推广到高次多项式拟合。设设 n 次多项式:次多项式:曲线与数据点的残差:曲线与数据点的残差:记:记:为使为使 R 最小,令最小,
12、令即:即:矩阵形式为:矩阵形式为:另一种推导格式:另一种推导格式:将其写为超定方程:将其写为超定方程:其中:其中:当当 时,方程为超定的,可求其最小二乘解:时,方程为超定的,可求其最小二乘解:c=Ay 或或 c=polyfit(x,y,n)例例4 用二次多项式拟合下列数据:用二次多项式拟合下列数据:x=0.1,0.4,0.5,0.7,0.7,0.9;y=0.61,0.92,0.99,1.52,1.47,2.03;cc=polyfit(x,y,2);xx=0:0.1:1;yy=polyval(cc,xx);plot(xx,yy,x,y,x)axis(0,1,0,3)xlabel(X);ylabe
13、l(Y)四、函数线性组合曲线拟合法四、函数线性组合曲线拟合法 拟合数据时,也可用已知函数的线性组合,形式为:拟合数据时,也可用已知函数的线性组合,形式为:其中其中 是已知函数是已知函数,是待定系数,是待定系数,n是所用函数个数。是所用函数个数。用上式拟合数据,得超定方程:用上式拟合数据,得超定方程:例例5 确定拟合函数确定拟合函数的系数,拟合的数据如下。的系数,拟合的数据如下。data=0.1 0.61;0.4 0.92;0.5 0.99;0.7 1.52;0.7 1.47;0.9 2.03;x=data(:,1);y=data(:,2);A(:,1)=ones(size(x);A(:,2)=x;A(:,3)=sin(x);A(:,4)=exp(x);c=Ay;xx=0:0.01:1;g=c(1)*ones(size(xx)+c(2)*xx+c(3)*sin(xx)+c(4)*exp(xx);plot(x,y,*,xx,g);xlabel(x);ylabel(y)axis(square);axis(0,1,0,3)
限制150内