收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

MATLAB应用——数据分析与统计

[复制链接]
. X# K, J0 I$ k: F7 u
+ B5 t8 q. ^! b8 I, }# @+ s) x! G

数学建模是用数学方法解决各种实际问题的桥梁,它已经渗透到各个领域,而且发挥出越来越重要的作用。面对自然科学和工程应用中的难题,大部分人无从入手,而个别人却能短时间内给出切实可行的解决方案,其差别往往在于驾驭数学知识的能力不同。现代计算机技术的应用不仅减少了计算错误,而且加强了数学应用者解决问题的能力。MATLAB是一款常用的数据处理软件,为了更好的应用MATLAB软件,我将整理好的MATLAB函数分享到今日头条上,以利己利人查阅。

7 Q9 \! w! k. b

MATLAB提供的很多数据分析与统计函数都是面向列的,即矩阵中的每一列代表一个变量的多个观测值,其列数对应于变量数,行数对应于测量点数。

3 w8 r4 `6 T( ` n$ M

max和min函数可求出数据的最大值和最小值,mean和std函数可求出数据的均值和标准差,sum和prod函数可求出数据元素和与数据元素积。例如,对MATLAB内含的某城市24小时的车流量数据count.dat可作分析:

/ F0 q- Q. S& ]6 ^7 s+ o" f

load count.dat

+ @) l/ \- J( g4 K3 ~2 R

mx=max(count)

; r9 L1 M- J( x9 k# b3 m H

mx = 114 145 257

' f2 R9 V' O* a: _$ p

mu=mean(count)

: `6 T$ T" e5 @* x

mu = 32.0000 46.5417 65.5833

$ z( n- x. N- D3 C, j: d

sigma=std(count)

9 [: @1 ]4 @( ?, U* F2 o

sigma = 25.3703 41.4057 68.0281

# G( R7 ?9 S% v

对有些函数还可给出位置,例如,在求出最小值的同时,可得到最小值所在的位置(行号):

; |* T! i) F1 S4 H- @

[mx,indx]=min(count)

$ { r# @5 o2 ^$ C

mx = 7 9 7

1 @' a/ Y5 {+ y) r4 J. x+ \( s( i3 T

indx = 2 23 24

! \, x9 L( H) [' l' \

1、协方差和相关系数

o" B& W. S: l% F$ n2 i* R$ T* K

cov函数可以求出单个变量的协方差,而corrcoef函数可求出两个变量之间的相关系数,例如:

, Z( X) ~1 Q$ H- ~7 I

cv=cov(count)

! e: K j N) ^, s2 \- W9 T

cv = 1.0e+003 *

+ O9 R8 j7 ^5 h9 \6 ?

0.6437 0.9802 1.6567

. _' O7 N Z5 P) D1 a' H% k

0.9802 1.7144 2.6908

7 Z+ g- M6 n2 z# S# f' o8 e0 o

1.6567 2.6908 4.6278

& D: k+ D4 {$ r

cr=corrcoef(count)

! n2 e, w: ]7 t4 t

cr =

7 @( N* o5 L6 |! y. a: C! T0 n

1.0000 0.9331 0.9599

. g+ X+ } r0 W+ v o8 G% Q3 M

0.9331 1.0000 0.9553

z3 ?. Y6 b% B8 w8 @1 A: D

0.9599 0.9553 1.0000

% Y) H2 ~4 h" i$ b# E4 t$ H

2、数据预处理

- E9 [% v& p+ R, C( D

在MATLAB中遇到超出范围的数据时均用NaN (非数值) 表示,而且在任何运算中,只要包含NaN,就将它传递到结果中,因此在对数据进行分析前,应对数据中出现的NaN作剔除处理。例如:

/ P6 P7 x. x/ Q1 m n

a=[1 2 3;5 NaN 8;7 4 2];

8 A* M: s$ I- g; J2 {% z

sum(a)

# N( K) {# @9 A2 S. }

ans = 13 NaN 13

+ z9 A b8 q! ^( w; l( v0 Q

在矢量x中删除NaN元素,可有下列四种方法:

" c( M2 M! S5 \2 X" Y4 s& _

(1)  i=find(~isnan(x));x=x(i)。

1 r" X, L" l5 Q4 m. y

(2)  x=x(find(~isnan(x)))。

1 L# z% L& O J- q* j

(3)  x=x(~isnan(x))。

9 k* D/ N0 E3 z& X q# }

(4)  x(isnan(x))=[ ]。

2 c2 {; k1 T& [4 z, S

在矩阵X中删除NaN所在的行,可输入

+ W& v$ x( Z$ {

X(any(isnan(X)),:)=[ ];

6 p0 T# @, l% L2 j4 [

经过这种预处理后的数据,可进行各种分析和统计操作。

# G9 N& Q7 i2 a& S" R* j' I+ I4 T

3、回归和曲线拟合

5 v0 l4 `* C3 E6 P* X- R! Z% K+ H

对给定的数据进行拟合,可采用多项式回归,也可采用其它信号形式的回归,其基本原理是最小二乘法,这一功能实现在MATLAB中显得轻而易举。

2 P; R3 |- b1 M! b8 Z

例1:设通过测量得到一组时间t与变量y的数据:

6 Y) x, Y3 w* L ]' O- O

