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

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

[复制链接]
; \ U& k9 v; `0 z. ^" l
: o- \2 I$ z$ a4 b% P

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

7 U: q+ | n6 E! E* J' B

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

9 H. C$ a" M& H. K

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

' `4 h9 }6 `& g: m, n8 ~

load count.dat

7 W# l- a8 k' R4 c6 n

mx=max(count)

: K* y2 b( Q8 |$ Y; `4 J

mx = 114 145 257

6 H5 a8 Y9 t G+ s9 L3 R! }

mu=mean(count)

8 |1 Y6 y _$ p/ ~7 |

mu = 32.0000 46.5417 65.5833

+ [7 Y5 t6 |3 h7 {, U w/ S0 r

sigma=std(count)

' l) N6 J; Q% B2 b

sigma = 25.3703 41.4057 68.0281

6 o; Z: d) p( P: i! j$ b

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

: M( y2 O; n, }4 w3 h

[mx,indx]=min(count)

0 ~0 l; i; T; J& N7 E

mx = 7 9 7

9 v5 R: I* k( F+ _4 M

indx = 2 23 24

4 i8 [. C1 Q- u* N3 T& Z9 l6 }

1、协方差和相关系数

+ F9 Y& Q5 m2 P. A

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

+ E/ p' s7 D- m

cv=cov(count)

3 L! @, q) l' G9 L4 }4 ~1 p; |1 u

cv = 1.0e+003 *

: {& C1 ~& C. d' e

0.6437 0.9802 1.6567

: o" p" n9 Q% b' D, N' N

0.9802 1.7144 2.6908

9 `7 F! \9 d; f O

1.6567 2.6908 4.6278

! @ z6 A% a+ b% |5 U

cr=corrcoef(count)

- S. y' x% i- ]7 u1 ]

cr =

) d; b2 w- J/ ^3 j6 }# ?1 @' z+ Q& V

1.0000 0.9331 0.9599

2 Y) E4 d( h' b' S2 O/ W

0.9331 1.0000 0.9553

9 o2 F4 j3 @1 ?/ C5 c

0.9599 0.9553 1.0000

- ]3 d3 a( v s7 c; R c* `; |

2、数据预处理

) |$ Y! u2 V3 M2 @" v3 M* V

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

) h5 r3 Q4 Q! w4 B3 y* V1 z

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

6 A3 J- d0 M+ `4 L0 \: n# R/ h' n0 k( o

sum(a)

0 F! s3 F' F! N! d

ans = 13 NaN 13

) _; S$ M0 w7 S4 q

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

! }7 v- g( ~3 S* k( H$ n

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

2 z8 Y, [% t# r# Z7 N! U

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

2 N' a! t2 R& c7 a! g

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

& |' z2 s0 G5 l) T) Z' i

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

2 o( o O, K0 v1 v2 O4 f

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

% Z' `4 X, d3 V" w$ G9 q

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

: k: C4 z6 h9 i S7 Z

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

" D- N% b1 P2 [) ?8 ? p

3、回归和曲线拟合

+ I) P% }0 i6 B9 j7 X2 E. I5 n

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

' f9 F8 c o: ~" e$ x2 X6 z2 k) a

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

1 U5 {# I8 z: r$ ?9 _4 I8 f& W

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

. e' n* P& |# G, R- d

y=[0.5 0.82 1.14 1.25 1.35 1.40];

; b1 a) m0 R' t* {9 U. A: o2 h
; e" u, ?! }" q' P# V) O* g; Z8 I

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

" H' u, l, L: |! u

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

$ M" l) g3 q+ g

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

