通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 机械电子 >> MATLAB >> Matlab基础 >> 文章正文

matlab数据分析
责任编辑:admin   更新日期:2005-8-6

由于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)

图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

 
  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程