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

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

[复制链接]
' T8 _, m5 e1 n' H5 D' l
/ D( g' b7 b% w/ ?4 t/ P

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

E1 y3 `' }, A5 P ?7 {8 P

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

4 D, U$ v. z' b& z1 u3 Q+ S

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

# z4 B; \. P+ C$ s+ S; t; f1 H4 S

load count.dat

/ d- y8 L/ `% Z& @

mx=max(count)

c, R% `9 U. E6 ^6 o/ s+ C

mx = 114 145 257

' I1 E( u7 f' u3 i. i2 Q5 v' N

mu=mean(count)

: i" _2 f' c% m3 |2 }, G x

mu = 32.0000 46.5417 65.5833

3 A8 f3 |4 Z5 ], j

sigma=std(count)

9 P8 Q. ?$ M m- ?+ d" |& ^

sigma = 25.3703 41.4057 68.0281

) ?3 J) T2 M+ I% `4 h

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

7 r5 |# u7 Z; t6 ^

[mx,indx]=min(count)

9 e3 v: n5 O- P" C* K+ S

mx = 7 9 7

1 ?* q0 j7 u/ w) D* J

indx = 2 23 24

f- _ n) r' K% O( r

1、协方差和相关系数

7 g7 [$ l* y2 t1 q0 n

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

3 p- x, Z9 A1 d

cv=cov(count)

- P7 c, |/ ~3 e

cv = 1.0e+003 *

: i2 t2 b+ J& I' {

0.6437 0.9802 1.6567

( w. N9 ~6 m" ?& Y! _( Y. X

0.9802 1.7144 2.6908

0 w4 g) m! W, n

1.6567 2.6908 4.6278

* i9 g: w- p( E0 G$ ]% M0 p. d

cr=corrcoef(count)

- G3 C* S$ `$ }' B8 f8 ~

cr =

4 ]! Q) ` @6 ^7 w- t; g- S/ @

1.0000 0.9331 0.9599

; T: L. t6 k% _* X8 n

0.9331 1.0000 0.9553

/ X! g+ A+ W: E8 V, z

0.9599 0.9553 1.0000

. O( e% I9 a' H+ e* b2 Y# R: T

2、数据预处理

9 T) g/ c2 h; D* u2 }& Q

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

/ E2 P+ V* c7 c' C

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

( }7 t1 x7 Y( |0 I. R4 U! L; A5 D

sum(a)

& @% S' x7 G; w" e2 Z. @4 W

ans = 13 NaN 13

3 a4 b: p k; M8 G8 C6 T

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

# p; p4 J' a0 J

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

: M3 h& N* ]* L1 r# A' f% Z

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

5 _+ k. j/ [! Z! l# M+ p8 Z

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

/ `0 R1 Y" x2 Z2 I7 N" R

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

+ z# }$ _" ~" ?1 O4 o1 P9 z& U

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

* L5 M6 K5 B$ o# K( q$ ?

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

6 V2 @' Y- t1 k* K2 V; g

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

' ~3 y+ z1 {$ H8 g, _

3、回归和曲线拟合

& u/ i o/ N, ~* l( {, }

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

& ~ [( R7 u) k

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

6 p7 u/ m, B; O7 W

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

, y1 c3 f. U* s/ i1 C, R

y=[0.5 0.82 1.14 1.25 1.35 1.40];

: f( Q$ ]( @7 h! n
8 F. j' Y9 K2 M& w g5 o

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

3 I/ L8 N* }3 w

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

. d8 E! q3 l0 K; S* g+ B

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

" X x6 }- A$ T

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

8 L* G3 v8 F+ F& e, H8 ~' R

a=X1\y;

; A l1 s% t% s: F! O. Z1 M6 { c: {/ R

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

2 n* K9 U5 _* e I# w/ {

b=X2\y;

. U& N; J3 t. ~6 p7 ]) @7 F

T=[0:.1:2.5];

+ e. U7 a+ D$ P6 Q' n4 d

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

( |/ Z C7 I9 W3 R" {

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

" I8 T+ s/ m- V$ g* }

figure(1)

6 b% ?/ A+ a8 d: p

subplot(1,2,1)

, h+ C9 Y$ [5 y4 F

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

5 c8 H" ?# q. j' l3 f: ?9 m

title(多项式回归)

5 q$ x; H5 e6 O0 Y/ E* E: z2 V

subplot(1,2,2)

9 e! O' [. G& \8 v4 O- J' d( Q

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

. y8 a: p# J, Z' D2 J! ?

title(指数函数回归)

4 S9 e. M4 X. A8 `* e
b0 n& x4 c* S* F. q$ d% T' q/ A

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

1 C8 B5 ^" }7 L% U* y+ {& f

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

! U; Q( v1 u" a! n7 \* Z, {

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

w8 |8 q6 [2 ~

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

/ t0 S1 r) W' J5 ^: X7 w. v

采用来拟合,则有

: L6 d- S4 |$ }; E' ~

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

2 h. h. m9 K1 o. p. L

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

o& E# L% `9 W* T8 i4 D' Z

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

) r: S$ F; a6 ]- _9 \' m. V, [

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

