拟合
一 拟合
(1)概念
已知离散数据(xi,yi),i1,2,,m,找出一个函数yf(x),使得函数在xi处的数值最接近原始数据yi的过程,就是拟合。
函数的数值和原始数值的接近程度用误差函数表示:
(f(xi)yi)222ii1i1mm
通过这种度量衡量接近程度的求拟合函数的方法,称为拟合曲线的最小二乘法。
拟合的工作就是找一个可以用来做拟合的函数,并求得使得最小的该函数的参数。
2(2)求拟合函数的步骤
Step1:利用MATLAB做原始数据的散点图
Step2:根据散点图的趋势确定拟合函数的类型,如:多项式函数,指数函数,三角函数
Step3:用最小二乘法确定拟合函数的系数
Step4:对比原始数值和拟合出来的函数数值,若差别较大,回到Step2
(3)拟合的应用
拟合曲线在实际中有广泛应用,特别在实验、统计等方面。通常,有一组实验活观测取得的数据,通过这些数据的散点图确定拟合函数的类型。确定好拟合函数可以对数据进行分析,也可以用来做预测。
(4)实例
实例一:多项式拟合的MATLAB实现
clear all;clc;close all;
%多项式拟合
%数据我自己产生了,用时只需要用你要拟合的原始数据替换我的产生的两个向量
x1=rand(1,30);
x=sort(x1);
p1=[1 3 2 4];
y=polyval(p1,x);
%已经成功产生数据(x,y),向量x和向量y,
p=polyfit(x,y,4);%p为多项式的降幂系数
y0=polyval(p,x);%y0是多项式函数值
plot(x,y,'p',x,y0,'r')%把原始数据和拟合数据作图对比
实例二:指数拟合
如果发现散点图上的数据趋势和指数的趋势相同,可做指数拟合,下面给出两种常用的方式
方式一:把数据做对数变化,做线性拟合,求出拟合函数的系数
clear all;clc;close all;
%******************************
%求指数拟合方法之一就是做对数变化
%lny=bx+a
%则最终的拟合函数是 y=exp(a)*exp(bx)
x1=rand(1,30);
x=sort(x1);
y=exp(x);%x,y为原始数据
y1=log(y)%做对数变化
p=polyfit(x,y1,1);%p为多项式的降幂系数
y0=polyval(p,x);%y0是多项式函数值
plot(x,y1,'p',x,y0,'r')%把原始数据和拟合数据作图对比
方式二:用非线性拟合函数lsqcurvefit 做,具体实现如下
clear all;clc;close all;
x1=rand(1,30);
x=sort(x1);
y=exp(x);%x,y为原始数据
zhishu=inline('a(1)+exp(a(2)*x)','a','x');
a=lsqcurvefit(zhishu,[0.1 0.1],x,y);
plot(x,y,'p',x,zhishu(a,x),'r')
(5)拟合工具箱
在MATLAB命令窗口输入cftool可开启拟合工具箱,下图是MATLAB 2014a版本的拟合工具箱初始界面。
把原始数据(x,y)别人在X data和 Y data中选出来,这里必须是两个向量,在中间两个下拉选项中,上面的选择你要选择的拟合函数。在左下方会有拟合后的表达式,和一些参数指标。
举例如下: