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

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

[复制链接]
+ f+ {2 L Y, t' t
; q0 V, l3 n8 o' d; ^( h8 d9 D

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

" ~- D1 E; Y; ?5 C& s

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

0 A6 P* |/ \" g0 H7 y9 n% t9 R' K

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

6 U. H2 V& S! D9 v J

load count.dat

- T6 b+ z1 u+ e( @

mx=max(count)

: J& a2 H$ ]( q3 Y3 i0 D( O

mx = 114 145 257

6 ^* J& L, z) r7 [

mu=mean(count)

) K2 u1 ? [4 z6 Y2 o) r* N- E1 O4 G2 y" q

mu = 32.0000 46.5417 65.5833

* ^( w& ~. l# o: x1 n

sigma=std(count)

/ D7 q. y" b/ [$ J. A$ o9 z! i

sigma = 25.3703 41.4057 68.0281

" n: E/ \+ L7 q6 Q$ N3 R! g. @

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

) L8 V" D- e: Y

[mx,indx]=min(count)

, c8 ~1 o/ Y2 r! J0 f! d8 F

mx = 7 9 7

! K/ ~: ?8 |" z4 J" W; p- f6 X

indx = 2 23 24

$ w7 {4 A! }0 S* i: P) \& }- a

1、协方差和相关系数

2 A, m' m9 Z! w. a+ p( Z8 `

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

5 R/ w' S9 |% u9 b

cv=cov(count)

. V% _5 |9 n" A6 ?. T$ z

cv = 1.0e+003 *

& I* E( i% }' w! W

0.6437 0.9802 1.6567

6 _, C% u. ]7 g

0.9802 1.7144 2.6908

+ X9 h" z* u5 Z

1.6567 2.6908 4.6278

1 S. f" X$ A8 A' W$ C: e

cr=corrcoef(count)

/ g3 I. K& d! Q! f# S

cr =

8 E" p% O3 V* ?# q4 @8 _. w

1.0000 0.9331 0.9599

- w& z2 h) _5 B3 f, `+ q; x9 a) @

0.9331 1.0000 0.9553

/ v8 y8 W2 g% p" }2 }2 P) ?1 h

0.9599 0.9553 1.0000

. y) O; L$ e) \( T! }3 N% g3 c

2、数据预处理

4 I% ^, C7 n/ u2 F9 r

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

9 C8 s& z, z; q5 l! r

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

" c- j1 M- n1 k5 {

sum(a)

; [6 H* v3 N+ [2 l! G4 D

ans = 13 NaN 13

$ W3 S, j; d# u, u: R

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

; ?3 _. [ f1 D

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

9 Q6 r9 ]/ n: y5 O9 k8 A

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

* `3 H7 k+ J7 d$ h7 ~

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

5 J4 t: B e0 h

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

5 B% R3 t* [, {9 [1 K w8 g1 Z

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

, `1 n" z0 B# O( t

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

1 \0 N2 }' A% E) a5 l! C F

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

/ b' z: g' \- d' ]

3、回归和曲线拟合

! D+ L- `. U3 k7 p

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

& o5 B# A) V {0 W- j- P; k! V& }

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

' X& N8 _9 ~8 q" U/ [

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

9 x- H" _& ^1 f% h

y=[0.5 0.82 1.14 1.25 1.35 1.40];

: i5 X+ v% T# S" H2 d/ ~
6 P: ~0 x7 w- s+ F/ M% i

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

0 V+ o7 M" e7 M1 I9 |! Y/ C% F# ]

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

0 X* A7 e, o% x

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

2 c4 f$ Q& A! R9 ^. T4 U) m# {

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

- Y2 f! P6 V5 E. C6 m

a=X1\y;

4 f% S7 Y2 [$ k7 I; K! K

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

' p9 [9 v2 A# h! [% E

b=X2\y;

$ g4 M, r7 }- _

T=[0:.1:2.5];

: ?! }2 F- I4 X# K! c

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

0 Q1 ?% U6 B0 o. T. z0 G2 p

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

) y) ^% {' k" u3 k, V

figure(1)

4 I2 |6 y" x! M5 X: D. x

subplot(1,2,1)

! ~( A! j& E) i4 Q1 _

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

' s" Q( p, j" U6 S; m! e& e

title(多项式回归)

% |, {0 e8 [' z2 a' c# P5 a& H5 t( Z; V

subplot(1,2,2)

1 g2 \1 I0 M w* m- ?$ m

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

& T2 x0 V5 _6 @% ]

title(指数函数回归)

9 I9 I& s( ~8 s" Z* @* C
! i5 L5 ?% ], S

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

$ R" v r |7 K5 o u2 p4 |5 O D& ]

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

1 G4 U6 t' C1 W1 K' g# a

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

" G/ @5 `8 H: ~' o9 [3 b

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

% s6 D5 J4 v$ e4 h' d/ g

采用来拟合,则有

$ W; F! q- N# F; T, @3 I

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

- M) ^5 [' B2 ?1 n5 E

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

: v( t) f. _4 h n

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

, q( g& X! A/ w0 O* U* V% `

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

) a. o2 T2 A& }# ~9 Z

a=X\y

+ E7 y3 R: U' e

a = 0.1018 0.4844 −0.2847

$ T. p% `# i. G+ }# ?

因此数据的拟合模型为

/ L6 m3 B4 U* z* Y- F

y=0.1018+0.4844x1−0.2487x2

! k0 u$ z; D; x; L

4、傅里叶分析与FFT

) K% s8 l4 t6 E% p

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

- B9 [9 f3 m. l- ]5 s7 E5 K3 C4 N5 t

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

% u0 p5 x [' e; j0 m+ L. F

t=0:1/119:1;

1 z. ]# @+ Z2 u4 D2 u5 _

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

8 e; v. j! x- ]2 t

y=fft(x);

2 q* j0 s1 x/ g/ X

m=abs(y);

. U" ]% H& R# v" y- r }, K

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

