MATLAB及其应用 第三讲 数据处理 授课人:鲍文 在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 找到徽标文件 单击“确定” 2019/2/17 在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 找到徽标文件 单击“确定” 重新设置徽标大小 单击徽标内任意位置。徽标外部出现的方框是“调整控点” 使用这些重新设置对象大小 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。 MATLAB及其应用 第三讲 数据处理 授课人:鲍文 2019/2/17 哈尔滨工业大学动力工程控制与仿真研究所 > 退出
目录 1 矩阵分析 2 数据分析函数 3 多项式处理 4 曲线拟和与插值 5 数据分析 6 微分方程数值解 < > 主菜单 退出 2019/2/17 哈尔滨工业大学动力工程控制与仿真研究所 < > 主菜单 退出
1 矩阵分析 一、特征值分解 对于方阵a特征值问题:ax=rx,求取a阵的特征值和特征向量使用下面的方法: [v,d]=eig(a) 使用 [v,d]=eig(a,’nobalance’) “平衡” 的作用减少计算误差,不平衡用于A阵大小悬殊的时候。 广义特征值问题:ax=rbx,求解的方式为: [v,d]=eig(a,b) 2019/2/17
二、三角分解 三角分解把矩阵分解为上三角矩阵和下三角矩阵,又称为LU分解或者。计算中使用高斯变量消去法。这一分解使用 [l,u]=lu(a)实现。 2019/2/17
三、奇异值分解 [u,s,v]=svd(a) 实现奇异值分解。 分解得到的三个因数有如下关系 a=u*s*v 其中u矩阵和v矩阵是正交矩阵,s矩阵是对角矩阵,它的对角元素是a矩阵的奇异值。 奇异值分解的稳定性很好。 2019/2/17
2 数据分析函数 函数名 含义 max 最大值 min 最小值 mean 均值 std 标准方差 median 中值 2019/2/17
分析函数 函数名 含义 sum 元素的总和 prod 元素的乘积 cumrod 元素的累积 cumsum 元素的累加和 函数名 含义 sum 元素的总和 prod 元素的乘积 cumrod 元素的累积 cumsum 元素的累加和 diff 差分函数:少了一个元素 2019/2/17
例题 求出y=x*sin(x) 在0<x<100的每个峰值 思路: 1、数学上峰值就是导数为零的点 2、导数在matlab中可以使用差分代替 3、差分后怎么求过零点呢? 2019/2/17
3 多项式处理 一、多项式表示 多项式在MATLAB中使用降幂系数的行向量表示。表示中需要包含零系数的项。poly2str:control toolbox中的函数 使用函数roots可找出多项式等于零的根。 规定:多项式用行向量,根用列向量。 给出多项式的根,使用poly函数也可以构造出相应的多项式。 2019/2/17
二、多项式运算 函数conv进行乘法运算,deconv进行除法运算。MATLAB没有提供特别的多项式加减法运算。 多项式除法并不一定能够除尽,很多时候需要有余数多项式。 多项式微分使用polyder(p)函数,估计值使用polyval(p,at)函数。 2019/2/17
4 曲线拟和与插值 在分析试验数据中,常常要面临将试验数据作解析描述的任务,这个问题有曲线拟合和插值两种方法。 在曲线拟合中,假定已知曲线的规律,作曲线的最佳逼近,但不需要经过所有的数据点;在插值中,认为数据是准确的,求取其中描述点之间的数据。 2019/2/17
一、曲线拟合 1、多项式的最小二乘曲线拟合 使用polyfit,它需要曲线的x、y值,以及曲线的阶数。 曲线的阶数:如果曲线的阶数选择的过小,拟合效果不好;如果曲线的阶数过高,虽然数据点上看到效果好,数据点之间会出现有数据振荡的问题,阶数不宜过高,小于5阶。 灵活使用拟合 2019/2/17
2、直接最小二乘 最小二乘函数为k=nnls(fx,y) 数据规律并不是多项式形式,直接最小二乘来拟合。 matlab 数据规律并不是多项式形式,直接最小二乘来拟合。 最小二乘函数为k=nnls(fx,y) 计算结果将使得|fx*k-y|2范数下最小 在计算中,fx可以为x的函数。 例子:拟合 2019/2/17
二、插值函数 1、曲线插值函数interp1 方法 t=interp1(x,y,x0,’method’) matlab 1、曲线插值函数interp1 方法 t=interp1(x,y,x0,’method’) x、y:原始数据点,x0为进行插值的数组,method为插值算法:线性插值('linear'),三次样条插值('spline'),三次多项式插值(‘cubic’). 如果x0出界,则对应值为NaN 例程:ex42.m 2019/2/17
2、曲面插值 插值函数: interp2,基本形式: zi=interp2(x,y,z,xi,yi,method) method包括 linear:线性 cubic:三次多项式 nearest:粗略估计数据 例程:ex43 2019/2/17
三、三次样条 1、使用的原因 高阶多项式插值出现病态问题,三次样条使用分段多项式,各点上的三次导数相等。它光滑、导数连续。 2、插值 yi=spline(x,y,xi); pp=spline(x,y); 分段多项式形式 例程:ex44 2019/2/17
三次样条 pp形式可以和三次多项式形式转化: [break,coef,np,nc]=unmkpp(pp) 断点、三次多项式、多项式数量、系数数量 pp=mkpp(break,coef); 由于转化为了多项式形式,可以方便的进行积分和微分运算。 2019/2/17
四、滤波和平滑 1、插值和拟合的问题:噪声 2、滤波: 滞后,filter y=filter(b,a,x) a,b:滤波器的分子分母,x输入 a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na) 例程:ex46 2019/2/17
3、平滑 yi=csaps(x,y,P,xi) yi=csaps(x,y,P) 其中P为平滑因子0~1 0: 最小二乘 1:平滑近似 0: 最小二乘 1:平滑近似 ex46 ex45 2019/2/17
5 数据分析 1、极小化 MATLAB提供了fmin和fmins两个函数来求极值,它们分别寻找一维和n维函数的极值。它使用的单纯性法搜索。函数计算量大,或搜索区内有多极值,搜索的过程较长,也可能找不到极值。如找不到极值,将停止运行并提供解释。 寻找极大值点,重定义函数为-f(x)即可。 2019/2/17
2、求零点 函数fzero可以寻找一维函数的过零点。 应用:使用bode图判断控制系统稳定性,要看幅频特性过零点和相频特性过1800点。 fzero函数也可以寻找函数值等于常值点,只要重新定于函数为f(x)-c即可 2019/2/17
3、积分 有限区域内积分函数:trapz、quad和quad8。 函数trapz通过计算梯形面积的和近似函数的积分,函数的分割是人为地。 quad使用Simpson递归方法,quad8使用Newton-costes递归方法进行数值积分。为了获得更精确的结果,它们在所需的区间都计算被积函数。quad8比quad更精确。 2019/2/17
4、微分 微分描述了函数在一点处的斜率,是函数的微观性质,它对函数的微小变化十分敏感,函数的很小的变化,容易产生相邻点斜率的巨大变化。 尽量避免使用数值微分,尤其是试验数据的微分。如果迫切需要,最好先将试验数据进行最小二乘拟合伙这三次样条拟合,然后对拟合函数进行微分。 2019/2/17
5、FFT变换 FFT即快速傅立叶变换,是数据分析的基本方法,是x由基2的快速变换算法来计算。如x长度不是精确的2次幂则后面使用0填充,ifft(x)是向量x的离散傅立叶变换的逆变换。 在频率轴上绘制FFT曲线,要明确FFT结果与实际频率点的关系。设n个数据点,采样频率为fs,则Nyquist频率或n=N/2+1点与实际频率的关系:f=(num-1)*fs/n 2019/2/17
FFT 需要注意的是fft结果为复数矩阵,为了得到幅频特性,可使用abs函数,使用atan2得到相角,由于有的系统的相角可能大于1800,而相角函数值域在-1800~1800之间,需要使用unwrap函数展开折叠的相角,从而得到相频特性。 2019/2/17
6 微分方程数值解 常微分方程数值解用逐步积分方法实现,Runge-Kutta法是应用最多的微分方程数值解的方法。两种Runge-Kutta法函数: [t,x]=ode23(‘xfun’,t0,tf,x0,tol,trace) [t,x]=ode45(‘xfun’, ,t0,tf,x0,tol,trace) 这两种方法格式相同。其中xfun为定义的常微分方程函数名,该函数必须以为输出,以t、x为输入。 2019/2/17
微分方程 输入变量t0、tf为积分的启始和中止时间,单位是秒。x0为初始的状态向量。tol控制结果的精度,可以缺省。一般来说,ode45比ode23运算速度快一些。 Var der Pol微分方程 重新定义变量,令 x1=x x2=dx/dt 则 dx1/dt=x2 dx2/dt=u(1-x12)x2-x1 2019/2/17
应用举例 一、特性拟合 title(‘string’) ^上标 _下标 二、模型辨识的阶数确定 三、数值积分:已知加速度求速度, 2019/2/17