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

[复制链接]
- I2 @! N! [; v3 _% Z9 \
0 ^# x8 G5 _8 D

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

( k* c4 d* j E6 ?( d8 m

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

3 ~/ n% K' E5 \) o% Y6 P4 _( M

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

3 i6 P! s+ Y9 u( K' x1 H4 C

load count.dat

, H, w& z! W% v+ S

mx=max(count)

. |4 v9 x# T2 O( h) D5 u k

mx = 114 145 257

6 w L, E( j. C; r

mu=mean(count)

?6 E/ z4 V: t' m# _ f b

mu = 32.0000 46.5417 65.5833

6 @; |0 U8 W1 L! I I! N/ i

sigma=std(count)

; E/ R! x& B0 t

sigma = 25.3703 41.4057 68.0281

& v( P- Y4 l9 W W) V# V2 [1 k- a

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

h( L1 K7 E {* e2 B

[mx,indx]=min(count)

, q5 J; Z! J+ S

mx = 7 9 7

0 k" ~7 p& y2 A4 U, [% j) {

indx = 2 23 24

) j* P- T5 R) U2 F$ l

1、协方差和相关系数

! q1 o, K$ l. k8 R& Z

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

# K* s; g' [" a" l3 Q r1 o8 x# v

cv=cov(count)

/ E. `: l: f1 O) K

cv = 1.0e+003 *

' a1 p8 ~9 u7 E

0.6437 0.9802 1.6567

! ]1 L- Z: @4 [" p* ]1 ]3 j

0.9802 1.7144 2.6908

3 U+ H" H; X. n! X/ q

1.6567 2.6908 4.6278

* a" u0 r, A2 Q* j# K7 F" M I

cr=corrcoef(count)

2 n8 Y+ q9 |5 O8 U

cr =

' y$ h5 i* ], c9 A7 J% f, T$ g

1.0000 0.9331 0.9599

6 y% a1 d) ^: v- `

0.9331 1.0000 0.9553

7 @/ \ d( @ h" d& Y0 N1 w1 L

0.9599 0.9553 1.0000

$ S* U' u0 Y+ L' k9 O8 y

2、数据预处理

6 `/ B8 e! S: I# y; ^9 ]) {

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

% ?2 ~7 L; s2 N6 d5 Y" h# Q

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

3 j) @# P6 w- ]* x/ J/ j1 E

sum(a)

, P) ?) D) F8 F

ans = 13 NaN 13

8 \/ w# U$ V j

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

1 z2 D! p; k& O: W' W3 P

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

4 R; `; n8 l, s) Y9 S

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

* I- h! U) s. d

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

, S# O) u! t( E

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

& F, L1 o/ x+ _) C" m

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

o! J: Q/ U0 D

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

( S$ ?/ j8 \% F6 l' J& {

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

1 K+ p3 o. ~( g( N7 F5 ^

3、回归和曲线拟合

2 q# t- d. n: @' c+ q1 a

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

7 g: i# @( ?' J" z$ }. S0 k

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

. K2 T, P* J2 m0 p

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

& c2 f/ \+ D! A2 K/ a" Q

y=[0.5 0.82 1.14 1.25 1.35 1.40];

, O- Q, P7 b8 N T* s9 e* a
1 U' G+ h7 y$ R1 Y; E- t2 Y4 }

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

# k* o' F! {4 k( r& {* p

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

?. t8 p) R4 w( o) U

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

; n4 }6 o: d4 @7 C; p! z+ ^- z- g

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

( L8 d$ U- J1 ~* `& C

a=X1\y;

: Y0 r# o5 G* i

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

2 o6 Z9 Z% c7 _% {

b=X2\y;

1 F, Y1 S6 R8 |9 Z- b- b' j

T=[0:.1:2.5];

! C8 k9 Z1 {$ k% R+ r5 ]/ C

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

1 q( P4 j/ k, g k5 B$ ^ b

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

$ \( C# L* U: M$ y" w) b5 y

figure(1)

& Z' }3 C: l* Q2 j

subplot(1,2,1)

7 M# H; E4 d5 @$ [ ]6 x

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

3 K3 V5 h9 h8 _ a5 V- c; M$ F

title(多项式回归)

0 e/ e5 p" `# P: c' ]

subplot(1,2,2)

. O9 p. G7 z2 t" Y

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

' X' m) L, k* p6 E: e1 n9 W

title(指数函数回归)

8 Z- M6 m/ Z; c9 g. y8 Y
( E5 x* X1 ~- ~# P5 @2 y. `

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

+ r3 ]7 g( ~9 O0 C" T o- H

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

- l) R8 z8 _, A% s

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

# i! D% I i- c4 F9 i8 ^

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

5 V0 M) ]+ F, S% O# ~ l! C

采用来拟合,则有

4 v# N. V0 `/ X0 J

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

, l( @1 ~; u- B' s6 c2 |

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

$ L$ Y2 R$ u7 g" ^! T! F1 ?5 G- g

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

9 Q* @0 K+ h! W* w1 L' J6 p

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

?2 B& g2 @# ]- |6 Q/ e

a=X\y

- f- _7 w; z) \6 u

a = 0.1018 0.4844 −0.2847

/ w) F6 w9 m3 ]- r$ Q