t=[0 .3 .8 1.1 1.6 2.3];

6 L# t( T" W- ^6 N; D

y=[0.5 0.82 1.14 1.25 1.35 1.40];

/ G5 a8 R- k5 t2 Q
/ S$ | J$ ~+ R: m" S

进行回归,可得到两种不同的结果。MATLAB程序如下:

; i( j* c6 V* J ~, k. J

t=[0 .3 .8 1.1 1.6 2.3];

7 S$ H [6 u! j% q

y=[.5 .82 1.14 1.25 1.35 1.40];

+ {" l' M: _* g( X* G

X1=[ones(size(t)) t t.^2];

" j5 K: \* |7 X- E

a=X1\y;

9 a1 y6 }2 ~3 K% F

X2=[ones(size(t)) exp(–t) t.*exp(–t)];

$ f) ]/ z) e: s) C

b=X2\y;

6 Q+ p( k8 A/ ]1 ^! a4 i

T=[0:.1:2.5];

* u2 E" @/ z G% b; ^: E5 T

Y1=[ones(size(T)) T T.^2]*a;

4 k) s* k7 c* ~; k4 t* v

Y2=[ones(size(T)) exp(-T) T.*exp(-T)]*b;

; w2 [$ b: |; I7 c- i; l

figure(1)

0 ]& B( n$ P: ^/ d) w: h

subplot(1,2,1)

# z7 `$ D. a3 C+ `- Q

plot(T,Y1,-,t,y,o),grid on

: Q( y* F3 v- N% L& Y9 w6 X. h

title(多项式回归)

u8 p6 b7 `. L1 b. A0 i* Q; D

subplot(1,2,2)

$ P& H, n! j' a; w

plot(T,Y2,-,t,y,o),grid on

! `+ u1 n) h" g& |3 E7 @4 U* U0 v2 L

title(指数函数回归)

6 d5 ]2 ` z& B+ m* a& u- c
5 P& B0 o- Q) ?0 x

例2 已知变量y与x1,x2有关,测得一组数据为

5 [0 V$ L E; K

  x1=[.2 .5 .6 .8 1.0 1.1 ];

+ \5 f8 _2 t, x% w7 _

  x2=[.1 .3 .4 .9 1.1 1.4 ];

K7 ~) w( }1 N

  y=[.17 .26 .28 .23 .27 .24];

$ f1 \( A6 |: d& I- E4 R2 ^' V

采用来拟合,则有

% N% c3 Y8 k; E5 p: Y- a

x1=[.2 .5 .6 .8 1.0 1.1];

/ j5 z- t. W/ U8 z, f* m) [

x2=[.1 .3 .4 .9 1.1 1.4];

% k% C- ^$ ^1 c8 g

y=[.17 .26 .28 .23 .27 .24];

( ~. ~6 b1 @! l

X=[ones(size(x1)) x1 x2];

) \: [/ W& e! n' G) [- T4 \, b( R

a=X\y

7 r4 \8 A- I e4 z0 A% i

a = 0.1018 0.4844 −0.2847

4 ]+ d2 E0 @* e& ?) \, c/ }2 X3 n

因此数据的拟合模型为

t% R/ B/ |0 _/ _" Y8 q

y=0.1018+0.4844x1−0.2487x2

$ H, m' W3 r8 U7 {% j; G- q2 P4 a; U

4、傅里叶分析与FFT

, r7 ^7 n; |4 |9 ~8 f; t$ Q

利用MATLAB提供的FFT函数可方便地计算出信号的傅里叶变换,从而在频域上对信号进行分析。

7 R3 r7 e" C; N8 m8 r

例1 :混合频率信号成分分析。有一信号x由三种不同频率的正弦信号混合而成,通过得到信号的DFT,确定出信号的频率及其强度关系,程序如下:

5 R6 H& t/ M4 E

t=0:1/119:1;

: Q1 i! a2 @' C6 Q# A/ s

x=5*sin(2*pi*20*t)+3*sin(2*pi*30*t)+sin(2*pi*45*t);

$ g) R6 l, O( w" r; t. r

y=fft(x);

r5 {$ R7 G0 h$ p O

m=abs(y);

' R' Y2 w; e$ Z

f=(0:length(y) -1)*119/length(y);

' ^; C8 R! U- B: u5 h

figure(1)

/ ~: O0 e- E8 ]

subplot(2,1,1),plot(t,x),grid on

3 p* W9 M, O' G2 L9 f. X/ K) @

title(多频率混合信号)

' b x) @( b D; S3 O

ylabel(Input \itx),xlabel(Time )

5 b& [5 y0 H& `) m