6 ]$ `& v% k8 T

figure(1)

" N g( g9 d I6 n* \

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

* R/ u$ b: A5 }: i' Z

title(多频率混合信号)

) ]; O/ w; m- A& v9 h9 b# N

ylabel(Input \itx),xlabel(Time )

! T `; \! ~1 N' O1 U( k

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

, E) D) f( Y( l) I5 `

ylabel(Abs. Magnitude),grid on

; m$ o( Q* ^$ ~7 P: Z

xlabel(Frequency (Hertz))

* [. F) x) P4 k% @* |0 Z
( C2 e4 u+ ?# n0 F* N: V( x

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

6 C" t, ? K1 |/ L8 {) W# o! d

t=0:1/199:1;

+ Q" o) R6 y* O1 M

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

- o' D$ n7 w9 \0 `* Q/ P' b

y=fft(x);

% p% k9 T. T7 ~

m=abs(y);

2 W' T7 t! @( q% X) ?

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

1 c3 ]& Y1 ~3 M2 Q7 M- a

figure(1)

5 j- A0 [: _# D# c4 `3 r

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

: ]% d# n# U% W5 A! n8 |/ k- v

title(信号检测)

o7 F& O# I7 f: S% ]

ylabel(Input \itx),xlabel(Time )

+ m3 v, L7 H2 V. T

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

/ y) C# G f+ I4 U

ylabel(Abs. Magnitude),grid on

2 c& L4 A# }/ j$ y6 h8 j

xlabel(Frequency (Hertz))

4 e8 c' k0 d! t% H7 k$ h+ t
$ b, n; @; i4 w6 H* x

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

" ?& a1 _ m* M5 W \

load sunspot.dat

- c3 a& ?* W- R) \$ r- u

year=sunspot(:,1);

6 ?: y( Y. h7 _1 Y- x! X

wolfer=sunspot(:,2);

# F4 c# I/ u4 W

figure(1)

' v6 P/ ?0 N! }' W; ]

subplot(2,1,1)

9 y" o0 S# i* M3 S; k

plot(year,wolfer)

" C( b! i5 Z8 k Q

title(原始数据)

p/ [5 z/ O3 X" @8 G# G+ n

Y=fft(wolfer);

! o# y- T1 o. ^, h1 ?+ o7 v! U

N=length(Y);

, B4 T1 s$ d) }. S

Y(1)=[];

) A% t. x9 X: s1 Z% B8 F

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

: i6 j. X6 U' ^( ]- u: t, V0 a

nyquist=1/2;

/ J% X/ q% b; ?* ~' e* r& Q

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

( q, |) w- q7 f7 i! l: l) B0 V* e

period=1./freq;

- ?) {# S. J; d% \" R+ D

subplot(2,1,2)

& `! u5 ^4 _2 _4 O

plot(period,power)

% q. {6 P: m% V c I

title(功率谱), grid on

/ o. M. V, E& f+ k

axis([0 40 0 2e7])

j$ W: ]$ `. N, j3 R3 a
! ~8 d& i+ t D* T# [) N! R

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

2 w. u1 J2 q. i- @ + j! B& n+ E: u5 {( q- F9 V ! p/ @3 N p, W2 C ; _ s1 g" w& j8 \, n: I$ E, I" L6 U" y; _6 S
回复

举报 使用道具

相关帖子

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