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

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

[复制链接]
3 d, G0 u0 m. C" Z6 ~# V3 ~! Z
' Q: @3 ^8 O) Y; i' {( c

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

+ g5 X& v* L- J' e

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

( F [6 W d! A

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

' S, ~2 d, E; s3 y, q5 V$ {/ m

load count.dat

( v. _7 s& y6 }! h* s1 ?4 V+ m& S

mx=max(count)

$ Z( V* f# V: d2 l. B

mx = 114 145 257

j2 @3 o, P( ~& B+ A( T

mu=mean(count)

. U# e+ X: b! v: G) j E8 ~

mu = 32.0000 46.5417 65.5833

9 }6 T/ L7 W3 ^% k9 L

sigma=std(count)

9 K2 F( P1 T4 i! ~ ^8 H, c: S

sigma = 25.3703 41.4057 68.0281

& n4 M* `" w8 [0 L5 K# v

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

5 l* v( x$ n& }8 w

[mx,indx]=min(count)

# ?: m" @/ [- E0 @; D

mx = 7 9 7

3 ~( B; C1 E. M' `; [/ O0 G

indx = 2 23 24

! |5 Y& |' J. u

1、协方差和相关系数

$ z6 X# S& Q8 ~& r6 J

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

3 M' g4 ?5 B4 v4 p0 r: o

cv=cov(count)

7 X" _, ^( K8 J

cv = 1.0e+003 *

* }) J- {& w! f

0.6437 0.9802 1.6567

6 p: a. l! K& V( P% r

0.9802 1.7144 2.6908

. A) H1 S$ q: e3 C0 N

1.6567 2.6908 4.6278

8 n, T/ H3 T- K' v3 E. q

cr=corrcoef(count)

; \6 l* d3 s9 ~: [: }

cr =

8 X8 \9 I3 w2 W5 z$ s

1.0000 0.9331 0.9599

6 e( I( x0 ?/ Y- ^7 t! T

0.9331 1.0000 0.9553

e# @; m S6 v G- H

0.9599 0.9553 1.0000

7 W, r: k7 d3 T6 E

2、数据预处理

5 D, g0 ^0 U5 X1 P: ?" C

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

3 z7 B8 g0 X9 n& I* b. K

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

% \% v T* [8 \7 r: \; Y8 \7 S/ z! z

sum(a)

' r) |, b% ^. k

ans = 13 NaN 13

- \) l5 d& T0 g2 E) n

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

2 @* t3 c$ K/ @" q! B4 D

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

. T* L( o# q: f. O

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

' k; r6 T5 m( p! y6 a% O3 m9 a

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

& s" m, B7 A ^* }0 g1 G2 B

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

7 ^' J& w$ ^' U

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

+ d6 P$ D. B: X% R& Y7 t

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

, W6 n6 O) \" E% A

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

5 V& A" C6 Y4 t; {7 ~0 H

3、回归和曲线拟合

2 A1 a% q% \% N9 C, Z, h

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

+ o* Z+ Z5 p" d5 W( t

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

9 k% `8 y; S; C4 P. s0 q, Y

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

9 ]& z* U U i

y=[0.5 0.82 1.14 1.25 1.35 1.40];

- ^/ Y1 M$ p2 g* q9 m9 N
1 @( Q( }, X# Y. g6 r$ s2 D+ k

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

' [$ ~9 n2 w$ z" }7 O

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

, m% x* Z9 W; D" h0 X! {" q

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

8 D/ M& f% @; q; J6 I0 R

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

( w0 Q, M5 m- \

a=X1\y;

% j9 n- L3 c* C0 r

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

3 k* k. |5 r- T; n

b=X2\y;

/ E- _$ z( Z g3 [( V5 K

T=[0:.1:2.5];

* E7 E; S5 y5 E8 c

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

* [, m0 `+ d! U' `" x

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

& a* J# _, C9 j

figure(1)

2 A8 E) } m, E; ^ T% C

subplot(1,2,1)

7 |/ T: U, G' c% o8 a5 Q. c2 n

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

3 O, e! E, N3 L; i9 |9 i

title(多项式回归)

5 a |; F$ {! b; {0 D' `

subplot(1,2,2)

, z) l1 Q! N6 o* U5 X4 D

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

9 I. A J5 E9 W; [ |8 I- g# R

title(指数函数回归)

3 d; u" g1 X( v7 k( _$ h1 W. [
" S) `5 e) M( N

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

2 U! h& x! r( ?, i+ r# q. D- _' ^

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

" C/ ~2 R* R7 \ x

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

! L z c4 O* W' N: P3 ]5 k& S

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

% g4 F) j% D4 M" E) J

采用来拟合,则有

2 e; |; L0 \0 }+ p

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

2 J! O7 @& @3 F1 Y

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

) a- w$ [/ g% v$ z2 m

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

* z C- T- y# w+ _" k' j

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

! W$ b' J( T; `1 m. P- o" B

a=X\y

4 Q, R1 o3 e; ?/ e$ `

a = 0.1018 0.4844 −0.2847

Q- E( a6 S7 s2 x

因此数据的拟合模型为

- _+ U% E4 h8 w* W4 ^

y=0.1018+0.4844x1−0.2487x2

# v' ]0 G9 x1 Y I$ p9 I) T* d

4、傅里叶分析与FFT

3 r; ?. D. a* X7 T6 A' a8 ]

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

3 {% s' A* ?& o0 D% F0 `8 O# G

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

# X' |' m+ I0 P" y& Y% g

t=0:1/119:1;

, c% Y5 D2 _9 c/ c+ Y/ e1 g

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

2 s1 B: F; I/ M) P; V5 c

y=fft(x);

6 U. ~( x; k: }

m=abs(y);

) m8 `" E: u/ E0 q( R; j- c9 l: \& i

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

" w0 U1 e* @( H8 ^8 p3 H# W

figure(1)

4 q+ Q4 E, K" F8 ~

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

N+ `& }5 T! E7 H, T

title(多频率混合信号)

9 N5 d5 H- j: J1 |: }# q

ylabel(Input \itx),xlabel(Time )

4 G1 Z1 r8 E7 k9 g* |$ m

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

* k$ x# R2 p# a

ylabel(Abs. Magnitude),grid on

1 z! p, u/ e( Y

xlabel(Frequency (Hertz))

6 {, g6 I* ~: _' A3 T: c
5 p- h) w9 X3 i7 }

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

* D; T0 z+ L5 Q. m/ {/ C

t=0:1/199:1;

4 H5 p5 d; h# i! P) G5 S9 Z. y7 P) D

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

) S; |% Z2 m! a! m1 G

y=fft(x);

# y2 R$ `7 T( N( t& S9 o

m=abs(y);

0 G# ~. t8 q/ S+ O- w

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

+ r( |) _- s4 N

figure(1)

* Z$ T- ~6 E+ x4 ]

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

2 m6 K" Y( ^9 @7 _% ~

title(信号检测)

) h; j8 [; l$ N, V/ E. t* c/ b

ylabel(Input \itx),xlabel(Time )

* r4 R2 w* |* V, I7 N

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

' r* o; B8 S: S+ U# p

ylabel(Abs. Magnitude),grid on

: `6 l* p7 D: `" I- a, p

xlabel(Frequency (Hertz))

. | w; q5 J0 s9 r
- G6 Y! _0 a* F# [( ^$ h

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

; l) q0 A( u0 _8 @; b' @( B' `9 v

load sunspot.dat

9 I! h( d' `/ [- y# T8 |) r( V

year=sunspot(:,1);

+ P [3 _( ]' X; X

wolfer=sunspot(:,2);

2 e+ o2 x E* G9 [( T! f

figure(1)

! M+ H! r h4 G3 O6 c

subplot(2,1,1)

% q1 c ?( V- [8 {6 A

plot(year,wolfer)

! Q7 g5 T8 |- B% T4 c. H% G( k

title(原始数据)

* x8 o" g# Z& M; O7 ^ t

Y=fft(wolfer);

) i9 {, U# L9 v, ^. ?/ o9 U" R

N=length(Y);

' I; w. h1 x d' D3 L

Y(1)=[];

6 t5 ^* q* c. k' _/ c; f5 U" I

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

6 |4 \; V- H6 ] Y/ Z

nyquist=1/2;

5 N1 Z$ d. F1 U U }% Y# `

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

/ t/ [$ Y+ [9 a6 l! N

period=1./freq;

m6 t- Y# d& `! v

subplot(2,1,2)

1 M' z/ p7 K; _$ G, U7 g$ U

plot(period,power)

" J2 B3 _4 j1 v ^( Y, \5 M( k ^/ B

title(功率谱), grid on

F, W* |2 B, d* ]

axis([0 40 0 2e7])

, h3 r9 f9 e( e( A9 l: q( k
5 P8 T% ]& ?4 a3 [

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

! l3 X* a5 W2 l+ ]- j - P O6 `$ M' H9 ~9 R6 I+ I f- H# _) X/ ?+ | 5 z5 A8 F# @7 u5 [ `+ m* C3 H r1 D; }: Q$ m
回复

举报 使用道具

相关帖子

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