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

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

[复制链接]
! H0 I: g9 E) h
3 j% d! x1 `4 x# z! N% L# e

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

# k( n3 Q) F3 G2 L) J

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

' m/ X, Y+ Y6 C# ~: C3 D3 y

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

* ~3 } O' D6 K. ~( W' `

load count.dat

9 h% X! G z3 B: v$ r7 `7 p* Y

mx=max(count)

( L) i5 `( h* g3 M) A+ q6 _/ e

mx = 114 145 257

: i" T$ `$ U' X- F! y

mu=mean(count)

: K" e/ ]) c b& H

mu = 32.0000 46.5417 65.5833

+ R1 @) D7 Z3 B$ Y/ y8 Q

sigma=std(count)

) P8 L7 X3 ?4 W% ^( I+ ~! f2 W6 i& y

sigma = 25.3703 41.4057 68.0281

) v. q' C2 \& i% x; B5 d. F6 o

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

+ n/ I, R) w" Y' D0 B

[mx,indx]=min(count)

4 Y( `, p C: [9 D2 f) n5 f

mx = 7 9 7

- |3 r$ k0 y% K$ d! A0 M0 b

indx = 2 23 24

( V# b q- A! p% O* Y

1、协方差和相关系数

( d7 F. Q; }7 f: x2 z( G

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

- I2 ^4 X8 Z) z) N

cv=cov(count)

( G& b, U6 w, |

cv = 1.0e+003 *

: D; J/ l2 B% ~& H

0.6437 0.9802 1.6567

7 p+ b7 c" k1 N- W: Z+ d

0.9802 1.7144 2.6908

1 D( O# D; Y/ G: N

1.6567 2.6908 4.6278

: J4 T1 ?3 b5 G/ K5 h

cr=corrcoef(count)

0 w; K, u3 P' d& ~; q2 _, Q. m p

cr =

' \6 |& ]! T* ]( P' r

1.0000 0.9331 0.9599

: s+ J( l I; p3 w$ a% @7 {+ W

0.9331 1.0000 0.9553

9 t- W( X& ^( O) D; I4 S3 w

0.9599 0.9553 1.0000

% W- p5 R2 m- E

2、数据预处理

* g! M/ h5 a, u( e: U; V

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

+ x; ?! W/ ]; I

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

- ] e4 E3 `. t

sum(a)

e0 L1 Z+ p# @* ]) e. J) k

ans = 13 NaN 13

8 k! ^+ D$ A. P/ R

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

# o& M' v) I+ t9 n. S/ y T% Y+ ^

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

5 n6 v" O" [' M2 Y7 y

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

1 @$ I. M2 x4 [: A- W5 m8 c6 E

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

% ]1 S2 N3 [6 ~! e! T& C

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

8 {+ f, R/ |$ m [9 A) m

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

* `% `4 ?' E0 }+ c5 p

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

% z b: g$ H& P0 c' Z

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

+ g( e! I( M5 l) `! A* M+ l/ _; n& t; w

3、回归和曲线拟合

8 `: ]9 T8 M0 {* [8 _

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

9 H1 _ f+ X- B I$ Q

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

; v2 `0 ^3 Y- T Y

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

7 V7 g* A; M7 \1 Z% x$ p+ w% X

y=[0.5 0.82 1.14 1.25 1.35 1.40];

9 J. g6 c: E! A6 m7 A% z
. u& H/ A$ r6 D. x; g- f: O

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

1 R, f& C5 ~/ D2 W

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

# k( d" `& i: `" }/ `& z

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

5 B: k3 [: B6 g2 Z: r( i0 d6 k' y

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

! ]& j- J$ ^* l/ S% e

a=X1\y;

! | }7 Y) u$ M9 B( i

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

9 a2 B+ Q5 j4 D* C7 K1 G

b=X2\y;

1 I5 f/ H" k/ i

T=[0:.1:2.5];

7 ~& O, A" ^$ P5 n0 B

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

; l: B; @) M' X5 t

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

9 I+ I* S. h- H4 L6 f

figure(1)

1 Y* g1 W5 L. o+ C/ ^) n9 Y, b

subplot(1,2,1)

1 F2 W A6 `; h: d3 Q, f

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

) |5 R, a7 p& q. b/ h( E F; }

title(多项式回归)

: u% T3 W! p/ D* N. R

subplot(1,2,2)

. k) J4 m; n7 j4 s. l

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

' A8 ]" v1 v# C

title(指数函数回归)

- ^3 ^9 P1 T: N$ w" \' F9 L- J
% ?. v8 ^: f( b+ { c/ t6 L

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

: b" R9 t! h1 X: w$ g, Q( t1 x5 Q

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

N) v4 h H& M

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

: s# a5 ~, G" P s% n7 K1 W

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

# T1 e8 M P! O9 Z2 b) f6 R' A& p

采用来拟合,则有

# g X; o8 O+ C

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

6 u$ n( R% ~6 ?. X

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

5 n5 g- F/ V# N; X$ f

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

0 m- b( D6 u& y5 J( E

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

i: o8 d6 e9 W. b* f2 ^( `

a=X\y

7 c7 M+ O# ?8 `3 S

a = 0.1018 0.4844 −0.2847

8 U2 y% R! a, l/ ]

因此数据的拟合模型为

' @- o5 i0 P* S2 V

y=0.1018+0.4844x1−0.2487x2

- J. h) }- P. k& u4 D' R; ^6 ?

4、傅里叶分析与FFT

" e* l0 w, r/ t

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

# h) w7 v2 R+ D( D9 [+ g% [

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

1 P* J: X: I: D2 ~

t=0:1/119:1;

* P7 ]& z# ]' P7 C" e

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