因此数据的拟合模型为

( P+ v. c6 I _; R, w4 ~; z

y=0.1018+0.4844x1−0.2487x2

* @; F5 x7 y2 i% k, k/ X

4、傅里叶分析与FFT

" g/ D/ P/ g* N

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

+ E; u m" F4 r6 v5 s# H

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

* ~7 J3 P) F p$ F

t=0:1/119:1;

" @: O0 I9 X1 V9 X( h

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

0 Q' {' K |- ^# ]7 E+ r* w i- I

y=fft(x);

/ [9 E& \4 _4 s+ Z+ e$ c. j

m=abs(y);

9 }5 A5 H1 E4 P6 ?3 z8 D! [% Q6 {0 [

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

6 I2 y2 k3 l+ v7 [% s' f; m

figure(1)

: o7 ^0 n) d( u: \' N# l% w, Q* J- V2 k( H

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

5 j& ]( C+ E; i5 ^8 ~. R( u0 p

title(多频率混合信号)

/ K! V; a7 o/ [" B

ylabel(Input \itx),xlabel(Time )

+ D' n$ q3 P% t2 w0 B; @! s8 k

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

! X. T: |( X9 }7 E& A6 M/ p

ylabel(Abs. Magnitude),grid on

: b9 E/ X3 |& |# g4 o

xlabel(Frequency (Hertz))

# [' F0 E) L* }5 d9 m
2 [/ a% ^4 O6 @% q. h. J5 P" T8 A

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

* i3 ^, d3 P- ~$ T J$ ~

t=0:1/199:1;

9 y5 T5 `5 d4 Y9 w

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

. w _% h5 J; F

y=fft(x);

! b5 r6 U2 Y/ J7 [; I

m=abs(y);

, V* q" _9 k* I2 R

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

9 ?9 O& Z) P7 M6 m8 G" Z2 w% d" T1 j

figure(1)

; F0 x" P$ L. u

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

/ b9 Z; v( O2 {- ~2 C/ _

title(信号检测)

2 I% N/ _; B% y% V/ P* `

ylabel(Input \itx),xlabel(Time )

/ g# H& c# \5 B

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

1 \, l! h. }! }# e0 I4 l

ylabel(Abs. Magnitude),grid on

3 x$ K# r+ }- p

xlabel(Frequency (Hertz))

0 x+ W. E6 T: t7 O7 L# u% W1 w2 T
! [) ?6 F9 I- E

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

/ I6 e. j( _4 ~3 v

load sunspot.dat

7 v2 n) m0 G: y8 M$ G7 ?5 `

year=sunspot(:,1);

* x& P6 H! O! y2 [. {" R

wolfer=sunspot(:,2);

1 |# ?! U1 Y7 o; x

figure(1)

# ~- G- {0 j8 `% Q: B0 ^& k! h

subplot(2,1,1)

) O0 Y6 \7 `& D5 Q$ Z+ B

plot(year,wolfer)

( I4 g' g4 W5 p% p; G

title(原始数据)

: t* S. o* J4 p' m5 N1 `7 h

Y=fft(wolfer);

- d/ @* Z$ h! [7 r) }' [

N=length(Y);

! K3 h3 |6 B1 X9 O5 [! `6 d) k

Y(1)=[];

+ F3 _+ Q/ b! t/ N

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

1 e! r" u1 @7 `" f6 ^; u

nyquist=1/2;

4 E: J, S3 ^: u0 J0 L4 \0 D

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

) S7 F. v' {( V. m# w' \

period=1./freq;

: f" y) u) J$ t( O0 B

subplot(2,1,2)

2 y3 ?7 j! w7 q+ ]& f

plot(period,power)

7 x( l, x$ ]$ T8 e! O

title(功率谱), grid on

3 t R8 h! s! y

axis([0 40 0 2e7])

! @1 \7 B- ^& A( B5 U& F
/ d7 I' d4 j: Y$ v- S. I

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

( M' a6 w0 w3 i' `; Q $ Q7 {+ {" |( B. ?* H8 o& _, s8 U1 b( M. L8 X7 v B6 J& m1 M% e5 P, b; e& X7 W" a . `% {$ a. s- e% F& h
回复

举报 使用道具

相关帖子

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