Matlab中的数据处理

  • 格式:doc
  • 大小:190.00 KB
  • 文档页数:15

Matlab中的数据处理

Matlab中的各种工具箱最主要是以矩阵或数组作为处理对象,因此首先必须将原始数据以矩阵形式加载到Matlab的工作空间,然后对矩阵进行相关操作。

第一部分 数据输入

在Matlab中创建一个矩阵可以有如下几种途径:

一、在Matlab命令窗口直接输入矩阵

例如:

>> A=[1 3 0;2 4 3;-3 4 9]

说明:矩阵或数组的标识符都是[ ],矩阵同一行之间的元素用空格或逗号分隔,不同行之间用分号或回车符分隔。

二、利用workspace(工作空间)创建或修改矩阵

在工作空间中新建一个空矩阵,然后双击该矩阵名,可以像Office中的Excel电子表格一样进行输入和编辑数据,也可以双击已经存在于工作空间中的变量名,对其进行修改编辑。

例如:>> B=[];

三、采用复制、粘贴的方式构造矩阵

对于存在于外部文件中的比较规范的数据(排列成矩阵形式),可以先将数据块复制到剪贴板上,然后在Matlab中粘贴到相应变量。举例:1、将data01.xls中的数据粘贴到Matlab工作空间中的变量C中。

2、将data02.txt中的数据输入到Matlab工作空间中的变量D中。 四、使用输入函数

对于大量的数据,或者格式更加复杂的数据文件,以上方法就不太方便,此时针对不同格式的数据文件,可以采用相应的输入函数导入数据。

1、load函数

装载Matlab格式的数据文件(.mat)和文本格式的定界符为空格的矩形文件。

例:载入文件“data02.txt”中的数据

2、dlmread函数

将带有定界字符的ASCII数字数据读入矩阵

常用格式:

M=dlmread(‘filename’) %Matlab 从文件格式中推断定界符,逗号是默认定界符。

M=dlmread(‘filename’,delimiter),指定定界符。

M=dlmread(‘filename’,delimiter,R,C),从矩形数据的左上角R行、C列的位置开始读入。

注意:矩形数据的开始位置是0行0列。

M=dlmread(‘filename’,delimiter,range),读取用range指定范围的数据,range=[R1 C1 R2 C2],R1C1是左上角的行列号,R2C2是右下角的行列号;range也可以用如下表示法:range=’A1..B7’。

例:对于data02.txt中的数据

>> dlmread('d:\data\data02.txt') %读全部数据 >> dlmread('d:\data\data02.txt','',2,3) %读取3行4列以后的数据,两个没有间隔的单引号表示用空格(不限定重复次数)作为定界符。

>> dlmread('d:\data\data02.txt','','c1..g4') %读取C1..G4范围内的数据

>> dlmread('d:\data\data01.txt','-') %其他定界符

3、textread函数

输入含有字母和数字的混合数据

常用格式:

[A,B,C,...] = textread('filename','format') %按format 指定的格式读取filename文件中的全部内容

[A,B,C,...] = textread('filename','format',N) %只重复N次format 格式

按照format 对应的格式,分别输出数据到变量A、B、C„。

Format可包含的参数:

格式 作用 输出

%d 带符号整数 双精度数组

%u 无符号整数 双精度数组

%f 浮点值 双精度数组

%s 用空格或分隔符分隔的字符串 字符串数组

%q 读取双引号中的字符串,忽略双引号 字符串数组

%c 读取字符,包括空格 字符串数组

例:有数据文本文件“data04.txt”,读取其中的内容 >> [names, types, x, y,z, answer] =

textread('d:/data/data04.txt','%s%s%f%d%f%s')

对于只包含纯数字数据的文本文件,textread函数当然也能读取。

>> A = textread('d:/data/data02.txt')

与textread函数类似的函数还有textscan,但功能更丰富,使用更灵活,可参考相关帮助。