# y3 r* P V# t2 g4 S* a; `

a=X\y

; f- k* F# d% D3 t' D

a = 0.1018 0.4844 −0.2847

4 U1 W/ h5 C( x( f% C1 r

因此数据的拟合模型为

2 B! r$ d$ _) H8 T0 A9 S

y=0.1018+0.4844x1−0.2487x2

$ `+ n: t+ W( W7 H# n

4、傅里叶分析与FFT

6 \4 a( n+ `" o/ y& o( H0 i

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

, n) l5 G; q1 S- Y0 d+ k

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

" B4 M/ C) Z* U

t=0:1/119:1;

8 Y5 G6 l0 f4 V+ I3 b4 U; g9 S0 m

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

% o# }+ W5 M2 P3 k( q% `0 p

y=fft(x);

& f1 ]5 L1 e5 O2 f! G9 \0 D

m=abs(y);

! o& w2 K! k7 Z4 J

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

3 S2 p+ ^( T# O" q% P2 X0 Q

figure(1)

2 o3 r# t5 b: `2 r4 P

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

. F: g* i0 `0 J! ^# k. L/ I& p( G

title(多频率混合信号)

" J7 d# s0 x2 z. [7 Q2 G) m: Z

ylabel(Input \itx),xlabel(Time )

; |, f1 O( F( g; x0 \6 S

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

0 t& C; |, u$ h1 A

ylabel(Abs. Magnitude),grid on

2 {6 [( w% [( w; E2 w7 H: |. k

xlabel(Frequency (Hertz))

) L$ D4 W @+ j2 P1 {
! I; f- v0 l" E8 W

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

* i8 w( i2 b& a6 X( p$ o

t=0:1/199:1;

* P2 D% N- u. [9 G2 B5 l* l0 ~. O: w) ^

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

0 G; X9 [* C! k" R

y=fft(x);

% o7 H" R- T" g

m=abs(y);

& O, e- ~' s7 I" s: { r9 Q6 \

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

6 }! C* Y; H" L2 ~: w

figure(1)

/ A! ~# V; M9 c

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

- ^# P2 T6 Y9 N" E' O

title(信号检测)

) y1 I, ?; O3 X

ylabel(Input \itx),xlabel(Time )

0 L4 w' {7 a6 B0 ~

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

4 Y, C) Q) [) z7 N2 u& }

ylabel(Abs. Magnitude),grid on

/ s8 w3 L+ T Q9 j B8 B

xlabel(Frequency (Hertz))

+ ? q+ m" W5 l6 K* k! p7 o
5 L3 o4 q* T2 E+ n3 r

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

" G1 u$ L. V, K! Y

load sunspot.dat

) P' i6 z4 L8 j' x. @

year=sunspot(:,1);

% U. _7 P. `( @; F8 Q5 D( }. Z! o9 ]

wolfer=sunspot(:,2);

* k, U/ z% U7 c: }& G5 N

figure(1)

2 o; G$ ~" l3 p

subplot(2,1,1)

1 h9 O9 N+ k) u. \0 b0 M& m4 O" L

plot(year,wolfer)

6 W. q* l9 Z, t- G4 y: n( `$ }

title(原始数据)

+ n- q2 f7 |9 k3 v4 R. T

Y=fft(wolfer);

# Q( Z ]$ m/ P- I/ B. r) t$ s3 ?

N=length(Y);

0 B3 l2 s4 |1 f) R* \

Y(1)=[];

R: F% B& d' H& K+ L! D/ w

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

1 d0 x/ ^! i7 V" X; s/ T, p. Z6 ^, O

nyquist=1/2;

4 q' b" d6 P( S+ a" m$ }4 \5 N

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

' A) D9 G, P1 B! C5 A0 U! I. D9 I

period=1./freq;

( [1 _0 a- n& q. z

subplot(2,1,2)

7 M: ~3 `* l. `

plot(period,power)

. v2 W8 n. e8 _

title(功率谱), grid on

2 ?: {" |9 Q4 Z% w) x, u

axis([0 40 0 2e7])

& A& M6 Q% X( J- A5 I
% Z5 u. L0 ]" Z& j k4 O

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

' q" H, l& u2 Y1 Y2 G ( Z/ [- z2 b* C0 n; R1 a5 G2 ?: g; m / n! r' \4 C" B; ?6 I % m, X8 k" R- I, u" ?
回复

举报 使用道具

相关帖子

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