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

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

[复制链接]
) d4 e5 E& w+ n
% b2 l0 }1 N9 n

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

* }3 R5 w9 j- d' K

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

* b' P4 b: N3 M) {

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

1 U/ `* C2 b! T, X

load count.dat

* K7 u$ e( ?! I3 _' d

mx=max(count)

9 N4 D9 _) p6 W/ w) f

mx = 114 145 257

) i5 U; Z' ^+ X- g/ [; t- ]" s

mu=mean(count)

- F9 }5 j9 G: P

mu = 32.0000 46.5417 65.5833

( w, \! L4 `7 a) A

sigma=std(count)

! W/ x; \. n; p

sigma = 25.3703 41.4057 68.0281

0 ?8 m/ L3 J- {) r" L3 K& `

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

* w& p, k- j" J8 U) M

[mx,indx]=min(count)

$ U- v1 j% H4 p& \1 V

mx = 7 9 7

4 W) u/ g4 o2 P2 L2 ?

indx = 2 23 24

% I1 b* U( D2 p# m' O: H$ m

1、协方差和相关系数

: H! @- I' D0 L3 n+ _

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

" u! F8 d2 V- E4 [) R( t/ s, Z

cv=cov(count)

, {9 w0 K6 z' m5 M& e

cv = 1.0e+003 *

4 o+ n5 @8 B$ z9 @

0.6437 0.9802 1.6567

5 p/ o# n& f( l% ~5 q9 Y6 C' b

0.9802 1.7144 2.6908

4 E" T1 g6 Q; Z

1.6567 2.6908 4.6278

8 n" S! G; T. l3 Z! l5 w7 \

cr=corrcoef(count)

A9 Y, U0 o# m! }

cr =

, x* U5 H; W, S9 p/ j% [

1.0000 0.9331 0.9599

/ c+ m$ k; F9 O; O

0.9331 1.0000 0.9553

- v. w) ]8 I; t2 X

0.9599 0.9553 1.0000

f) S8 K1 v- {5 q

2、数据预处理

; Z* G' b3 R, T! R" g$ K

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

" M- Y2 q. c0 z! g

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

. J8 _& D, \& c9 X5 V% v) U

sum(a)

' J, w. G: A$ ~6 Q4 k! t

ans = 13 NaN 13