4、xlsread函数

从Excel电子表格读取矩阵数据

常用格式:

num = xlsread(filename) %读取filename文件中的数据,忽略标题行或列的文本,而当不在标题行或列的单元格是空的,或者包含文本时,xlsread将在相应位置填上NaN;

num = xlsread(filename, -1) %将在Excel窗口打开filename文件,可以交互选择工作区中的数据文件;

num = xlsread(filename, sheet) %选择工作表sheet,默认为第一个工作表;

num = xlsread(filename, range) %指定工作表中的数据范围,如’A4:B5’

num = xlsread(filename, sheet, range)

例:将电子表格data01.xls中的数据载入到Matlab工作区

>> xlsread('d:\data\data01') >> xlsread('d:\data\data01',-1)

>> xlsread('d:\data\data01','B3:E30')

5、使用输入向导

输入向导(Import Wizard)是把数据输入到Matlab最简单的方法。无须知道被输入数据的格式,只需指定数据文件,向导会自动处理。

从菜单“File→Import Data”打开Import Data 窗口,或者在命令窗口中输入

>> uiimport

也可以打开数据输入向导。

第二部分 数据拟合

在实际工程应用和科学实践中,经常需要寻求两个(或多个)变量间的关系,而实际却只能测得一些分散的数据点。针对这些分散的数据点,运用某种拟合方法生成一条连续的曲线,这个过程成为曲线拟合。曲线拟合可分为参数拟合和非参数拟合。参数拟合采用最小二乘法,非参数拟合也称插值法。

1、多项式拟合

p=polyfit(x,y,n) 用n次多项式拟合向量数据(x,y)。

例:拟合下列数据

x 0.1 0.2 0.15 0.0 -0.2 0.3

y 0.95 0.84 0.86 1.06 1.50 0.72

>> 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)是已知实验数据。

例:已知数据表

t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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

用适当的曲线进行数据拟合。

先画散点图,根据散点图确定拟合曲线为对数函数lnbtya

>> 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) 也可以经过适当的变量替换,将其他函数转化为多项式拟合。如

指数函数bxyae,取对数:lnlnyabx,令lnyY,则YAbx

3、拟合工具箱

Matlab中的拟合工具箱是一个更方便、更直观进行曲线拟合的图形界面,用cftool指令打开拟合工具箱。

界面中主要有5个按钮:

○“Data”按钮:可输出、察看和平滑数据;

○“Fitting”按钮:拟合数据、比较拟合曲线和数据集

○“Exclude”按钮:可从拟合数据中排除特殊的数据点;

○“Ploting”按钮:显示拟合曲线和数据集;

○“Analysis”按钮:可以做内插法、外推法、微分或积分拟合。

拟合效果主要看2个参数:SSE(误差平方和)和R-Square ,SSE越接近0,R-Square越接近1,拟合效果越好。

例:调用Matlab中自带的数据文件census,记录了美国1790-1990年间的人口,时间间隔为10年,找出人口与时间之间的关系。

>> load census

>> cftool

三、多元线性回归

问题:设有因变量y 和p个自变量12,,pxxx,它们具有某种线性关系 1122ppyxxx

其中12,,p为待定系数,为随机误差。现有容量为n观测数据,,1,2,,1,2,iijyxinjp,怎样确定待定系数12,,p,并进行有效性检验?

将样本代入关系式,得YX,其中

1111211221222212,,pppnnnppyxxxyxxxYXyxxx

Matlab求解:

[b,bint,r,rint,stats]=regress(Y,X,alpha)

其中alpha为显著性水平,省略时为默认值0.05;输出变量中,b为的参数估计值,bint为b的置信度为1-alpha的置信区间,r为残差向量YX,也即,rint为的置信区间,stats是包含3个元素的检验统计量,分别是R-square:相关系数R的平方,F-统计量和p值。

回归效果:R-Square越接近1,p值越接近0(一般要求p<0.05)。