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

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

[复制链接]
. K: A- N$ H6 u2 t
4 x6 ^6 S( v" ~+ v8 j" v

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

6 \+ ^/ N, Z' \& G

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

# y* s! R* b+ D* \* u

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

4 h7 a% W0 W: Q& i

load count.dat

7 G7 W' I& q V( l# o

mx=max(count)

. `) S; T5 B# l) S

mx = 114 145 257

: k' S4 Y7 f6 o& ~5 f. F+ z

mu=mean(count)

7 P* ~5 T' b' p; h A& a5 W) o

mu = 32.0000 46.5417 65.5833

. p% K1 J+ J! B

sigma=std(count)

" V% d+ z+ R: A& Q, ~( w0 E+ K' Y

sigma = 25.3703 41.4057 68.0281

6 n- f0 c% F8 Z0 ]" u0 g, ~ b$ v4 y

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

" f4 v8 j& S% x% X, Q* s T

[mx,indx]=min(count)

1 {0 v% J! u7 u1 m4 o

mx = 7 9 7

_9 b. J+ Y& q7 y& e" y- G4 q. {

indx = 2 23 24

4 ]% S- _% T( w2 u% Q

1、协方差和相关系数

5 {5 T& {1 g N& v0 w# }5 o

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

9 j1 z$ z2 _) ^. r7 g _- M: @& K

cv=cov(count)

, Z, |& c4 B0 E# n" ^

cv = 1.0e+003 *

/ G4 @. R, m5 t- F

0.6437 0.9802 1.6567

) T( D% u0 E% |4 Z

0.9802 1.7144 2.6908

' ~2 o3 c o3 P+ c2 P

1.6567 2.6908 4.6278

# l9 D3 b# W; p: t+ \, q+ Y

cr=corrcoef(count)

0 A' D8 ]0 @, g7 s/ y; c8 h

cr =

; Q0 t3 B& }2 G: l% t5 M4 d, F

1.0000 0.9331 0.9599

' _0 n4 D- Z' L( d

0.9331 1.0000 0.9553

$ B9 g) }% U; h X2 Y! s2 [

0.9599 0.9553 1.0000

4 I' H0 C$ a8 p5 [* ^2 F. v$ e" [

2、数据预处理

. B+ G; t5 n3 H

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

( Z* F0 \; d0 e( C. q: Q$ e, w) w

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

$ P4 R1 h* ?3 s$ X6 h- K! O3 @

sum(a)

3 w4 q" o0 x% V) a! B9 V0 _! E; f+ \

ans = 13 NaN 13

; t+ k. d9 |# O1 @) L

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

* y$ r( i% a3 F# Z. N

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

6 A: a% E9 d6 \

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

* Z% _* Q' s5 W. w1 E

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

- Z1 k& @1 P/ r# d9 i- Y

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

" A( v$ [0 s8 W

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

+ [5 j7 L' W6 F: c8 i3 D. V

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

) o; s( N2 c% u8 w3 Q

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

T j7 ^, \$ z2 I( n6 {* P

3、回归和曲线拟合

! K$ _$ T; V# S3 ~

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

5 k/ p5 }, F4 E& [- V

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

/ G9 A# {* I. F

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

# D! V8 _. h) s* T% r% K( K3 r8 C0 F

y=[0.5 0.82 1.14 1.25 1.35 1.40];

% H# L8 G# G% B- v6 F( u! O9 |5 Q
8 H# D" I% o4 |( S; x& r

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

) y; F a( m' E8 u1 V: [7 p

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

% ]6 f: X7 B* M3 D1 N* c' ]7 I

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

8 g& m; C( _8 m

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

& q4 E8 c: U6 i; s

a=X1\y;

6 W3 b3 G" Z: i3 d5 c/ _$ a" _

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

- Q! V, r' C5 M5 y% `9 q" V

b=X2\y;

6 I: n) d8 f* R ~2 Q

T=[0:.1:2.5];

z6 w* C3 ? k2 x+ ?

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

. H: V; O$ x3 ~; v. F& q. ?1 N

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

# e' K" m% e- z6 T; l9 R1 @

figure(1)

1 i* |+ h7 H' y( _& \

subplot(1,2,1)

: }' u/ W0 A3 O$ e4 m

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

: }+ Z5 W' x* c. v3 `% a4 R/ o

title(多项式回归)

, p8 q$ g6 _5 i% O+ V- R( W; g

subplot(1,2,2)

' t6 l) Z3 |: {9 X" p

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

/ o* I1 x* a, z- H' T" F/ m" z

title(指数函数回归)

1 m; c) P: a! H) P$ L3 F. j, z; n' \
" e/ [( H$ e, Z1 P" Q# b

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

/ v% J9 Z" v( ]7 v5 n

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

+ J6 p* ]- P% |& Y; A

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

