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

[复制链接]
+ q" v2 U; b6 _4 o6 s# h
( w- t+ B4 R- X- e0 F

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

, W! a) F1 V* R% `

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

! s2 K! L5 P: |

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

5 k7 l3 x9 K' h; g0 T

load count.dat

$ r, l% R6 X& U( |0 d( r

mx=max(count)

# z- y% V% c+ t! e

mx = 114 145 257

( N4 @" z; K3 B4 ?9 c& o! d$ V: P: A

mu=mean(count)

- i% ]3 }4 N, Z4 `% m2 Y, w+ ]& C

mu = 32.0000 46.5417 65.5833

/ t0 H1 h: N9 x

sigma=std(count)

" @( F8 R5 \( W

sigma = 25.3703 41.4057 68.0281

3 Z" O& k! S2 {% `' _5 c

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

; q3 o1 L- V2 c

[mx,indx]=min(count)

, L" ?) x. }# o/ t* h

mx = 7 9 7

" s" t2 U# D& I% W

indx = 2 23 24

5 ?0 A1 {& b0 \: J8 H* u7 ]7 d

1、协方差和相关系数

# r( g* o' ~8 h9 b4 f# r6 O$ v

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

7 p5 k" s2 M& q) o g- v4 r; X7 j5 S

cv=cov(count)

; |4 h* A( a3 b& R7 ~! E$ L6 } m) [

cv = 1.0e+003 *

4 |- C% G$ C4 _( m5 b% L ?

0.6437 0.9802 1.6567

# S P$ q: f! _1 F6 k, d

0.9802 1.7144 2.6908

! Y0 M5 r, ]* [/ d

1.6567 2.6908 4.6278

) h* s. Y2 S: g( t/ W

cr=corrcoef(count)

: t$ |) X C+ D

cr =

1 G3 c: v# k. i) t6 f

1.0000 0.9331 0.9599

# p1 V/ U- B4 Y4 i6 d

0.9331 1.0000 0.9553

0 V/ t; o* M+ b

0.9599 0.9553 1.0000

2 T: B% g4 c& S' B

2、数据预处理

7 ^: |6 x' `6 I4 c/ q6 ]# b; u

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

; L) l; Y6 t. E& L: a3 o1 F# q

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

$ v M3 \ G& h+ [7 [9 R" L: @! l

sum(a)

1 U# m/ b) R- R) \( u

ans = 13 NaN 13

2 A0 ]2 B' V! _. @

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

+ W5 a+ D8 G( F: w

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

# [+ {7 B$ b+ [6 j0 k, U; j. Q

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

3 i: @, s- s+ v; K( i: t: S- x

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

% D1 z8 ?5 w; n, V) b

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

5 b5 y6 i) ]0 _. u: U

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

9 W, |6 ~1 `7 a: J% Q$ k4 ^

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

, Z9 X7 z u N0 r( i$ [

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

8 v+ m" R! C8 W% R" ?

3、回归和曲线拟合

# \' a* k( ^/ U2 b

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

5 W$ h6 @9 [, i3 w9 h

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

) w" o1 z/ u3 c3 r/ y' |5 c! M

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

& U, T F: s, n- B

y=[0.5 0.82 1.14 1.25 1.35 1.40];

/ t' a- J+ O; G2 {8 ?3 L3 n
) U$ f7 [: h6 H5 J/ O% v& v

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

: i3 s W; X+ T; N5 b

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

. m" Y) T6 t/ u

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

/ o2 ~5 ?+ \& Z+ V, {4 j5 b" f+ {

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

+ \: V$ w* b6 `

a=X1\y;

/ q9 Y, [8 y6 W8 m

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

# e/ V) X0 c% Z7 }4 O

b=X2\y;

" D' w% m" m7 K% R9 N) V1 k- y. d

T=[0:.1:2.5];

: \0 Q( X/ Y% V5 x2 u7 z, U* l+ V3 V

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

" x$ Y* {5 v. ~* x. r, V+ Q

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

+ Y, d8 q2 E5 e8 J( B

figure(1)

' C4 W+ E- n& D* V

subplot(1,2,1)

# P! g$ c0 W5 t, \" k7 K0 w' u0 K

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

; U4 G) D4 \- p s1 |

title(多项式回归)

; d. ?$ F: }7 o, L# i

subplot(1,2,2)

