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

[复制链接]
5 ?2 H4 ]) s% A: y: _% Z
2 t8 }+ {$ D# h( k: a- }

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

6 [7 i- U1 l/ Y1 X7 |

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

1 }3 N6 B' |0 U+ s# f4 U" h

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

+ b5 R3 g- R1 ?$ ]8 e2 h; A* v

load count.dat

& F! P) h% }2 V C3 `

mx=max(count)

; i4 K1 |, |" k" {

mx = 114 145 257

1 A( S. Y) {* e5 [- O/ X

mu=mean(count)

! p V. r I0 f1 S7 }

mu = 32.0000 46.5417 65.5833

) e: s, _% ^- H

sigma=std(count)

& n7 U9 p+ v' g; n# b' L2 O

sigma = 25.3703 41.4057 68.0281

5 N4 M! B1 r: [1 r5 Z" _

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

) I; U% l' _' ^" _- ~( l% }! m

[mx,indx]=min(count)

: v/ r' b4 C/ m; e

mx = 7 9 7

B' z" Q) s% Y9 x2 O

indx = 2 23 24

4 i; r: b, v( U6 Y6 J- Z) Q2 ~

1、协方差和相关系数

6 Z0 x! P; D7 y4 N! q& x

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

, E& H2 @: ?' T

cv=cov(count)

* o5 G, A a6 j& J/ Z& i

cv = 1.0e+003 *

9 w% f% |* s/ D6 b- l1 i# \9 @

0.6437 0.9802 1.6567

% U3 k; q4 S% k7 m$ @# i. |

0.9802 1.7144 2.6908

& B3 ]6 M& v# M

1.6567 2.6908 4.6278

6 j4 h0 u! W9 j* r& U7 \% N' O6 N

cr=corrcoef(count)

, q4 } x; } h% ~

cr =

6 x# Q4 f3 e( X2 L% t; p( A2 W

1.0000 0.9331 0.9599

2 T# s# Z- `7 H! c" c

0.9331 1.0000 0.9553

! Y [# f, O# R" v5 y

0.9599 0.9553 1.0000

5 {/ R% v/ Y9 F6 ]2 o! h

2、数据预处理

# G M( z* H& ]* x5 ^

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

1 n; Z. n, n4 ?5 T4 @3 ?

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

. R4 H6 Y/ b9 e4 L2 \

sum(a)

3 m0 W0 ^% W8 g- g& s' Q9 j. f

ans = 13 NaN 13

3 @+ @; A9 z l& Y

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

& _! m* S: A- }, i U

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

2 B( _1 S" b, g0 k2 _* s: N( G9 M

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

" x9 U0 {. B* J* u6 o3 g

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

6 J! x% s, L' h: [9 w* x+ o0 u

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

4 W2 n1 l S# b0 F) z

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

; E8 ]9 u) p P

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

