网站首页  |  幼儿教育  |  中小学教育  |  电脑教育  |  英语教育  |  教育论文  |  家长教育 设为首页加入收藏联系投稿 
 位置: 中国教育学习网 > 电脑教育 > 机械电子 > MATLAB > 正文

matlab数据分析

字号:   

由于MATLAB面向矩阵,所以它很容易对数据集合进行统计分析。按规定,数据集存储在面向列的矩阵里。也就是,一个矩阵的每一列代表不同的被测变量,每一行代表各个样本或观察值。例如,让我们假定,一个月31天的三城市每日高温(单位为0C)被记录,并赋给脚本M文件中的变量temps,在精通MATLAB工具箱里取名为mmtemp.m。运行M文件,把变量temps放在MATLAB工作空间里。这样,变量temps包含:

» temps

temps =

12818

15922

12519

14823

12622

119 19

15915

81020

19718

12718

141019

11817

9723

8819

15818

8920

10717

12722

9819

12821

12820

10917

131218

91020

10622

14721

12522

13718

151023

131124

121222

每一行包含了给定一天的高温;每一列包含不同城市的高温。为了使数据可视,把它绘图:

» d=1:31;%number the days of the month

» plot(d, temps)

» xlabel(' Day of Month '),ylabel(' Celsius ')

» title(' Daily High Temperatures in Three Cities ')

(见图9.1)

matlab数据分析

图9.1三个城市的每日高温

上面的plot命令也说明了plot命令用法的另一种形式。变量d是一个长度为31的向量,而temps是一个31×3矩阵。给定这些数据,plot命令绘出了temps对每一列d的曲线。绘图在第7和8章进一步讨论。

为了说明MATLAB数据分析的一些功能,根据上面温度数据考虑以下命令。

» avg_temp=mean(temps)

avg_temp =

11.96778.225819.8710

表明第三个城市有最高平均温度。这里MATLAB分别地找出了各列的平均值。

» avg_avg=mean(avg_temp)

avg_avg =

13.3548

找出了三个城市的总平均温度。当输入到数据分析函数是行或列向量时,MATLAB仅对向量执行运算,返回一个标量。

考虑从各城市的均值求每日偏差的问题。即必须从tempsi列中减去avg_temp(i)。我们不能仅仅用以下的语句

» temps-avg_temp

??? Error using ==> -

Matrix dimensions must agree.

因为这个操作不是一个已定义的数组操作(temps是31×3和avg_temp是1×3)。或许最直接的方法是使用For循环。

for i=1:3

tdev( : , i)=temps( : , i)-avg_temp(i) ;

end

» tdev

tdev =

0.0323-0.2258-1.8710

3.03230.77422.1290

0.0323-3.2258-0.8710

2.0323-0.22583.1290

0.0323-2.22582.1290

-0.96770.7742-0.8710

3.03230.7742-4.8710

-3.96771.77420.1290

7.0323-1.2258-1.8710

0.0323-1.2258-1.8710

2.03231.7742-0.8710

-0.9677-0.2258-2.8710

-2.9677-1.22583.1290

-3.9677-0.2258-0.8710

3.0323-0.2258-1.8710

-3.96770.77420.1290

-1.9677-1.2258-2.8710

0.0323-1.22582.1290

-2.9677-0.2258-0.8710

0.0323-0.22581.1290

0.0323-0.22580.1290

-1.96770.7742-2.8710

1.03233.7742-1.8710

-2.96771.77420.1290

-1.9677-2.22582.1290

2.0323-1.22581.1290

0.0323-3.22582.1290

1.0323-1.2258-1.8710

3.03231.77423.1290

1.03232.77424.1290

0.03233.77422.1290

虽然使用上面的方法有效,但比使用MATLAB的数组操作功能要慢。复制avg_temp,使得它与temps有同样的大小,然后再做减法,这样就快得多。

» tdev=temps-avg_temp(ones(31,1),:)

tdev =

0.0323-0.2258-1.8710

3.03230.77422.1290

0.0323-3.2258-0.8710

2.0323-0.22583.1290

0.0323-2.22582.1290

-0.96770.7742-0.8710

3.03230.7742-4.8710

-3.96771.77420.1290

7.0323-1.2258-1.8710

0.0323-1.2258-1.8710

2.03231.7742-0.8710

-0.9677-0.2258-2.8710

-2.9677-1.22583.1290

-3.9677-0.2258-0.8710

3.0323-0.2258-1.8710

-3.96770.77420.1290

-1.9677-1.2258-2.8710

0.0323-1.22582.1290

-2.9677-0.2258-0.8710

0.0323-0.22581.1290

0.0323-0.22580.1290

-1.96770.7742-2.8710

1.03233.7742-1.8710

-2.96771.77420.1290

-1.9677-2.22582.1290

2.0323-1.22581.1290