6 U+ y) G; m7 g& `

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

$ Z" ~. c) s: p: z! M

采用来拟合,则有

" b4 S$ S" K1 g' F

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

$ Q( |" h7 K5 Q) k B0 _ M* n

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

" s/ E7 V/ J+ j. j; l- Z1 R

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

% X5 ?2 v O1 h2 S" `. U2 b: E+ v

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

% E; b9 |0 _7 H* _: D/ {! w

a=X\y

! e& s! A6 P$ A' m

a = 0.1018 0.4844 −0.2847

* d- S G/ c, _7 e# S: | w& i0 J: @

因此数据的拟合模型为

$ I j. v8 i* R

y=0.1018+0.4844x1−0.2487x2

$ u6 b$ Z* X8 ]6 A6 e

4、傅里叶分析与FFT

* O! g% @) l, t, d6 v

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

: d8 ~+ k. F+ A. R& x) {( x6 D- F( D! m

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

6 [, q/ @& X+ r5 M0 Z/ m' z0 Q

t=0:1/119:1;

4 m$ s# H a8 t% O. f( D

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

( W( }+ I6 L: g9 @: x0 ]

y=fft(x);

2 _- t' ~, t' T# M% [0 W

m=abs(y);

( \# L! l/ C; u; |: l& A% u

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

. k9 t i3 @. _

figure(1)

7 t7 x% R! C z& f- m

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

5 R! v% Y' H1 Q3 S8 V

title(多频率混合信号)

7 b Q& K2 r9 {; X. N- y

ylabel(Input \itx),xlabel(Time )

' F/ ?( B7 t3 c! x& s

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

9 ^" m7 b. L; Q3 J' ]: n. ?" ]& q5 D: s# @

ylabel(Abs. Magnitude),grid on

: W! w! i5 _+ ^

xlabel(Frequency (Hertz))

$ u5 G6 G' ^( d7 G
) W8 O: H+ r8 }$ O$ d! ]

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

+ h4 h& ~! H- N

t=0:1/199:1;

: I/ a6 S( G8 j8 b. W0 p* `/ z

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

7 j+ ]: M' e) x. r% H4 _ S

y=fft(x);

, x% c& s u+ B* y! C5 f7 y4 w7 m

m=abs(y);

+ Y7 m* C- [8 x q

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

5 j; N* L/ H: y* f0 e

figure(1)

8 [+ M1 h, A; K. a

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

/ p$ |* s' R" v% C0 M) O' u9 g9 K. S

title(信号检测)

1 T% s, M0 h' G5 X

ylabel(Input \itx),xlabel(Time )

2 P4 ?0 P8 ^ ?$ I B

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

+ ^9 h6 D$ f" Y, d

ylabel(Abs. Magnitude),grid on

9 i, x6 f+ t% Q* j( H" a: c

xlabel(Frequency (Hertz))

+ r2 k) a; l9 d, l
9 `8 C g( ^# m6 Q8 \; E% }4 z

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

5 q0 s% W* {0 Y( |" r

load sunspot.dat

2 t9 A7 u. p" E M; x1 H

year=sunspot(:,1);

6 {/ b- u1 S9 @) K7 i

wolfer=sunspot(:,2);

# G! x1 C. f0 h# A# ?; s

figure(1)

; K. F7 `: @7 c# j5 y! j$ U

subplot(2,1,1)

; V" e# j: Y, x7 |

plot(year,wolfer)

3 k5 ~9 b& P4 p8 j/ p0 Z4 o

title(原始数据)

+ T/ w* ~# b I1 k% p: M, B) E% P

Y=fft(wolfer);

2 R* P- H t* k/ a9 y, [" K) j4 d

N=length(Y);

, m0 E* i0 n( @( h

Y(1)=[];

9 ]9 e" l" V8 N, f9 N

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

+ z3 H* F2 X7 @2 |! j& g

nyquist=1/2;

. h+ q5 T# r* P+ F

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

/ y6 r" P* e8 v. n" q, A

period=1./freq;

; V4 [& V8 o7 g& k3 z' c$ Z

subplot(2,1,2)

1 A9 ~4 Q8 W4 [/ `9 [# S

plot(period,power)

: e) j! T7 |3 b8 h8 J8 o! J2 z* \: M

title(功率谱), grid on

. U7 S1 ?4 [, M0 b4 N8 e

axis([0 40 0 2e7])

2 z+ Q+ f8 j( l4 s' b
! }' z( E/ k! ]0 _1 C

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

8 w5 p1 q5 U8 E( V8 O2 J ~" e' J# n" ?: j+ R0 ]/ u. Q; ?, x2 ~. J: k f+ I, @2 | & k1 b2 z( F) A% z 8 Z* ~/ n) ^. p1 `1 M
回复

举报 使用道具

相关帖子

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