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

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

[复制链接]
4 d$ h' Q& n/ w
1 j+ V; f5 S3 Z2 V: E

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

* n7 T, T% d, S) \& @0 k

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

& O" F% g, A! q1 P9 W

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

, y3 V9 E( A* L: }9 W! h

load count.dat

. x5 z! V9 _( R- j( N. u

mx=max(count)

* l$ ~6 o3 y6 J- t8 [; p) E4 }

mx = 114 145 257

. l; ^, W4 x, e2 K6 r8 s3 m4 t

mu=mean(count)

" ]1 M. n, A3 C# o, d' e/ F

mu = 32.0000 46.5417 65.5833

{( h6 M6 T/ {& L' w

sigma=std(count)

! ]9 }( D8 ?* p( F8 q2 v+ a5 c& l

sigma = 25.3703 41.4057 68.0281

$ X3 N& q/ p( A& _

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

9 N4 ~) j$ }0 }: }3 d- `* F2 q

[mx,indx]=min(count)

- _1 c- r2 x) F* G0 k9 f, J9 w( U3 r

mx = 7 9 7

W S" K( A' e

indx = 2 23 24

* _0 Q' M* q/ l0 z0 t& R

1、协方差和相关系数

+ C/ }5 L+ q7 G( f" [5 j

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

" o$ s8 b k) q' ]7 ]

cv=cov(count)

, _2 s* x4 k3 X

cv = 1.0e+003 *

; P* A4 o' a/ n6 b

0.6437 0.9802 1.6567

i. u( {, n) V9 F

0.9802 1.7144 2.6908

6 A8 I5 Q+ w9 M4 @

1.6567 2.6908 4.6278

4 x# `4 R6 |* `

cr=corrcoef(count)

2 c3 T, x) C# \. l4 F

cr =

. R6 H1 _. q) ^ j1 `) v8 z

1.0000 0.9331 0.9599

5 R7 p0 K" M0 E. z

0.9331 1.0000 0.9553

, q+ k+ I1 `( r0 x

0.9599 0.9553 1.0000

0 G' P1 A4 j+ M

2、数据预处理

5 {$ w. ^1 ]6 N

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

+ B; P! P3 g! ^& ~! m

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

$ {: E' l4 f. n, h. e; ^/ O. r

sum(a)

0 V. v( c: f( ? D8 c+ l

ans = 13 NaN 13

5 i+ z i: w$ T5 C+ _4 }- U

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

+ ?' L7 |7 J6 W4 p. [& ^) A" y

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

9 B$ m7 f" S E% Q' K

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

; n6 d6 n3 \" j. q! e

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

2 s$ l: `4 r% z

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

. ], d0 A( t7 \6 L

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

% X; l4 F6 Y7 l& b% r2 @

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

; t) Y+ Y' R' n0 m, G/ W2 S( ]

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

( c( b( r8 i) y5 [; V

3、回归和曲线拟合

: \5 u- X8 W# j1 p' ]6 c

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

w) \# Y/ x0 Q t# b

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

' @# J2 u" T1 u) \7 W, r+ b

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

: N2 V. G, z; n* u( @* ]1 E

y=[0.5 0.82 1.14 1.25 1.35 1.40];

) A4 i v7 s! Z1 A# u' E
/ G4 |$ X0 }% q* r. l* ^; ]5 ~

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

3 }4 N5 T- g$ a$ ?# G

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

0 ^ M) T, c# M& C v

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

. M: P( l4 @2 i" K8 z% e

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

+ i, J4 K6 w4 i t6 V; x0 Y

a=X1\y;

- K' X# }: t- j' Y4 ^" `* C7 L. C4 n, I1 f

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

3 g" U: w/ C' U; h; T

b=X2\y;

9 h8 g0 G( _$ }( y

T=[0:.1:2.5];

0 _: j% D* e. P* ^+ N1 h- D

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

2 I1 }! Q. C1 U+ H$ A, b) t9 A

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

2 y' ]0 z: X7 v$ M

figure(1)

3 e3 `9 l4 X8 s1 p+ w0 c* I

subplot(1,2,1)

/ P- D5 y2 k# V; S6 i5 v

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

/ Z) p2 Y3 X2 H* `& |

title(多项式回归)

