第四讲数据分析方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四讲 数据分析方法
第一节、数据拟合
问题:给定一批数据点(输入变量与输出变量的数据),需确定满足特定要求的曲线或 曲面。如果输入变量和输出变量都只有一个,则属于一元函数的拟合和插值;而若输入变量 有多个,则为多元函数的拟合和插值(有点回归分析的意思)
解决方案: (1) 若要求所求曲线(面)通过所给所有数据点,就是插值问题;
(2) 若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就
是数据拟合,又称曲线拟合或曲面拟合。 注意:插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同, 二者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时 容易确定,有时则并不明显。
例 1:下面数据是某次实验所得,希望得到 X 和 f 之间的关系? x f
1 2 4 7 9 12 13 15 17 1.5
3.9
6.6
11.7
15.6
18.8
19.6
20.6
21.1
曲线拟合问题最常用的解法——最小二乘法的基本思路
第一步:确定拟合的函数类型 y f (x ;a 1,a 2,",a m ),其中a 1,a 2,",a m 为待定系数。 (函数类型的确定可以根据内在的规律确定,如果无现成的规则,则可以通过散点图,联系 曲线的形状进行分析)
第二步:确定a 1,a 2,",a m 的最小二乘准则:要求n 个已知点(x i , y i )与曲线 y f (x ) n
的距离d i 的平方和 (y i f x 2 最小 。
( )) i i 1 用 MATLAB 作拟合
1.多项式拟合。作多项式 y a 0x
m
a 1x m 1 "a m 拟合,可利用
a=polyfit(x,y,m)—其中 x,y 为给出的数据,m 为多项式的次数。
多项式在 x 处的值 y 可用以下命令计算: y=polyval (a,x )
2.用 MATLAB 作非线性最小二乘拟合
Matlab 的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit 和 lsqnonlin 。两个命令 都要先建立 M-文件 fun.m ,在其中定义函数 f(x)。 (1)x = lsqcurvefit (‘fun’,x0,x‚ata,y‚ata);
(2)x =lsqcurvefit (‘fun’,x0,x‚ata,y‚ata,options);
(3)x = ls qcurvefit (‘fun’,x0,x‚ata,y‚ata,options,’‛ra‚’); (4)“x, options” = lsqcurvefit (‘fun’,x0,x‚ata,y‚ata,…);
(5)“x, options,funval” = lsqcurvefit (‘fun’,x0,x‚ata,y‚ata,…);
(6)“x, options,funval, ‟acob” = lsqcurvefit (‘fun’,x0,x‚ata,y‚ata,…);
(7)x=lsqnonlin(‘fun’,x0);
(8)x= lsqnonlin (‘fun’,x0,options);
(9)x= lsqnonlin (‘fun’,x0,options,‘‛ra‚’);
(10)[x,options]= lsqnonlin (‘fun’,x0,…);
(11)[x,options,funval]= lsqnonlin (‘fun’,x0,…);
在使用lsqcurvefit与lsqnonlin命令时,共同的问题是要先知道函数的类型,而拟合其实是决定函数中的待定系数。
第二节插值
插值的基本问题:给出n个数对,(P i, f (P i)),i 1,2,",n,求点P处对应的函数值f (P)。
一、一维插值
已知n 1个节点(x i, y i ),i 0,1,",n,求任意点*处的函数值*。常用的插值方法
x y
有拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。
分段线性插值:将各数据点用折线连接起来
多项式插值:求一个多项式通过所有数据点,可以假设出多项式的系数,最后通过
求解方程得到每个系数(拉格朗日插值,用n次多项式描述n 1个点)
样条插值:分段多项式的光滑连接(三次样条插值)
牛顿插值:利用节点之间的各阶差商和差分构造多项式
Hermite插值:对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值
(1)MATLAB命令:y=interp1(x0,y0,x,'method')
method指定插值的方法,默认为线性插值。其值可为:
'nearest' 最近项插值
'linear' 'spline' 'cubic' 线性插值
立方样条插值立方插值。
所有的插值方法要求x0是单调的。
当x0为等距时可以用快速插值法,使用快速插值法的格式为'*nearest'、'*linear'、'*spline'、'*cubic'。
(2)三次样条插值在Matlab中的实现
在Matlab中数据点称之为断点。如果三次样条插值没有边界条件,最常用的方法,就
是采用非扭结(not-a-knot)条件。这个条件强迫第1个和第2个三次多项式的三阶导数相
等。对最后一个和倒数第2个三次多项式也做同样地处理。
Matlab中三次样条插值也有现成的函数:
y=interp1(x0,y0,x,'spline');
y=spline(x0,y0,x);
pp=csape(x0,y0,conds),
pp=csape(x0,y0,conds,valconds),y=ppval(pp,x)。
其中x0,y0是已知数据点,x是插值点,y是插值点的函数值。
对于三次样条插值,我们提倡使用函数csape,csape的返回值是pp形式,要求插值点