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

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

[复制链接]
( @# O3 T0 J: g( r) [4 Q" H
6 g% S- [2 B" L0 y4 l% p' w

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

7 @* z( T, ~' g8 B

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

& m% J+ f, f0 |8 O4 s3 z

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

0 g- f" X3 u: h9 t0 @3 e+ G

load count.dat

6 M# C+ v2 c# c- _7 N; [

mx=max(count)

0 u# P( J( m% p& k

mx = 114 145 257

$ }/ {: _) K; x; C0 e% ]! A

mu=mean(count)

# T- C% m- }0 t) o

mu = 32.0000 46.5417 65.5833

. S6 {% Y2 T. |" [) `; R# r

sigma=std(count)

1 l! P" z+ h8 [

sigma = 25.3703 41.4057 68.0281

% f0 T5 }: L* E& F

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

; |+ l" H& E4 f% M1 J

[mx,indx]=min(count)

) D- N3 c( T. o1 G5 U* f9 a. j

mx = 7 9 7

5 T9 \; I% d, J* l f

indx = 2 23 24

7 \* L$ M N9 v' L# M5 ~

1、协方差和相关系数

$ H0 u0 G2 _; R

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

2 K( y$ m/ ^4 t: Z" Q8 z2 H

cv=cov(count)

8 D7 H: {2 y; L7 o( d

cv = 1.0e+003 *

( P" h+ c. j9 g! A) E4 M5 N

0.6437 0.9802 1.6567

/ c8 k7 p. b4 B# W# B! ^) j

0.9802 1.7144 2.6908

! d9 W0 w- {. C2 t8 X

1.6567 2.6908 4.6278

/ |) o9 r1 L& K

cr=corrcoef(count)

. d! N+ m: c9 t+ g! S0 w3 s0 B8 V

cr =

- |, P8 R- F% H3 \3 D8 O' ~6 J

1.0000 0.9331 0.9599

! H$ k4 L, s2 W- I: {, K# s& D

0.9331 1.0000 0.9553

! q4 H4 }. J# ^6 j! F# A) y

0.9599 0.9553 1.0000

6 C/ W" C! ], c; ^- \9 K( _+ o

2、数据预处理

3 B ?) H9 M1 t( j

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

) f- m. Q5 X. P. E

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

; C0 R: X0 v! q" V' a5 {9 F6 P( c* X

sum(a)

- y/ X. S4 O2 _+ F/ y# y) F

ans = 13 NaN 13

6 L, |9 C) B' D d" T" B

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

: x% \! s; b( _; e& ]; o

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

" E% s# V! }6 r) `& V: N

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

6 m2 \* ]" Z l _

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

: N6 b% u- D/ A# o3 o

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

. s& y: ~# V: R2 I6 R% T

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

+ |9 \5 A& G+ X l6 B8 C# X1 Z" i* F

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

1 U7 d. Y! X8 V( `

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

* ~8 _1 ~ V s( j2 j) P

3、回归和曲线拟合

7 q& ?" E: d* D, d1 y

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

9 q' z2 e, n9 C9 s8 Q1 V

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

: w7 R1 R1 R5 U8 |7 [

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

_7 e7 H# R9 N" I5 [; _$ y7 f

y=[0.5 0.82 1.14 1.25 1.35 1.40];

; a# u1 S) b$ u- B1 z3 S
/ O3 W7 d4 i1 Q: q2 X+ n4 g3 ]5 X

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

: r3 T2 D7 j+ Z8 Q$ G% @ A$ @

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

( Y: A% ~( K4 h5 A

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

1 y) |4 T0 ^: e2 R3 {8 q% g

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

6 T% u. {4 y5 |& l

a=X1\y;

: C' A- q$ f9 a& w; o6 ~

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

$ s0 p7 N- T$ P* ^; c; X- U n, e- G

b=X2\y;

& j/ g4 t. Y, ^, ?) ?$ \$ Z3 J

T=[0:.1:2.5];

2 q: j p) w0 W; u; }! f }" u

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

9 [) [0 ?9 s! h& _0 k4 w

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

, q/ b/ H- y8 ]5 M4 ~; |$ U

figure(1)

" ~: m4 I2 w2 N9 ], ~2 c

subplot(1,2,1)

3 {' x8 G- E! x7 W6 C

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

8 ?# t; f, F. q6 K+ ]

title(多项式回归)

# n6 S% K4 p2 W; {# {; ^7 U

subplot(1,2,2)

9 {! z$ u8 @, c3 t( u6 p/ u, e

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

t0 {4 @8 H( N8 ]6 w. z

title(指数函数回归)

5 L5 v: o1 Z/ e, ]3 j! L6 c2 `1 U
( N% X; D3 S. _; L3 k! Z1 k s

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

' e) U3 v9 L$ x) g

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

( K5 d3 I6 v2 e8 i

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

! P, W0 S8 s: } B. d# O

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

" c# [0 K9 C* \/ M, K

采用来拟合,则有

" {' C- f' I* o `. v

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

: \/ s: b6 n% P; n

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

* @( X: `# F, r3 n; Q& ^& ~& q

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

1 L+ X: a, S1 ~; J

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

3 _# T; F! _. N: [; K. b$ T# c

a=X\y

$ I @3 U! m( I% G

a = 0.1018 0.4844 −0.2847

% u6 `$ V7 r; H# N9 C" g

因此数据的拟合模型为

0 W9 S% y: U* O7 K' C" ^. Z9 X9 |

y=0.1018+0.4844x1−0.2487x2

) ?) ?: s! K0 u7 f

4、傅里叶分析与FFT

, A' o# o. Z4 a$ B3 @3 o: y

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

. q& ]1 X, z( _. ^ f

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

5 B3 q3 s0 y+ e$ s7 g

t=0:1/119:1;

/ F* `( d; f# s3 x7 }

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

$ w7 c3 B' X4 a/ w0 c K& n- ?0 H

y=fft(x);

0 {# j4 g0 E' E8 W5 c q, ~

m=abs(y);

6 e' S4 j3 B$ y4 @. C" {/ ^

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

+ W; K* _$ [1 [& U

figure(1)

" g a# A7 w+ u; A

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

0 X/ l( E6 s* E5 o# x

title(多频率混合信号)

1 s6 f5 Q3 L" L9 m7 F% A% B7 H

ylabel(Input \itx),xlabel(Time )

) K& P' m7 R9 Z% z+ Q, z

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

" r2 G6 b* D/ ?& j

ylabel(Abs. Magnitude),grid on

/ J) j4 W$ R! @6 H' \* n+ g3 z

xlabel(Frequency (Hertz))

4 P0 C# g' P% {. S
1 ~7 z) d- Q' l' s* S' X& H1 j

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

8 S. L: I* H- R

t=0:1/199:1;

1 l5 Z8 T/ I' q6 i5 g

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

7 ?! d6 O- b+ Z U `" Y

y=fft(x);

# n8 \- w$ z. J4 C! X1 c

m=abs(y);

; b( H; u$ W& z h

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

) B* _$ U/ _7 t% Q# m+ h$ B

figure(1)

. Y) b# H) z+ }: o; E2 B3 ^2 ^

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

# C$ i$ [- `: a! O M

title(信号检测)

+ a' X3 F9 K# f, ]- s$ ]

ylabel(Input \itx),xlabel(Time )

P' ~: O% }+ W. b' M. E

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

& a# g' P# y6 |

ylabel(Abs. Magnitude),grid on

! ?2 f' S# i6 u; ^+ w

xlabel(Frequency (Hertz))

$ C, a2 a3 n/ i- U ~
# O& w3 R0 H3 L0 t

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

/ `' z. _- ~. d

load sunspot.dat

0 v! h P; R% i/ v, Y2 q# G

year=sunspot(:,1);

x, p1 X2 r+ g

wolfer=sunspot(:,2);

3 k; \' l: Q' I3 h+ M% R

figure(1)

: d. B& U6 y( c4 _

subplot(2,1,1)

+ C0 @/ R, S) _7 ^/ g

plot(year,wolfer)

7 U1 @1 C9 `5 J9 E4 m$ n9 T

title(原始数据)

! b7 S0 H* r2 }' O" h/ P! @/ Y/ H

Y=fft(wolfer);

2 F* Q+ T: ^+ C, Y1 M. Q6 X

N=length(Y);

9 E5 U! O9 c# d+ q. l1 u

Y(1)=[];

% H; @7 b2 P" \) r& b9 g0 Y

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

" z3 l% k) W: ~, M

nyquist=1/2;

$ T' @ v% K: Z

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

7 D7 [/ f8 f) ^# ~

period=1./freq;

( j1 d) @5 @# l% L. }" w; H- `! u

subplot(2,1,2)

4 t r2 P* u3 {8 x8 e8 k7 q9 p, x! ]1 }

plot(period,power)

2 ? H6 T ^% r

title(功率谱), grid on

( A- L3 a$ L4 Q. e* |1 x

axis([0 40 0 2e7])

) ~: {) ?- _. T0 T- Q. d
& |2 o. i# ~3 {9 {

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

' r( Z3 e, m, @( R6 _' w9 q9 q7 ~5 A: Z 1 T% }# H* K2 x0 [! }9 u" _( b. j1 v" Q1 Q( J5 @ 5 y$ t6 u$ x: C$ D3 j
回复

举报 使用道具

相关帖子

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