% @! D/ A( O! M6 w& a+ p

subplot(1,2,2)

$ R( }3 {' [9 u3 n

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

" j. A& V( x, N7 Q* e% Q% B

title(指数函数回归)

; Y/ `" h1 }. E
4 m& C4 \ B& }7 M( C) K

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

9 [6 q) H( u- y! G

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

9 \& i2 }# x, o s0 k+ o. k

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

( L; @) V% Z P K% P' D" q* p

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

: \! I9 O% }1 X! V2 |$ S7 F

采用来拟合,则有

. R$ g4 n# H- P4 Q

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

* f6 l7 [# X1 ?5 w( D" ?/ q

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

) b5 J' j4 H* k N7 }

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

+ l) n, w% r% A& t/ ?/ z

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

' Q6 H7 }2 Y# X( r% B9 q( {0 `

a=X\y

, n9 F6 n) b* V7 e7 E4 G

a = 0.1018 0.4844 −0.2847

3 i5 \! D, k g% ?+ s) B& A! @! ^

因此数据的拟合模型为

! M6 H6 K/ c6 W/ `5 a) H

y=0.1018+0.4844x1−0.2487x2

6 a+ B _' b, F! W

4、傅里叶分析与FFT

2 X$ S" [/ y9 H% ?& Q/ `6 Q" C

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

A' L) o0 i' w5 |/ _

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

o2 S/ F: `3 e. S! {

t=0:1/119:1;

# h+ a7 w2 q) S! B# L+ v- j

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

! ~/ i; z: G) T7 M5 v( n% ]/ E

y=fft(x);

s4 t) q4 K6 e0 F

m=abs(y);

. w" J, G; [! D( e

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

1 t+ t# F. v# K$ x

figure(1)

. i4 Y+ \ F8 m) W; d! k- N q

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

- q0 o! Z9 p6 P/ ]7 }% f

title(多频率混合信号)

' l; B" ]2 \- t; b' T6 v, Q8 q1 R1 _/ ^

ylabel(Input \itx),xlabel(Time )

& U- s( |/ v' L4 k y# R- C1 E# ~$ A

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

/ x+ X& v3 l$ U! X5 U" G

ylabel(Abs. Magnitude),grid on

9 L7 o( p. x9 V1 p$ L4 W- V. S

xlabel(Frequency (Hertz))

9 [, q* V [4 i; [ Z
! r2 y+ G! ]' F% ]

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

7 p2 b! x, E( M, u- F2 R- i

t=0:1/199:1;

* o: E0 ?. a# l

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

' N$ x5 Q- H9 b B" [( O) W

y=fft(x);

2 @6 d+ o8 [7 u; O2 H

m=abs(y);

% I+ E/ _, y3 n% y; X- w

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

/ K! N3 p6 u5 r* W) F+ ~

figure(1)

3 `) A7 n# R6 B1 g4 G: t/ N/ V: i

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

/ |1 e V; W. e( M7 q# M' T

title(信号检测)

7 F. a% }' C) \, v+ [$ N8 G* U

ylabel(Input \itx),xlabel(Time )

' P; J# t6 H6 }$ ^( p6 _

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

6 d3 j3 [% v! D1 F( [5 u

ylabel(Abs. Magnitude),grid on

9 `2 m* ^ {" F2 A

xlabel(Frequency (Hertz))

% Y* Z1 z% ^6 S5 F/ j1 @
/ Y1 ]* l" z( ~' ]& O L

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

8 O( `: T5 k9 q) ]

load sunspot.dat

9 ~, Y; G4 f0 ` d D3 W

year=sunspot(:,1);

. {9 Z7 c, _; {0 W c, P( t

wolfer=sunspot(:,2);

. K% E( [ n, q3 E

figure(1)

8 l7 }, |" w& b9 L+ R

subplot(2,1,1)

6 U/ h. S2 u I) `$ H' R% b

plot(year,wolfer)

y% ?- Z0 j# N& p7 u2 a/ b

title(原始数据)

+ A& n; @( r) I. `

Y=fft(wolfer);

' Q: j' I6 m; K7 Y) |

N=length(Y);

# ? a# B* d1 O. z( N5 W# g. |

Y(1)=[];

# F4 l) k4 Y* W8 U6 X

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

$ s6 V3 L/ P7 w1 Y4 g* \

nyquist=1/2;

! p. O( @! H2 _2 d( c

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

$ ^. E. V: V( y7 E' `9 n$ `

period=1./freq;

; _+ B+ h8 h+ Z! z; R

subplot(2,1,2)

# R' N( z8 V. |

plot(period,power)

3 _8 o- a6 j& L/ I' R, w

title(功率谱), grid on

4 y" m) B' G) d# }* r

axis([0 40 0 2e7])

* Q+ X/ Y e. R
6 M3 T- C: m! y/ _: |9 T8 H$ x

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

+ q& o1 y, S) F, w0 o, h! F8 }; B & x! I( ]! \) p- K/ ]7 b" p% e% r# v9 i) L" y$ k6 Z9 Z : ^9 F2 G; d9 O* D8 f; O
回复

举报 使用道具

相关帖子

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