第四讲 matlab插值、拟合和回归分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四讲 插值、拟合与回归分析
在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样本点,要求得到变量之间的函数关系或得到样本点之外的数据。解决此类问题的方法一般有插值、拟合和回归分析等。
设有一组实验数据0011(,),(,),(,)n n x y x y x y ,当原始数据精度较高,要求确定一个简单函数()y x ϕ=(一般为多项式或分段多项式)通过各数据点,即(),0,,i i y x i n ϕ== ,称为插值问题。
另一类是拟合问题,当我们已经有了函数关系的类型,而其中参数未知或原始数据有误差时,我们确定的初等函数()y x ϕ=并不要求经过数据点,而是要求在某种距离度量下总体误差达到最小,即
(),0,,i i i y x i n ϕε=+= ,且20
n
i i ε=∑达到最小值。
对同一组实验数据,可以作出各种类型的拟合曲线,但拟合效果有好有坏,需要进行有效性的统计检验,这类问题称为回归分析。 一、插值(interpolation)
常用的插值方法有分段线性插值、分段立方插值、样条插值等。 1、一元插值
yi=interp1(x,y,xi,method)
对给定数据点(x,y),按method 指定的方法求出插值函数在点(或数组)xi 处的函数值yi 。其中method 是字符串表达式,可以是以下形式:
'nearest' ——最邻近点插值
'linear' ——分段线性插值(也是缺省形式)
'spline' ——分段三次样条插值
'cubic' 分段立方插值
例:在一天24小时内,从零点开始每间隔2小时测得环境温度数据分别为(℃):
12,9,9,10,18,24,28,27,25,20,18,15,13
用不同的插值方法估计中午1点(即13点)的温度,并绘出温度变化曲线。
>> x=0:2:24;
>> y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
>>y_linear=interp1(x,y,13),y_nearest=interp1(x,y,13,'nearest')
>>y_cubic=interp1(x,y,13,'cubic'),y_spline=interp1(x,y,13,'spline')
>> y1=interp1(x,y,xx); y2=interp1(x,y,xx,'nearest');
>> y3=interp1(x,y,xx,'cubic');y4=interp1(x,y,xx,'spline');
>> subplot(2,2,1),plot(x,y,'or',xx,y1)
>> subplot(2,2,2),plot(x,y,'or',xx,y2)
>> subplot(2,2,3),plot(x,y,'or',xx,y3)
>> subplot(2,2,4),plot(x,y,'or',xx,y4)
2、二元插值
zi=interp2(X,Y,Z,xi,yi,method)
已知数据点(X,Y,Z),求插值函数在(xi,yi)处的函数值zi,插值方法method同interp1。这里要求X,Y,Z是同维矩阵,且X,Y是
网格矩阵,或者X是与Z列数相同的行向量,Y是与Z行数相同的列向量。
例:测得平板表面5 3网格点处的温度分别为
试作出平板表面的温度分布图
>> x=1:5;y=1:3;z=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
>> xx=1:0.1:5;yy=1:0.1:3;yy=yy';
>> zz=interp2(x,y,z,xx,yy,'cubic');
>> mesh(xx,yy,zz)
3、不规则点的插值
若数据是不规则的,即数据不能构成矩阵形式,从而不能用interp2函数进行插值。
zi=griddata(x,y,z,xi,yi,method)
这里,x,y,z为同维向量,表示已知数据点的坐标,xi,yi是行向量和列向量,返回值zi为在meshgrid(xi,yi)网格矩阵处的函数值。method 可选择’linear’,’nearest’,’cubic’。
例:假如上例中的数据残缺不全
>> x=[3 4 5 1 3 4 1 2 5];y=[1 1 1 2 2 2 3 3 3];
>>z=[80 82 84 79 61 65 84 84 86];
>> xx=1:0.1:5;yy=1:0.1:3;
>> zz=griddata(x,y,z,xx,yy','cubic');
>> mesh(xx,yy',zz)
二、拟合(Fit)
1、多项式拟合
p=polyfit(x,y,n) 用n次多项式拟合向量数据(x,y)。
例:拟合下列数据
>> x=[0.1 0.2 0.15 0 -0.2 0.3];y=[0.95 0.84 0.86 1.06 1.50 0.72];
>> p=polyfit(x,y,2);
>> xx=-0.2:0.01:0.3;yy=polyval(p,xx);
>> plot(x,y,'or',xx,yy)
2、曲线拟合
当经验函数不是多项式,而是其它类型的函数时,可以用lsqcurvefit 函数对拟合函数中的未知参数进行估计。
c=lsqcurvefit(fun,c0,xdata,ydata)
fun 是经验拟合函数,含有未知参数,即具有形式fun(c,x),c0是未知参数的预估计值,(xdata,ydata)是已知实验数据。 例:已知数据表
用适当的曲线进行数据拟合。
先画散点图,根据散点图确定拟合曲线为对数函数ln b t y a += >> t=1:16;
>> y=[4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 ... 10.55 10.58 10.6]; >> plot(t,y,'or')
>> f=inline('c(1)+c(2)*log(t)','c','t') %建立拟合函数 >> c=lsqcurvefit(f,[1,1],t,y) %求未知参数 >> tt=1:0.1:16;yy=f(c,tt); >> hold on >> plot(tt,yy) 3、拟合工具箱
Matlab 中的拟合工具箱是一个更方便、更直观进行曲线拟合的图形界面,用cftool 指令打开拟合工具箱。
拟合效果主要看2个参数:SSE (误差平方和)和R-Square ,SSE 越接近0,R-Square 越接近1,拟合效果越好。