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

[复制链接]
% ]" h7 x+ a* H9 c, z" Z
, b# V2 q" d- X) v, ?

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

v9 ~) i, h2 P7 r( U: N) F

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

- j2 P4 M- \9 D

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

' [9 E* A9 o% F: L

load count.dat

- o% K& [6 v& o" f2 P

mx=max(count)

" b' _$ b' M# a( p* X* L4 `5 k; B

mx = 114 145 257

, C$ q+ ~% }: p \3 w' k+ ~( r

mu=mean(count)

! Z/ u9 n! c* Q5 N; q1 b

mu = 32.0000 46.5417 65.5833

1 C& ^' r9 l7 h$ Y& w# r

sigma=std(count)

! k( P' W! b+ G

sigma = 25.3703 41.4057 68.0281

: ]+ r% t+ D* o2 ~" G

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

. {$ h& m# x8 Q' ? O$ n

[mx,indx]=min(count)

$ _2 \- n4 X$ n4 {/ z d$ W

mx = 7 9 7

: B) q% R* ?5 h) ~

indx = 2 23 24

# G0 O) Y) g" R* z8 }5 K

1、协方差和相关系数

8 J- Y3 ]7 u! A: j

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

5 F y ]9 ?0 r; {

cv=cov(count)

2 X* ~, Z% c0 V8 m4 u$ |

cv = 1.0e+003 *

; h! y) u- J8 X1 ^5 a

0.6437 0.9802 1.6567

: x" u0 z: H" @7 h/ z; q

0.9802 1.7144 2.6908

) N* q$ O) b% s7 n- n/ g$ q2 ^0 f

1.6567 2.6908 4.6278

4 p$ N' p7 K0 Z6 Z" h. B6 A: L

cr=corrcoef(count)

4 b7 B* A' |2 m1 \9 _ L( l

cr =

4 @0 Y8 g) G- ?# X8 b# O

1.0000 0.9331 0.9599

, u) Q5 d4 a" n# I" ]

0.9331 1.0000 0.9553

8 E% R# O" g0 Z( A( o! q

0.9599 0.9553 1.0000

