没有合适的资源?快使用搜索试试~ 我知道了~
首页数据分析及处理-神经网络.pdf
数据分析及处理-神经网络.pdf
需积分: 27 638 浏览量
更新于2023-05-28
评论 1
收藏 1.67MB PDF 举报
以分析的 办法对数据进行分析及处理,主要 包括数据记录、整理、计算、作图、分析等方面,涉及数据运算的处理方法。阐述的数据处理方法有:插值、最小二乘法拟合、灰色预测以及BP 神经网络 预测
资源详情
资源评论
资源推荐

第 5 章 数据分析及处理
上一章已经从统计的角度对数据作了统计的描述和分析,这一章将以分析的
办法对数据进行分析及处理。进行实验的最终目的是为了通过数据的获得以及对
数据的处理,从中揭示出有关物理量的关系,或找出事物的内在规律性,或验证
某种理论的正确性,或为以后的实验准备依据。因而,需要对所获得的数据进行
正确的处理,数据处理贯穿于从获得原始数据到得出结论的整个实验过程。主要
包括数据记录、整理、计算、作图、分析等方面,涉及数据运算的处理方法。本
章阐述的数据处理方法有:插值、最小二乘法拟合、灰色预测以及 BP 神经网络
预测,下面分别予以简单讨论。
5.1 插值
在实际工作中,人们得到的一些数据通常是一些不连续的点,在土木工程、
流体力学、经济学和空气动力学等学科中经常要见到这样的情况。此时,这些数
据如果不加以处理,就难以发现内在的规律性。比如,要想得到这些离散点外的
其他数值,就必须运用这些已知的点进行插值。的
以简单的函数近似地表示复杂函数(即数据的内在规律性),这就是插值与
拟合要解决的数学问题。插值:求经过已知有限个数据点的简单近似函数。拟合:
已知有限个数据点,求简单的近似函数,但不要求该简单近似函数经过已知数据
点,只要求在某种意义下它在这些数据点上的总偏差最小(即以某种条件与复杂
函数逼近)。插值和拟合都是要根据一组数据构造一个简单的函数作为近似,由
于近似的要求不同,二者的数学方法上是完全不同的。
5.1.1 插值的基本原理
这里以一维问题为基础来阐述插值问题的基本原理。首先插值问题指的是:
已 知
1n
个 数 据 节 点
),,1,0)(,( njyx
jj
, 这 里
j
x
互 不 相 同 , 不 妨 设
0 1 n
a x x x b
,数据节点
),(
jj
yx
可以看成是由某个函数
)(xgy
产生
的,
g
的解析表达式可能十分复杂,或不存在解析形式,只是由节点给出的离
散数据,那么插值问题实际上就是构造简单的插值函数来求任一插值节点
)(*
j
xx
处的插值函数值
*y
。从这里可以看出,插值问题的关键就是构造那个
简单的插值函数。那么,插值问题求解的基本思路是:构造一个相对简单的函数
)(xfy
, 称 为 插 值 函 数 , 使
)(xf
通 过 全 部 的 数 据 节 点 , 即
),,1,0()( njyxf
jj
,再利用插值函数
)(xf
计算插值,即
*)(* xfy
。另外,

常用的插值方法有:拉格朗日多项式插值、分段线性插值、分段三次插值、牛顿
插值、Hermite 插值、分段三次 Hermite 插值和三次样条插值等。
现在以 Lagrange(拉格朗日)多项式插值为例来讲解插值问题。求一个
n
次
多项式
n
nn
xaxaaxP
10
)(
来经过已知 的
1n
个互 不相同的数据节 点
),,1,0)(,( njyx
jj
。一般的想法是:将
1n
个点代入
n
次多项式,可以得到
1n
个方程,解这个方程组就可以得到唯一的系数
n
aaa ,,,
10
(因为是
1n
个互不
相同的点),即唯一的多项式,但是该方法计算量比较大。
Lagrange
想到了一个
巧妙的方法计算这个
n
次多项式:先构造一组基函数
.,,1,0,
)())(()(
)())(()(
)(
110
110
0
ni
xxxxxxxx
xxxxxxxx
xx
xx
xl
niiiiii
nii
n
ij
j
ji
j
i
(5.1.1)
此处的
)(xl
i
为
n
次多项式,满足
.,1
,,0
)(
ij
ij
xl
ji
(5.1.2)
记
)()()()()(
1100
0
xlyxlyxlyxlyxL
nn
n
i
iin
, (5.1.3)
则称
)(xL
n
为 Lagrange
n
次插值多项式。
注意:Matlab 软件中没有现成的 Lagrange 插值函数,必须编写一个 M 函
数文件实现 Lagrange 插值。
设
1n
个数据节点以数组
0
X
,
0
Y
输入,而
m
个插值点以数组
X
输入,输
出数组
Y
为
m
个插值。编写一个名为 Lagrange.m 的 M 函数文件:
function y=Lagrange(x0,y0,x);
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;

end
y(i)=s;
end
以 Lagrange 插值多项式
)(xL
n
近似
)()( bxaxf
,虽然随着节点个数
的增加,
)(xL
n
的次数
n
变大,多数情况下误差
)()()( xLxfxR
nn
会变小。但
是
n
增大时,插值多项式
)(xL
n
有时会出现大的振荡。理论上,当
n
,在
],[ ba
内并不能保证
)(xL
n
处处收敛于
)(xf
。Runge 给出了一个著名的例子:
,
1
1
)(
2
x
xf
]5,5[x
。
(5.1.4)
对于较大的
x
,随着多项式次数
n
的增大,
)(xL
n
振荡越来越大,事实上可以证
明,仅当
63.3x
时,才有
)()(lim xfxL
n
n
,而在此区间外,
)(xL
n
是发散的。
高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。
大家注意到:线性插值、样条插值和三次插值的 MATLAB 程序是现成的,可
以调用这些函数实现这些类型的插值,使用起来非常方便,现在分析这些 MATLAB
的插值函数的用法。
5.1.2 MATLAB 计算一维插值
函数 interp1 的功能是:求一维分段低次插值问题。一维插值是进行数据分
析和曲线拟合的重要手段。interp1 函数使用多项式技术,用分段低次多项式函
数逼近提供数据的内在规律,并计算目标插值点上的插值函数值。常用的调用格
式是:
Y=interp1(X0,Y0,X,method),
其中,
0
X
和
0
Y
为给定数据的矢量,长度相同;
X
为需要插值点的矢量,
Y
输出
为需要插值点的插值;method 是一个可选的字符串,指定一种插值方法,具体
可以分别取为:
最近邻插值(method='nearest'):该方法将插值点的值设置为与已知数据节
点中距离最近点的值。
线性插值(method='linear'):该方法用线性函数逼近每对数据节点的内在
规律,并返回需要插值点
X
处的相关函数值。简单地说,将每两个相邻的节点
用直线连起来,如此形成的折线就是分段线性插值函数。
注:当节点数越多,分段就越多,插值误差越小。实际上用函数表作插值计
算时,分段线性插值就足够了,如数学、物理中用的特殊函数表,数理统计中用

的概率分布表等。
三次样条插值(method='spline'):该方法用三次样条函数拟合每对数据节
点的内在规律,以 spline 函数在插值节点处进行三次样条插值。
另外,
Y=spline(X0
,
Y0
,
X)
也可实现三次样条插值,端点为边界条件。
Spline
函数还可处理上述第一类端点边界条件,将原来的输入数组 Y0 改为 YY0=[a Y0
b],这里 a,b 分别为
)(),(
0 n
xSxS
。
另外,pp=csape(X0,Y0,conds),Y=ppval(pp,X)。也能实现三次样条插值。
函数 csape 的返回值是 pp 形式,要求插值点的函数值,必须调用函数 ppval。
pp=csape(X0,Y0):使用默认的边界条件,即 Lagrange 边界条件。
pp=csape(X0,Y0,conds)中的 conds 指定插值的边界条件,其值可为:
'complete':边界为一阶导数,即默认的边界条件;
'not-a-knot':非扭结条件;
'periodic':周期条件;
'second':边界为二阶导数,二阶导数的值[0,0];
'variational':设置边界的二阶导数值为[0,0]。
对于一些特殊的边界条件,详细情况请使用帮助 help csape。
注:许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞
机的机翼外形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程
度,不仅要连续,而且要有连续的曲率,这就导致了样条插值的产生。所谓样条
(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木条或细
金属条。绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并
使连接点处有连续的曲率。数学上将具有一定光滑性的分段多项式称为样条函
数。
三次插值(method='pchip'或'cubic'):该方法用 pchip 函数对矢量 X0 和
Y0 作分段三次 Hermite 插值。
以上这几种插值方法在速度、内存和平滑性等方面有差别,使用时可以根据
需要选择。最近邻插值是最快的方法,但是得到的结果平滑性最差;线性插值比
最近邻插值要占用更多的内存,运行时间略长,与最近邻法不同,它生成的结果
是连续的;三次样条插值的运行时间最长,内存消耗比三次插值略少,它生成的
结果平滑性最好;三次插值需要更多内存,而且运行时间比最近邻法和线性插值
的长,但是,使用此插值法时,插值数据及导数是连续的。
例 1 机床加工
待加工零件的外形根据工艺要求由一组数据(X0, Y0)给出(在平面情况下),
用程控铣床加工时每一刀只能沿 X 方向和 Y 方向走非常小的一步,这就需要从
已知数据得到加工所要求的步长很小的(X, Y)坐标。表 5.1 中给出的 X0, Y0
数据位于机翼断面的下轮廓线上,假设需要得到 X 坐标每改变 0.1 时的 Y 坐标。
试完成加工所需数据,画出曲线,并求出 X = 0 处的曲线斜率和 13 ≤ X ≤ 15
范围内 Y 的最小值。
表 5.1.1 已知的数据(X0,Y0)
X0 0 3 5 7 9 11 12 13 14 15

Y0 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
要求用 Lagrange、分段线性和三次样条三种插值方法计算。
解 求解该问题的程序为:
clear all, close all
x0=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];
x=0:0.1:15;
y1=lagrange(x0,y0,x); %调用前面编写的 Lagrange 插值函数
y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline');
pp1=csape(x0,y0); y4=ppval(pp1,x);
pp2=csape(x0,y0,'second'); y5=ppval(pp2,x);
fprintf('比较一下不同插值方法和边界条件的结果:\n')
fprintf('x y1 y2 y3 y4 y5\n')
xianshi=[x',y1',y2',y3',y4',y5'];
fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',xianshi')
subplot(2,2,1), plot(x0,y0,'+',x,y1), title('Lagrange')
subplot(2,2,2), plot(x0,y0,'+',x,y2), title('Piecewise linear')
subplot(2,2,3), plot(x0,y0,'+',x,y3), title('Spline1')
subplot(2,2,4), plot(x0,y0,'+',x,y4), title('Spline2')
dyx0=ppval(fnder(pp1),x0(1)) %求 x=0 处的导数
ytemp=y3(131:151);
index=find(ytemp==min(ytemp));
xymin=[x(130+index),ytemp(index)]
计算结果为:
dyx0 =0.5007
xymin =13.8000 0.9828
图 5.1.1 四种插值
可以看出,拉格朗日插值的结果根本不能应用,分段线性插值的光滑性较差
(特别是在
x
= 14 附近弯曲处),建议选用三次样条插值的结果。
5.1.3 MATLAB 计算二维插值
剩余42页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0