2 R, ^/ d* `4 m8 O5 Y& \7 l

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

( {5 i" c$ i7 j7 u) K

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

$ {& D1 c) |. V, M, l5 q

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

; ?% \4 F* m5 n1 q% s) ?

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

# c+ c+ r! D. M5 |7 s' V% N

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

" C' _! T3 h2 l; ?* x1 [6 d4 t

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

: `; b! _; v, b) U, x5 {" ]% a/ g

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

5 L' E1 N9 E# S# l* T

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

2 d5 S; `, R G( c

3、回归和曲线拟合

6 [! o6 H6 [; o% j/ A! }( Q

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

2 J' T# p% Y8 D; ]# X: z5 S% J6 s1 U( K

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

: `! ~2 E6 z3 ?% F1 k

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

# i3 U9 Q5 B) {' x, [

y=[0.5 0.82 1.14 1.25 1.35 1.40];

! x- y% W2 M9 D9 q$ h" T
3 A0 O8 {2 o7 A9 x5 |

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

* w" V; U" G4 W7 t4 _

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

2 p3 L! A+ n2 K; M& c9 z

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

3 P$ t5 O# @5 Y% I9 m% w

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

+ J: I0 ^ y0 r/ B+ Z5 i3 ^

a=X1\y;

7 C' N# k8 \0 T8 W/ K$ F

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

' c. @/ d l. I/ Z/ |

b=X2\y;

4 T1 ?: V4 Z h

T=[0:.1:2.5];

+ E$ x0 Q5 t' |! U

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

6 M. |1 [4 U' k4 S) D" r8 F

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

! [0 r* W- E! Q! x; I% C

figure(1)

% X$ j1 l4 H0 Q& o8 j

subplot(1,2,1)

: ~3 m3 ]. B2 U; m5 Z0 _

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

4 l- L6 U+ [" I d

title(多项式回归)

# N) w! m2 B$ j' b, `/ n) s% n( M

subplot(1,2,2)

1 e2 b, D0 G5 ]4 P( L; {

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

% _8 o- P5 k( ~

title(指数函数回归)

) W" W' h5 p: S+ Y
' {& s; o* ]; M

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

( f; q' p5 p: A, h4 Q7 B

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

& F# T# t/ M& {) g! l& P- y2 P

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

& A/ F3 q' y( X/ A( [. J

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

& ?( R) E8 |) L- @' |& [

采用来拟合,则有

! K& d4 h' o! z6 f) O2 E8 z, T3 |$ f' z

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

! @% ^ @* O. ?# Y3 D) _2 t: I' u

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

& i) x) |. f( U8 a- K8 W

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

( O8 T y3 t- K) k" L) p4 X

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

5 @0 a$ }# t; b. W9 `

a=X\y

0 |2 B8 }+ g, Z# l1 f+ J, a

a = 0.1018 0.4844 −0.2847

" H& `! x$ F+ g! G

因此数据的拟合模型为

: f) o* v+ p- P7 [

y=0.1018+0.4844x1−0.2487x2

9 L; |6 s. ?7 j# `

4、傅里叶分析与FFT

7 y: ?9 {( P# }9 Q

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

$ r0 ^! a4 b7 o2 `6 F" [- W1 B5 H

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

T/ l' b I0 p

t=0:1/119:1;

3 Z0 H% q2 d, Z% X1 }. O8 J

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

+ K7 A8 i7 h, j$ v' G1 B$ T; j

y=fft(x);

( c% ]; v( \- `. J6 C; |& ~$ _

m=abs(y);

: P9 V9 ]' |6 ?4 ~" [

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

: h) A6 `, x8 n c

figure(1)

$ c u# c# ]" `* x& R

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

7 i9 O" H7 Z7 ]: M

title(多频率混合信号)

% Y! q G4 l: F& j3 j; @. v0 D1 M* S

ylabel(Input \itx),xlabel(Time )

: Z- u; G2 f8 I1 K

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

. @( l3 M1 d1 Y6 t, q" R6 f" x

ylabel(Abs. Magnitude),grid on

8 I" l4 T" W4 H6 i/ m+ h

xlabel(Frequency (Hertz))

8 E" M1 {3 x: N' x& g
2 D$ P- T3 ^- d' ?* a, S& k! w

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

$ n5 l& y, g- W6 }% [+ z

t=0:1/199:1;

, _# M* ?+ l) F* ^4 A% G8 l! A# Q$ m

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

2 J( k5 v+ v' _# G( U

y=fft(x);

3 N7 y8 @2 t- d/ B

m=abs(y);

( Y m+ o4 |. b+ I% t( L: S0 x

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

$ `7 v4 F& j; i! L, \

figure(1)

0 o! e: j! f5 x) u3 r% c) Z

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

; X! T. E c9 w/ [3 }

title(信号检测)

" X5 n) \; [3 X" i- }# Y1 _3 X8 w

ylabel(Input \itx),xlabel(Time )

$ a0 r1 L. k1 Y8 f& p+ u- \

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

3 I/ ?1 ^' W# |6 H5 |' Q0 R

ylabel(Abs. Magnitude),grid on

9 [( }1 C+ O; O- m* Z3 w

xlabel(Frequency (Hertz))

: w+ o+ B! k9 n9 l3 K
! `# V: z( A* G) W! \& j. D

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

% j; r+ }) d, ]4 X9 X

load sunspot.dat

2 b( s4 T/ T( [1 }* ~, ]# k" P

year=sunspot(:,1);

1 [2 u- \* N1 }' `+ A- x# G4 u

wolfer=sunspot(:,2);

' _. w: A: h3 j# M; ]% J

figure(1)

2 W ^) L n: f; D

subplot(2,1,1)

/ M* Z; ^$ E# Z# H, b

plot(year,wolfer)

, { K; S4 U2 _- e9 B& ~

title(原始数据)

5 N- P9 f& x }+ z1 j

Y=fft(wolfer);

) G! g% p' a' L- r$ r

N=length(Y);

9 }5 ?2 f* n, B( b, P

Y(1)=[];

/ E/ [0 P6 k, I: ~: m

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

% g6 M# g. Z5 i1 Z5 @1 {' y9 b

nyquist=1/2;

6 \- D# @+ S; R1 `4 p' @2 L# T

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

; R4 a1 r3 _: `. a, D# I

period=1./freq;

$ Z) d& F) @* F8 w: x& x

subplot(2,1,2)

e/ q1 }/ \7 F; ]0 j

plot(period,power)

3 r# H% F$ x1 r3 k' h- R9 `# i

title(功率谱), grid on

" j: D$ G1 D: ^3 g8 [7 v

axis([0 40 0 2e7])

7 l' ]+ s8 l, M* ~ y# A" v
# c) _( I ^0 N2 P G; ]; N$ w

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

6 @8 N g/ Z9 t( `( Q6 T& m ' z r% ]4 o! T$ D) g ; S( ^1 n ]1 t6 F+ g3 D5 p6 |: r9 U# @/ b 2 k& g+ {+ K% B9 C4 Y6 w9 q3 }% f" e
回复

举报 使用道具

相关帖子

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