6 k( B2 w7 \1 m

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

2 C( ~) B. X- b1 p( W4 g: T

title(指数函数回归)

+ L# h+ x+ n$ I. R6 @$ {
. w3 t' X" q% t

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

! {) U. J7 H7 p/ _1 u

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

* R0 H# I8 N/ \7 K$ l; `- _

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

' o& `# n2 W2 b- b! T

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

+ b" S. s, D$ W, I8 g7 Z

采用来拟合,则有

1 Q$ D; U6 p0 g" d0 H# T( m! c4 b1 |2 [

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

$ L1 B0 t7 O* t f: g

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

" V3 G2 u+ R: K0 [

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

! l+ r6 o' ^+ o; s/ D

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

9 n) y; C% C7 g

a=X\y

3 k& w% L' [- o8 g( v" b

a = 0.1018 0.4844 −0.2847

8 F$ P1 _. K9 {$ m: v' W

因此数据的拟合模型为

0 M7 H0 V- R: x( k2 S

y=0.1018+0.4844x1−0.2487x2

# e8 P5 s1 f+ P6 A

4、傅里叶分析与FFT

' y9 o G! F1 G" j& _( l% W

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

4 G F1 F0 {: r+ x) Z$ m

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

$ z% S y/ H8 o# [& F

t=0:1/119:1;

7 A+ p o% e m5 ~

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

" W6 T# G6 J% p( R. H

y=fft(x);

0 Z, I- A+ r4 J) J7 ~

m=abs(y);

: N* A% r& R3 Y2 s7 U* E# Z

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

; d. i. Z3 z0 P

figure(1)

! K9 T& c5 p/ ~3 l

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

* d' t/ ~) z0 J- f

title(多频率混合信号)

% L& N+ \/ H, q

ylabel(Input \itx),xlabel(Time )

0 n- Y& g. ]$ \! c9 r# f. m

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

$ H# b, k7 Y F5 \/ d& @

ylabel(Abs. Magnitude),grid on

* J- K& x% e' {2 `- W" T( Y+ L9 d

xlabel(Frequency (Hertz))

7 Y: d" i# W+ m# e, c: j
' P; C' N5 R3 O% h: Z6 l

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

! v k/ q) Z$ q& }( D" G+ z

t=0:1/199:1;

- D/ S( r6 {3 K% C& U" _

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

$ g( p& H; L& E' { E3 {3 m* r

y=fft(x);

0 H: a$ Q5 H! g7 g6 J" Y1 F5 l+ q

m=abs(y);

1 P3 y7 z$ L; q a$ W# h

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

, X0 q2 A& _5 o$ @ w+ E! j; U: q/ E

figure(1)

) Z: l" K9 F( }5 z# l

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

. M" t, h8 U; P

title(信号检测)

0 X. }" l8 T8 \+ _9 u6 H

ylabel(Input \itx),xlabel(Time )

3 k' U, @4 z0 V) n& ^' T& C" w

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

1 ? m1 X2 F2 t/ \

ylabel(Abs. Magnitude),grid on

4 y E0 b( f3 [

xlabel(Frequency (Hertz))

7 c' P3 \( |3 D
- h' F6 m7 A0 t7 S" B. h- i' t! e K

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

8 p" ^, P- M7 E) ^) e* m" f! j

load sunspot.dat

, \; \$ p4 f, j. a- J

year=sunspot(:,1);

, L! H* H6 U! F G, w! E

wolfer=sunspot(:,2);

$ {9 K2 S, b: L( ~- o

figure(1)

; V- l% }& |2 p) }

subplot(2,1,1)

2 \7 c% J F, S, N h1 f6 Z

plot(year,wolfer)

! u% r* ?3 ]0 z2 P9 N2 c, i& t

title(原始数据)

( C* f8 l% V5 G7 J1 k

Y=fft(wolfer);

% w! n) Q1 h) |/ b; b/ O

N=length(Y);

4 b/ h1 P+ P/ ?3 V! Y

Y(1)=[];

+ c$ Z" v( l# Y! W6 O8 F

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

: M0 R/ D/ s2 F1 W% W

nyquist=1/2;

4 S" h& T6 [' l$ P, d

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

( z$ B; s- F0 P8 j, j( G: o

period=1./freq;

; X$ {- |- ^' t) u

subplot(2,1,2)

3 v* F& q% N6 I& V! c0 \

plot(period,power)

! B/ s3 ^6 c+ A. {4 {# W) b- s

title(功率谱), grid on

4 S) K* u! @- W6 k7 O, u- n

axis([0 40 0 2e7])

# X. q) b' o' K* H; }
1 ^4 h5 ~* ]2 V' V- ~- k9 ~ b

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

" t4 n, B$ e! x m6 U4 I+ M 4 S8 F& B- D: g1 e+ g' ^, C9 s& M3 I7 O: \( I* x- { 8 v* r5 l. ^# T b6 ?( N6 z * A" A6 i9 }; ?7 V9 Q
回复

举报 使用道具

相关帖子

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