- Z; r4 S6 @( M9 V x

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

4 I( c( |8 M& n8 T4 `

3、回归和曲线拟合

- B/ R9 O ~" x y3 A

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

1 B1 m. E7 Y7 S/ I/ ~- z6 F

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

& g5 L8 `) {+ `7 R% `

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

* X" e# P- C1 F& O3 T$ E* l- C

y=[0.5 0.82 1.14 1.25 1.35 1.40];

1 h- i# X' \% e/ f6 q( N0 z
: b3 K) r8 I+ U

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

' A/ O) j$ r( v: {! {* R) H0 m! e

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

8 }2 c& y4 ~# w1 I7 F

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

( W2 r* w( u2 U' c

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

* ~6 R$ m0 p$ u% w3 W7 j

a=X1\y;

$ J: J2 \9 d2 W9 G5 \

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

: J B, u9 t4 w& K

b=X2\y;

* m1 O9 y9 r' d, m" C6 y

T=[0:.1:2.5];

- H1 [; g9 {6 p+ @: Y' ~7 l

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

/ U6 H( f, o: q5 F3 Q* `% H0 a

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

% G$ F6 B4 s7 O; G# A3 d

figure(1)

/ Z6 y7 I# _: v6 I% }

subplot(1,2,1)

7 w$ t' E0 Y1 z' t7 _4 { _7 b! P

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

1 p: V4 L0 b: t6 Y

title(多项式回归)

: Z8 j' b9 \: L

subplot(1,2,2)

# \ a/ n# J# L* ~: c

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

% `. G# L. y) q* x

title(指数函数回归)

2 A$ Z# y0 i- @2 f: @( F
1 `/ J [( d$ g; v/ @6 |; _; ?

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

0 |3 ^" E- H g

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

1 U5 t8 n2 i8 C, Z( K$ [/ `

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

5 z* U$ v# |- S. d1 G; i/ h

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

# |7 _& z' ^& |& i+ k9 _6 B! p

采用来拟合,则有

$ Z" C5 X1 }3 e$ A. m( p

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

/ k- f, z) P: w L7 u) M9 v* P

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

: v1 c' O# s4 i, q" \

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

+ {2 L2 `) I% s( d

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

, F- f7 H+ |" Z, c# F) |9 o9 w) s

a=X\y

- d* D6 a9 ^) w9 ?; y; Z

a = 0.1018 0.4844 −0.2847

% X5 f P; N* |" t! [1 o( t

因此数据的拟合模型为

. I$ S! y, U8 k! r8 C

y=0.1018+0.4844x1−0.2487x2

( f( \' G: B3 z* N! }! g* g/ o, `5 x

4、傅里叶分析与FFT

1 c' A+ y5 @6 t+ T1 L

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

: ^' O0 @' } k/ I% u6 u4 S5 [

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

6 r4 ^' m; n) c) K9 g) s

t=0:1/119:1;

. l, p! _0 _1 g9 h

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

+ L @' T& R6 u% R

y=fft(x);

6 F0 _! P; Z; X5 s

m=abs(y);

8 x5 X1 Y' u9 M. Y) G

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

: h& I; j' k1 V8 e% m" P

figure(1)

. `: B. K" K$ I0 ^1 I# O F1 [

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

7 [5 i( R; N& |1 v6 i$ a

title(多频率混合信号)

# `4 Y6 h% Q% z( k$ I0 K4 V

ylabel(Input \itx),xlabel(Time )

% w" i/ v# A7 ^/ P" d0 g, v- p

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

- \) \/ t) |' V; [: E4 M* |+ S

ylabel(Abs. Magnitude),grid on

4 W, u1 t4 I9 Q& J$ W! s/ u' W

xlabel(Frequency (Hertz))

1 ]6 r' Y/ M# @% p5 N. P7 I! F
5 w9 ]3 A$ X- E

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

% j$ T6 Y: }3 s4 G4 d1 O. _1 U1 M

t=0:1/199:1;

8 c. f5 f8 t; o3 S3 V

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

& L! b* y1 E- l' V8 B! v6 }2 w# ?

y=fft(x);

. g) R3 U& g' E+ J5 Y

m=abs(y);

1 j8 \8 M9 p3 d! W" Z! q* k

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

' K' e% q$ M/ r

figure(1)

+ ^8 N' h" \' @. D' l

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

( H6 [3 F4 p6 q: @4 z p

title(信号检测)

3 v0 [' ^+ i! Q( @9 u0 P! J6 s

ylabel(Input \itx),xlabel(Time )

) E \3 ?& A7 X5 H# R2 n, @. M

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

$ Q, ?* G+ |. |0 D {& \6 n

ylabel(Abs. Magnitude),grid on

! X6 R% U9 k6 M

xlabel(Frequency (Hertz))

1 K8 V/ S& I$ f% i8 h
9 u- G: E8 r. j$ D, h8 ] N

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

) T; ^, L, R1 a

load sunspot.dat

) r& y8 D* k8 E6 [ b4 v

year=sunspot(:,1);

% o |, a& g8 X

wolfer=sunspot(:,2);

3 m T1 y+ q# d" I4 A( E3 G

figure(1)

0 y/ x' \9 E* b/ C) }1 ]! p

subplot(2,1,1)

' i0 F/ a U7 b

plot(year,wolfer)

9 V e2 A$ r! F3 E( @2 w

title(原始数据)

1 \7 G- Z* _ N' c

Y=fft(wolfer);

2 @9 j$ Z/ `9 b" y7 ^0 K

N=length(Y);

) K& F" b2 s, y8 ~$ ~ j) h! c

Y(1)=[];

* {' A/ Z. X) b; b/ S7 D- O* l

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

( E* ^' L4 t+ u

nyquist=1/2;

+ F: M7 w! E# `

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

4 N3 x9 ?+ Y* E7 j* q! g

period=1./freq;

" z: G' P4 f9 o1 c

subplot(2,1,2)

6 Z6 ~" W2 T2 _8 V G( F5 v6 I

plot(period,power)

' Z5 V, Z _( G& W* C

title(功率谱), grid on

* \( Z# M2 i( U( ~6 i8 `! U1 E

axis([0 40 0 2e7])

# h& t" h3 k# |# h7 K0 ]3 q
# g/ m2 e' v1 U6 h

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

$ [ |- G! v8 w6 P3 y 2 A4 q' I* E2 q& x * v' u. b J* }) e9 R! ` 0 I; @' v3 J% h5 R; z0 @) [1 K6 _% t8 z1 J! _
回复

举报 使用道具

相关帖子

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