, U( u* E; m, M$ M6 C3 _+ {

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

' L% |: `7 p( I) C5 M

a=X1\y;

% c9 h0 [1 m/ x1 f" B5 [

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

# |. |% g! g& i( A! s8 h

b=X2\y;

$ h6 G \+ L3 o, ~

T=[0:.1:2.5];

, @$ |5 a7 R/ w$ L; b, ]

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

! A& r1 N( o* Q. Q7 U- @

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

2 E8 e/ [0 @$ R3 b

figure(1)

$ j8 p" J0 M! [& \

subplot(1,2,1)

$ N5 _1 F3 u( p4 X

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

' x: Z" n+ j9 t" O! P6 y

title(多项式回归)

) o; [8 d5 V% g& s) w$ \& h& L$ t

subplot(1,2,2)

* l2 y' Q+ @' H1 S

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

, i2 Q, K/ f# |$ g

title(指数函数回归)

" G' l8 W: R& w
! s% O, ^: q9 u

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

- @7 C5 h W# X* ?- _' P' Y+ l

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

" R" y. [$ Y% Q

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

$ E* P' j. f( R6 C( H$ ?% |& j

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

" c& n. I- Z/ Q; n

采用来拟合,则有

3 f9 _0 O. g9 `5 _

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

: q! M5 A, o9 u

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

) ?7 w1 W% g. W5 y% [( G2 c

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

3 S+ w. S7 O$ m% I

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

: Z) L9 l" a# S/ J

a=X\y

* S& X x+ ]: k7 p

a = 0.1018 0.4844 −0.2847

- N6 D$ W& b- ~6 P$ |# [. G5 e

因此数据的拟合模型为

* d% U4 ? L1 q' r

y=0.1018+0.4844x1−0.2487x2

6 R7 l |& s( O; b1 }

4、傅里叶分析与FFT

9 e3 X% w! D% W2 M" l1 ?& e9 H

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

% T5 Z5 {- c8 k" P! X3 j- `' F

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

$ X6 G+ Y$ ?. o! a4 `

t=0:1/119:1;

9 @( J; U ]3 b7 |& W

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

* g2 m9 [( E& j& y' D

y=fft(x);

# C0 V; S1 a1 J" w7 l

m=abs(y);

7 k# X$ c8 i0 e2 R J

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

- c/ C c2 r8 K

figure(1)

+ R+ [4 R) x. V6 h; O. \

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

! u( i! X& v5 {$ z- T/ P2 a5 ]3 @

title(多频率混合信号)

; w( U& ]3 m; h4 u

ylabel(Input \itx),xlabel(Time )

+ u0 {+ g" ]2 X' D% [+ m+ `/ Y. D' B

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

' z. Y8 b- S6 ~7 ~+ |

ylabel(Abs. Magnitude),grid on

8 t P2 Y1 h( @7 c4 T, o" E

xlabel(Frequency (Hertz))

2 B: K6 x. {8 r
% I7 c/ v3 R) I& E, x

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

: |8 l- n# o- ]2 r

t=0:1/199:1;

& \* C! N2 Z- E# X; J

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

. S/ H* h" j8 _! l

y=fft(x);

- @; A3 B, K6 S0 \. h) o

m=abs(y);

1 @% X7 W( ?7 e F; P1 X* t

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

8 ]5 L0 ~& j3 k7 z

figure(1)

6 J# X# Y. G1 K; B

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

, R" {( p: R! Z5 u

title(信号检测)

7 ^, ]9 ~" }- E" k5 m

ylabel(Input \itx),xlabel(Time )

: j7 c3 A6 \# o6 R. |# a4 I4 _

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

/ Y+ _: i% Y. f9 D* n

ylabel(Abs. Magnitude),grid on

; G$ ?1 }" a% V5 D& \" ^' N7 d' r

xlabel(Frequency (Hertz))

, \. w |* c0 D7 P" y
4 z3 w( \- J |, t" l! Y

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

4 w2 l" [) n. D# X

load sunspot.dat

% N. Y; q5 @8 Y1 D8 `

year=sunspot(:,1);

9 t' I3 c$ n2 ]' N+ o( V0 f

wolfer=sunspot(:,2);

4 |- h T9 P, K6 p- c- e+ J

figure(1)

* c4 V6 M/ l8 W, W, f+ @8 ? N

subplot(2,1,1)

% m9 o0 w8 T) c5 @4 q4 I! x7 f$ M

plot(year,wolfer)

+ Y. ]3 m% O+ F

title(原始数据)

. H3 f/ a" T/ E% i2 p! v

Y=fft(wolfer);

x" N C, ^3 K {6 A; k( W

N=length(Y);

( k `9 z7 k y& ~

Y(1)=[];

/ ?. a6 t$ k( I% R* a( @/ G! L

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

1 x9 I- d! q: H0 g$ S

nyquist=1/2;

; n4 ]- o) P* D: z

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

9 P5 H1 Q3 U! ~. m( H2 \

period=1./freq;

; _! g3 z- n8 W$ v% K! p/ j2 ?

subplot(2,1,2)

) S6 v. q, { D s8 c" F

plot(period,power)

7 R. \3 g+ F' M8 K% Q# C

title(功率谱), grid on

4 \9 t* \4 `2 `9 R: z' O: r

axis([0 40 0 2e7])

. ~+ h* |6 H- _* i' N
7 @) q- ?7 x% J6 r4 u* M/ R

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

9 \6 j# A& D0 E- B r0 ?! r( w: d2 x : W1 I. j3 u, ^& M# M 5 Y0 M- p: [# h7 F- f6 I$ {8 K8 h/ A) |$ x
回复

举报 使用道具

相关帖子

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