subplot(2,1,2),plot(f,m)

( e& H: X* J, o# J6 Y }

ylabel(Abs. Magnitude),grid on

& c" ~* Y- a* K6 v" N. w# d

xlabel(Frequency (Hertz))

; m$ a1 ^3 h' D ]1 v0 t
6 j8 K7 |# O( t* E) z& n1 E

例2 :信号在传输过程中,由于受信道或环境影响,在接收端得到的是噪声环境下的信号。我们利用FFT函数对这一信号进行傅里叶分析,从而确定信号的频率,程序如下:

+ q7 o0 ^3 d' k" M L! F

t=0:1/199:1;

; T* Z, ]6 b+ E

x=sin(2*pi*50*t)+1.2*randn(size(t)); %噪声中的信号

" {& j+ [; J2 T% F$ y0 q$ h

y=fft(x);

' e7 d" H1 X9 Z6 ~& Q7 \" c

m=abs(y);

# a7 x7 H U1 Z) q, Y. `

f=(0:length(y) -1)*199/length(y);

3 Z- r& ^) P( G7 Y+ e ^' w

figure(1)

: B0 ]; A& \0 P0 @2 r. b% }

subplot(2,1,1),plot(t,x),grid on

* `) t0 T1 ?( M) Y: z9 S# P+ Y

title(信号检测)

- d1 U2 }, e0 Q* j3 e9 A

ylabel(Input \itx),xlabel(Time )

4 Q7 v! s' T$ u( r# p' U& W1 ] Q

subplot(2,1,2),plot(f,m)

1 l* f9 X0 k: ?- H' z# b! K

ylabel(Abs. Magnitude),grid on

4 }3 o3 f* ^' _, c$ c* O

xlabel(Frequency (Hertz))

- K- t. k" @' u- y4 }+ Z
& e' N( @, Y) P- i: {: E F

例3 :天文学家记录了300年来太阳黑子的活动情况,我们对这组数据进行傅里叶分析,从而得出太阳黑子的活动周期。MATLAB程序如下:

Z5 [0 o. ] S E9 e" ^' x

load sunspot.dat

- P9 x. Q! D/ q

year=sunspot(:,1);

/ u, J) \( M% ]8 C- m6 N, {8 [* c

wolfer=sunspot(:,2);

8 t3 \8 ~) C; E

figure(1)

6 K% r0 A w: e6 q. p1 {. z. x

subplot(2,1,1)

$ I4 \- V+ z# [) L

plot(year,wolfer)

. h* i5 F# ]5 q. ?5 ?

title(原始数据)

8 u8 v' k9 W8 ~* _0 l, l4 B

Y=fft(wolfer);

6 u1 H8 [ m" A. T3 Z. i5 q

N=length(Y);

8 Y s$ n1 N+ d J+ D

Y(1)=[];

) r- K* x1 v3 \1 v

power=abs(Y(1:N/2)).^2;

7 I9 a, J- q k5 P X. v ~

nyquist=1/2;

1 H' x4 I. G) r9 Y3 O' M

freq=(1:N/2)/(N/2)*nyquist;

' X( V7 [" t; E, @. t9 p

period=1./freq;

) r4 e* m' g4 G* h

subplot(2,1,2)

% g- v6 s- g4 b7 k8 P( ~

plot(period,power)

/ U4 `$ u" u5 ^ t# H* D

title(功率谱), grid on

+ d# k0 A2 @5 D5 H

axis([0 40 0 2e7])

( [* w$ _" A5 X7 y
) M1 [/ R5 k. O$ h0 U+ g9 ~/ ` r

各位读者朋友,感谢您的阅读,您若对工程应用中的数学问题感兴趣,欢迎关注我,愿我们一起讨论和成长!!!

3 O( Q6 ?4 `) Q2 ^$ \ ) ?1 M' k2 U; q$ n$ @ F% L: E* U. z, e, ] + H; P. c) X8 ^ 2 e( \1 _+ Q' o7 t* P$ U. Q, `8 p
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
魏辉兵
活跃在昨天 17:02
快速回复 返回顶部 返回列表