4 c2 K3 F. X" ~" X% D

y=fft(x);

" P# X1 |! d. C& K! R. @3 Q7 }

m=abs(y);

* g3 ]* X" f1 V' s

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

j7 R0 i8 e! W% j' B7 |7 o# D7 z4 o: }9 `

figure(1)

- L! E( H& P+ [# h1 w

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

1 Y# O1 Y; H. u8 _% y# O

title(多频率混合信号)

. P) e) }- S/ q1 Z8 ]# `

ylabel(Input \itx),xlabel(Time )

' T5 |: S0 a5 \. z: D" n; V y

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

: z$ `4 b5 Y, L: L. g# a0 E

ylabel(Abs. Magnitude),grid on

5 k0 ?) k9 _$ W- x4 v

xlabel(Frequency (Hertz))

6 F# i. Y# l; t
, c5 `1 _6 X: o% O4 j* f& T# Q' P& i

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

8 T: K; g6 t) q! `- [- m& K

t=0:1/199:1;

) y. r3 X2 s/ x' C; U, c: J% O

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

" i$ n+ d# D( r' D; V; ~" Y, Y

y=fft(x);

) L' S1 I% F0 O, }

m=abs(y);

- c( R$ H# H/ g) z/ v, v: e

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

# w6 X8 C% j( R& _

figure(1)

) a, E; d$ C8 n

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

' K: K" M+ _( G* M

title(信号检测)

% V6 D) D7 d! z* q1 F$ X

ylabel(Input \itx),xlabel(Time )

: g2 C! K& O, F- i

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

3 j8 {$ } M( j; V% [

ylabel(Abs. Magnitude),grid on

" ]4 W" [' D4 @0 z. M# |

xlabel(Frequency (Hertz))

. Z u/ h/ Y( x! Z0 ^
d! Z1 B3 W, j8 m& m

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

' _/ O+ d8 ?! I; `) Y$ m+ ?

load sunspot.dat

7 I3 }" K0 P& [/ h6 d$ d7 q7 H

year=sunspot(:,1);

( \ Z4 d! I- P8 w$ ?7 m& o6 W

wolfer=sunspot(:,2);

$ J& D& P/ i4 o

figure(1)

" G8 }% _2 D9 F: n0 O

subplot(2,1,1)

1 s+ t* y, Z5 L# w

plot(year,wolfer)

' u# S$ i/ [ f) A& W+ z: M6 S5 L

title(原始数据)

' d0 f; W$ ^8 ]+ q; y3 W' R3 S

Y=fft(wolfer);

- w, I/ x" f$ ?# s5 @$ f# V0 X! G

N=length(Y);

4 b5 h3 V! }. Y* x2 B0 x6 y. \7 I

Y(1)=[];

) N6 ?! e7 T6 M- a

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

( T2 n! x7 ]3 W. p0 s, U

nyquist=1/2;

( r0 t& `' H \3 \% y& @3 Z

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

/ o* K9 d0 F$ ^4 M7 ~4 e1 r1 Q

period=1./freq;

" g! v: K5 X# Q5 E

subplot(2,1,2)

- a( J6 K$ r1 q$ X4 u

plot(period,power)

" f) J! `( v# ^, `2 Q1 k" m1 X! a

title(功率谱), grid on

- u/ q) i: W% Y7 H: J' \, |5 W

axis([0 40 0 2e7])

+ P* _& ~; k% R1 f
) e+ n4 O$ J, A: q% O) x

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

' ^# b% n$ O# G4 c I - R4 U6 F1 f8 D; ] % b& H4 a9 U9 W; Q- J5 \# Z; y! l - m. B& V' D1 k& Q- A- t" ?
回复

举报 使用道具

相关帖子

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