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)。