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

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

[复制链接]
5 l K/ a9 d) J( e- n
/ Q% J4 U! W* j1 h0 m

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

, S9 t- l+ }* ?& T$ I2 C

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

Z( I! B$ \# D- T, W

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

; P2 B. }; n8 e3 I

load count.dat

- x) G5 ~1 Q1 v

mx=max(count)

3 v2 R8 J9 y! }. o7 ^! K

mx = 114 145 257

: t: \% q% ~/ ?8 s: J

mu=mean(count)

" q0 H% r% U$ d0 r2 x' Y

mu = 32.0000 46.5417 65.5833

s" C4 S' j8 _" ^& {

sigma=std(count)

$ I% k' j! @3 j

sigma = 25.3703 41.4057 68.0281

( l! Q6 s& ^2 h. J% p: N/ t& n

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

" L- h* h4 Z8 ]1 G& C

[mx,indx]=min(count)

! Z" v' I' t r6 d# N. D

mx = 7 9 7

# d& f6 f6 R* }. ^: ]; U" {

indx = 2 23 24

3 V7 O) w( d3 W9 a1 }& i3 {+ J0 n3 x

1、协方差和相关系数

2 A* v. o, f9 _5 r# n" ?8 J

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

0 o. {/ b) j$ R- x6 Z" t

cv=cov(count)

! |9 S5 Z, K$ p3 z/ {8 |

cv = 1.0e+003 *

6 [3 }/ k) v4 R7 k/ X$ I- w2 C: }

0.6437 0.9802 1.6567

, ~' x Y5 `/ p8 b

0.9802 1.7144 2.6908

. z3 c( p+ w; f6 x' t3 o

1.6567 2.6908 4.6278

2 s7 p* f& T* O7 \' p- ^2 v5 ?

cr=corrcoef(count)

. h) ?/ ?' Q: I' I3 j4 u

cr =

, O `4 f6 N) T, n

1.0000 0.9331 0.9599

2 a& V4 \3 T) P% s

0.9331 1.0000 0.9553

5 g' T6 ^; x3 i9 F! i

0.9599 0.9553 1.0000

$ Z. d- p+ }/ c7 l0 T- J5 j- I

2、数据预处理

, d ^2 b) L5 N% M

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

' ^% O* Y6 J3 H

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

* P+ \+ l9 d3 ?- y& k0 w

sum(a)

: `4 b0 N" {. j0 c3 [

ans = 13 NaN 13

8 z4 S4 H( x# r5 P# y. m7 r

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

. ^, M$ L$ g6 f( S

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

% U e- o! V+ p4 T

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

5 P- C9 _$ F5 ^8 Q$ n

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

# M0 t2 }- S& w) \. C

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

% y2 q' p6 w0 Y# z

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

( H w) w7 O% Z, n

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

& d9 J, D0 i0 v7 B5 o/ R( ^' _: P

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

, S; j4 T$ F9 ^& n$ ~! B( k+ x( u

3、回归和曲线拟合

5 {4 l( a9 O! ?! O7 k7 c6 ^2 x @! V

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

) m/ e/ R6 I1 o: U* @

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

) v+ }0 R7 f* S( k6 v/ O3 F

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

; K! ?' L8 Z' q& v I; u+ d+ b" Y

y=[0.5 0.82 1.14 1.25 1.35 1.40];

3 ?3 E% {% O2 B- B6 q: N3 i
+ ]" k7 T8 q" h2 |2 ^

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

$ |/ r3 u( j" i' T: z9 C# l

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

9 u% c7 u& N: R+ y$ N! X( a0 u

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

4 X& p3 `, b# a4 W

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

& b4 e- `) Q. b5 |$ g/ d+ ]! u6 w

a=X1\y;

: i: @. n! i5 q. U, B

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

6 Q j$ I' `+ Y+ S8 w/ ?1 l% `

b=X2\y;

`2 @5 e& {! ?; ~. n( m

T=[0:.1:2.5];

7 v; p: T/ k* {; C( }& C# ?9 R6 N s- z

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

4 p. p3 q d, m5 D

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

1 q6 B. X# u' |% i0 C u' X

figure(1)

5 p3 B, q. ~6 _, }! M o& m

subplot(1,2,1)

$ y" d6 p. b3 f' d, k( ^1 M1 X6 R

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

1 }& R: l) _; s: n0 [

title(多项式回归)

% u" a: {" w, C% u/ b2 h

subplot(1,2,2)

6 H6 `0 F/ m% k$ s

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

- w* F7 J0 ]+ H6 R' ^$ W6 C

title(指数函数回归)

. D( D. f: c) O$ J4 E; f. @$ R2 n
/ K; m2 Z- F/ o# N

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

6 Z- [- u. o, T3 D

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

% A4 d4 M7 I! m5 t! w9 P' T. W9 ^. K

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

( v x+ `! ~7 I" \+ X8 q

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

& I w) n$ E+ l9 ^2 c

采用来拟合,则有

3 c$ S1 r' p$ N' x% r' _" R

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

. g% q9 Z; t: H4 L% |

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

4 S3 a: z" C# E- w. |9 c! V( d

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

) \) }' U( L# S1 @7 X( ` R

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

( Q/ s+ q* y0 v( r+ E7 V

a=X\y

/ p6 K7 D6 A4 S* M Q" P

a = 0.1018 0.4844 −0.2847

f4 U3 z/ }1 H

因此数据的拟合模型为

1 M+ Z) a }5 J- u- u+ x: _

y=0.1018+0.4844x1−0.2487x2

y5 i/ |) ^5 l2 ~

4、傅里叶分析与FFT

( ?7 C7 ]3 H4 B( R2 _

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

- E5 D% J- O/ z2 L, L( ]6 r; P

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

) e4 k' x8 @! n7 H6 F

t=0:1/119:1;

# I7 g; |: p. N# S' f6 b2 E2 ^7 V% S

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

+ c, D' h2 E8 V% l2 l

y=fft(x);

9 i6 R! ~- i2 ^; C* d. S% o

m=abs(y);

+ V# J2 U6 E6 U) h2 ~- p" w7 \

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

* R0 d& v+ U7 Q, b

figure(1)

5 @! R+ o& M9 g/ z) e- O% }; q

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

* C2 z4 I! U$ _: _/ p, }

title(多频率混合信号)

- a( H$ K5 t- R8 i' |

ylabel(Input \itx),xlabel(Time )

( h( L8 c& k0 E! O' e

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

) L& L) b2 A+ \+ J7 y

ylabel(Abs. Magnitude),grid on

0 W3 F; X2 d' ^2 D% T7 H8 G) `5 I

xlabel(Frequency (Hertz))

, v( P/ i6 c0 m/ ^
" G0 i; \# B8 K/ u8 z8 Z

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

q& J; J q' E# S* F* V; C

t=0:1/199:1;

0 S, l4 { e$ q0 u: T2 D3 v

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

: N* R+ q3 k; R D

y=fft(x);

* |& Y, L( O! d9 a, o6 m

m=abs(y);

' I* a/ ^8 s+ ]4 {% b2 X) q0 R

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

* U# w+ {( j6 o2 l

figure(1)

6 L2 ]5 H. G; i& q8 E+ Z

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

) A i8 B _2 O. I6 J! ~

title(信号检测)

4 P8 q d, @% D& O [# m( l

ylabel(Input \itx),xlabel(Time )

^4 n" p% b! i2 }' H/ x

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

( V& |9 Q1 L/ y5 T% D

ylabel(Abs. Magnitude),grid on

: h( m+ _( y* ?

xlabel(Frequency (Hertz))

2 B8 Y# k! J- z; L
8 z# o( n: l4 y _3 Q2 k0 F

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

$ w. _1 D: i, q8 t

load sunspot.dat

% H6 t/ i# O% ~" h6 L

year=sunspot(:,1);

4 i+ Y* y$ H. {, w5 C0 K- `" X

wolfer=sunspot(:,2);

; R s) [' l/ N% L- @; h

figure(1)

3 _4 c* }5 O2 G" p

subplot(2,1,1)

5 ?" t% ?, S. F$ c

plot(year,wolfer)

' @6 Z1 c- Y5 N4 r" a+ R3 w: c' B

title(原始数据)

{' n) r; g$ @3 g& O2 q! d3 N

Y=fft(wolfer);

. f# k2 g. R) r9 s! S) n

N=length(Y);

8 p, _0 m3 p* T" J- D% V: U1 J

Y(1)=[];

1 M8 }% d J" m0 J

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

" p. h2 y# L! `% B: h% w" O

nyquist=1/2;

9 b$ X' U9 b7 y+ `5 d' o4 O1 Q) E/ R5 K

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

3 C6 }3 q4 W" O: P

period=1./freq;

* r+ g4 A0 d; P& G; ?, ]

subplot(2,1,2)

* v! Z! |* R2 R! q$ ^

plot(period,power)

2 I; {4 S/ A0 H3 @

title(功率谱), grid on

0 e8 n/ m, I# j& ~3 H/ Q; `; j

axis([0 40 0 2e7])

' w. C% ~: K& k3 m
; G3 \1 P/ E, l* H

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

8 t! c& ^& h& z+ O7 B ; f- f5 S. b3 D+ b$ ~9 @* P/ p; d! o" Y6 o' t/ b 4 O! F! [- @) A! R+ x2 q" S/ q" y+ s4 A& N4 Y
回复

举报 使用道具

相关帖子

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