1、第七章 数据的曲线拟合,曲线拟合:用函数 拟合给定的节点,可以是多项式、非线性函数或已知函数的线性 组合,但它必须有确定数量的未知系数。,通常,所拟合的节点数 L 必须大于未知数个数 k。确定系数,使得拟合函数与节点的偏差最小,这种方法称为最小二乘法。当 时,由于拟合曲线通过所有节点,将会简化我们的问题。,1、联系 都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数的方法。 2、区别 插值问题不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。数据拟合要求得到一个具体的近似函数的表达式。 拟合模型可以分为直线拟合、曲线拟合和观察数据修匀。,插值与拟合的区别和联系:,
2、一、直线拟合,若用线性函数拟合如下数据:,线性函数表示为:,其中 为待定系数。,拟合直线称为回归直线。,由于数据节点数大于未知数(即待定系数)的个数2,直线不可能经过每个点,但是直线与数据的偏差一定要达到最小。,直线与点的偏离程度(即残差)定义为:,残差的平方和为:,要使 R 达到最小,,令,矩阵形式:,“线性最小二乘法”,确定系数的另一种方法是直接求解超定线性方程组:,其中,方程组两边同时左乘 ,得常规方程组:,求解:,在MATLAB中,也可直接求解超定方程组的解:,c=A y %可求得最小二乘解,或已知数据点 x 与 y,用polyfit命令,c=polyfit(x, y,1),例1 求拟
3、合下列数据点的直线。,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.7646x+0.2862,A=x ones(6,1); c=(A*A)(A*y) c =1.76460.2862,c=Ayc =1.76460.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
4、(x,y,.,x,y1) gtext(y=1.7646x+0.2862); xlabel(X); ylabel(Y);,二、非线性曲线拟合,对一组数据,若做拟合幂函数:,为确定待定系数 ,取自然对数:,取:,则:,问题简化为线性回归,拟合数据点为:,然后确定,例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.09
5、89 7.5507 7.5106 8.0756 7.8708 8.2403 8.5303 8.7394 8.9981 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 on loglog(x,y) xlabel(X);ylabel(Y); title(a)Loglog plot of y vs x,Col
6、or,r) subplot(2,2,3) plot(log(x),log(y),+,log(x),log(y) xlabel(log(X);ylabel(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 已知,利用最小二乘法求指数拟合 y = c e ax,方法1 令,求a, c 使 S(a,c) = min%非线性最小二
7、乘,方法2 非线性模型的线性化处理y = c e a x 取自然对数ln(y)=a x +ln(c) 得, Y=a x + b %线性最小二乘 确定了a,b之后,可得c=eb,MATLAB提供了求非线性最小二乘拟合的函数: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=lsqcurvefit(f
8、un,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);c1=polyfit(x,log(y),1);%线性化
9、方法 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 最小,令,即:,矩阵形式为:,另一种推导格式:,将其写为超定方程:,其中:,当 时,方程为超定的,可求其最小二乘解:,c=Ay 或 c=polyfit(x,y,n)
10、,例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);ylabel(Y),四、函数线性组合曲线拟合法,拟合数据时,也可用已知函数的线性组合,形式为:,其中 是已知函数 , 是待定系数,n是所用函数个数。,用上式拟合数据,得超定方程:,例5 确定拟合函数,的系数,拟合的数据如下。,data
11、=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),