0.0323-3.22582.1290

1.0323-1.2258-1.8710

3.03231.77423.1290

1.03232.77424.1290

0.03233.77422.1290

这里avg_temp(ones(31, 1),:)复制avg_temp的第一行(且仅)31次,创建了一个31×3的矩阵,其第i列是avg_temp(i)

» max_temp=max(temps)

max_temp =

191224

找出了每个城市一个月的最高温度。

» [max_temp, x]=max(temps)

max_temp =

191224

x =

92330

找出了每个城市的最高温度和出现最高温度的行下标x。对于这个例子,当发生最高温度时,x辨认了月中的日期。

» min_temp=min(temps)

min_temp =

8515

找出了各城市一个月的最低温度。

» [min_temp, n]=min(temps)

min_temp =

8515

n =

837

找出了每个城市的最低温度和出现最低温度时行下标n。对于这个例子,当发生最低温度时,n辨认月中的日期。

» s_dev=std(temps)

s_dev =

2.50981.76462.2322

找出temps的标准偏差。

» daily_change=diff(temps)

daily_change =

314

-3-4-3

234

-2-2-1

-13-3

40-4

-715

11-3-2

-700

231

-3-2-2

-2-16

-11-4

70-1

-712

2-2-3

205

-31-3

302

00-1

-21-3

331

-4-22

1-42

41-1

-2-21

12-4

235

-211

-11-2

计算每日高温之间的偏差,它描述了逐天日高温的变化有多大。例如,daily_change的第一行是每月的第一天和第二天之间的日温度变化量。

9.1数据分析函数

在MATLAB里的数据分析是按面向列矩阵而进行的。不同的变量存储在各列中,而每行表示每个变量的不同观察。MATLAB统计函数包括

表9.1

数据分析函数

corrcoef(x)

求相关系数

cov(x)

协方差矩阵

cplxpair(x)

把向量分类为复共轭对

cross(x, y)

向量的向量积

cumprod(x)

列累计积

cumsum(x)

列累计和

del2(A)

五点离散拉氏算子

diff(x)

计算元素之间差

dot(x, y)

向量的点积

gradient(Z, dx, dy)

近似梯度

histogram(x)

直方图和棒图

max(x),max(x, y)

最大分量

mean(x)

均值或列的平均值

median(x)

列的中值

min(x),min(x, y)

最小分量

prod(x)

列元素的积

rand(x)

均匀分布随机数

randn(x)

正态分布随机数

sort(x)

按升序排列

std(x)

列的标准偏差

subspace(A, B)

两个子空间之间的夹角

sum(x)

各列的元素和

9.2 M文件举例

在这一章里,说明在精通MATLAB工具箱里的两个函数。这些函数说明了本章所示的minmax函数的变种和如何编写一个M文件。关于M文件的更多信息,参阅第8章。

在讨论M文件函数mminmmax的内部结构之前,考虑他们有什么功能。

» amn_temp=mmin(temps)

amn_temp =

5

» [m , i]=mmin(temps)

m =

5

i =

32

» amx_temp=mmax(temps)

amx_temp =

24

» [m , j]=mmax(temps)

m =

24

j =

303

具有一个输出参量的函数mmin找出矩阵中的单个最小值。用第二个输出参量,返回单个最小值的行和列的下标。除了mmax返回矩阵中的单个最大值外,函数mmax的工作方式与mmin相同。这些M文件的函数是:

function [m , i]=mmin(a)

%MMIN Matrix minimum value.

%MMIN(A) returns the minimum value in the matrix A

%[M,I] = MMIN(A) in addition returns the indices of

%the minimum value in I = [row col].

%Copyright (c) 1996 by Prentice Hall,Inc.

if nargout==2, % return indices

[m , i]=min(a) ;

[m , ic]=min(m) ;

i=[i(ic)ic] ;

else,

m=min(min(a));

end

function [m , i]=mmax(a)

%MMAX Matrix maximum value.

%MMAX(A) returns the maximum value in the matrix A

%[M,I] = MMAX(A) in addition returns the indices of

%the maximum value in I = [row col].

%Copyright (c) 1996 by Prentice Hall,Inc.

if nargout==2,%return indices

[m , i]=max(a) ;

[m , ic]=max(m) ;

i=[i(ic)ic] ;

else,

m=max(max(a)) ;

          end

收藏此文  |  打印  

 
  • 上一篇教程:

  • 下一篇教程:

  •   GoogLe
     
      最新推荐
  • 此栏目下没有推荐教程

  •   最近更新

      GoogLe

     
    Powered by Cn-Education.Com (c) 2005-2008 中国教育学习网 教育网站长QQ交流群60041790
    设为首页  |  加入收藏  |  版权申明  |  广告服务  |  联系我们  |  友情链接  |  网站地图  |  返回顶部 ↑