q3 _! f N1 R% r% N+ ~; c( P

2、数据预处理

3 e, [- h* A( S5 `) V! w, C

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

2 R9 m* y$ x1 J3 k- ^/ s4 f

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

+ T( \7 `* T6 w8 g: M8 R7 b

sum(a)

$ s( X ~1 G8 w3 M3 U" e1 J

ans = 13 NaN 13

) D! `7 O9 F, n7 \+ Q

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

8 s5 | o& V( }5 u- ~

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

1 Q$ y( M8 R+ T; H5 `- u

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

3 D: j ?$ z3 |! x' Y( p a8 l

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

# m, F: [7 |" m6 @! O1 i

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

& V2 K4 e& \0 T0 [# ~6 q

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

" p( S9 {1 S# B1 o

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

& J: U s% m" m- i7 i/ X2 b

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

; X9 M! S3 W4 A4 }+ @* H

3、回归和曲线拟合

! ~+ X5 ?+ h' U- P& f

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

8 I% a' ~4 _& A5 E3 ?, V

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

' V" r6 }2 P' e g

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

/ t) ?: g6 Q( G. ?" |" _& h* m

y=[0.5 0.82 1.14 1.25 1.35 1.40];

" E0 ~, [3 [& `9 S4 ^
/ l% G; g3 n( S

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

1 `4 r/ k% C. i8 w1 V: z

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

( F* H" z/ r7 {2 J6 ]

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

0 A! U/ C5 {8 M1 @( M6 \) c9 o; r

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

' l2 x9 u' f9 [, S: Q& f4 T

a=X1\y;

$ D7 g* r6 T5 I0 V! i

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

! V: g% _1 A# k2 e

b=X2\y;

7 c+ n; c0 b( {) k& l' q3 V

T=[0:.1:2.5];

+ X# S; x: {+ A& C* s+ H6 Y

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

/ C' y: E5 N. A* M

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

# t* d n' J5 Z: k+ ?3 s

figure(1)

9 }2 P4 a' X3 U' M* Z% \7 @

subplot(1,2,1)

; P/ u h+ K" @; C6 F0 ?1 U

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

+ ~# o n1 E; k% H# `9 v# f7 |

title(多项式回归)

' O' K, G9 u# k; W( N

subplot(1,2,2)

8 D/ o" K4 W. H7 \

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

q4 K! g; v/ z0 e* w( U# Q, W

title(指数函数回归)

5 G6 h/ k" U7 h
% ^+ U+ S5 y8 P* x% `. |7 L+ X$ K% t

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

& ^4 h4 M% O# G$ p# y

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

( q7 a1 H! o, }

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

* d1 B: |% V# H4 A9 Q, t

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

! w' l7 P' t C

采用来拟合,则有

$ i/ C0 k% e4 q

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

8 Y* N0 N7 e5 r+ Z7 Q

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

/ Z) M0 c4 V* t' G$ L

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

: f0 U3 w5 W. [* Z

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

% C* F7 @8 s/ P" r; ^; i1 H

a=X\y

9 u; h$ |! I p5 ^- D1 S

a = 0.1018 0.4844 −0.2847

# E- x) p5 ~# f, R' V. w3 K

因此数据的拟合模型为

4 h0 @+ S& L1 t( V: t$ E5 ]8 c* n

y=0.1018+0.4844x1−0.2487x2

V, Y( y$ M0 [2 M+ X. E7 ]6 e

4、傅里叶分析与FFT

8 P1 }+ p: M4 _- e! p1 X

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

) z1 |& ?% D- r. }3 t1 M, A0 E

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

\6 ` p) Q, K2 ]& O

t=0:1/119:1;

/ _' Z( P5 r9 q0 Y# E

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

( `6 N& C1 b. V' {. |

y=fft(x);

% C, t, F9 @' A5 Q% i

m=abs(y);

' L- a( I: g! ?9 a0 c

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

/ a W+ a7 \- I- F. S0 O* a& _: t

figure(1)

4 b# m$ f1 f2 g( O8 N( B

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

5 }) e( i8 I8 ]& H9 x% M

title(多频率混合信号)

! ~+ D- S3 q. \2 b

ylabel(Input \itx),xlabel(Time )

- r7 O6 p ?" b6 {; W7 w* F& m

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

+ p R4 B4 E9 Q& n

ylabel(Abs. Magnitude),grid on

: T1 Y+ W! t1 e5 l5 R2 \

xlabel(Frequency (Hertz))

2 B# [. s N$ B% x/ \ o" q
; Q( G! o) {& y; u1 j$ r

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

+ D0 }8 m2 ^( h7 r

t=0:1/199:1;

' [5 ^1 S6 K; I) }

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

8 ~" H7 E6 d; `2 W% ^

y=fft(x);

L, Z+ q6 b) X$ R: K

m=abs(y);

2 ~' J/ ~& f& C6 U% ~6 B

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

, C4 M7 X+ d! `

figure(1)

3 E# E1 L$ I+ S' ?3 M, l: U& L' d

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

5 G. d' M6 }+ w( H

title(信号检测)

4 F1 {: V q" G, Z

ylabel(Input \itx),xlabel(Time )

( X, i7 p4 ^1 B0 m7 X

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

2 e6 a; x: G H+ h9 @- M

ylabel(Abs. Magnitude),grid on

+ ]* N5 _2 c0 }! R; I; z' G3 U8 n

xlabel(Frequency (Hertz))

( }' a% n$ S5 w) W. R% T) q6 N G- G* c
$ F. j" o/ |" o' t

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

1 Y+ N9 F7 j& @: m

load sunspot.dat

* N F$ e# O+ ?! c2 O f

year=sunspot(:,1);

, M8 T" ^" ~) S0 F+ ]3 s" T

wolfer=sunspot(:,2);

) ~* u" {5 U4 f# |# v8 M m$ T2 A

figure(1)

/ W: l) D) O; ~! P7 t

subplot(2,1,1)

0 ^4 F' t. q& |9 Z% P

plot(year,wolfer)

. o3 P4 E2 T* X8 G, F M7 N

title(原始数据)

" l: d8 [1 I* u8 \& R$ ?) V

Y=fft(wolfer);

' n5 v0 M( Z1 q9 N

N=length(Y);

; o: F" o. k+ m8 L0 j0 c

Y(1)=[];

/ Z$ I A: g' I `+ g. B% i$ l7 x, I

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

" z( }0 ^: M9 l3 A6 ]) h

nyquist=1/2;

0 _+ o6 p' B+ u1 m6 \

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

0 ]" g6 Z$ d# ~8 y1 z

period=1./freq;

# L6 h, B3 j- W3 C- t

subplot(2,1,2)

& x4 P7 y- U5 R, j0 k: |

plot(period,power)

0 H h4 A) \9 s* M

title(功率谱), grid on

! Q! O# o6 Y' Z( w, Y+ B

axis([0 40 0 2e7])

" u# K' g7 `- `) l& ^2 M
, I( o% C% r; A1 r6 f

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

% J8 z. |: e& M ?4 e. F9 ~( H* Y/ U) [' V$ f( |9 n 1 r! a% ?+ Q8 C$ U3 ?- n) F1 t : H4 ?- o6 U. D I7 m 2 K$ N' j# z, Z3 ^3 z6 s8 _
回复

举报 使用道具

相关帖子

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