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

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

[复制链接]
1 Y4 \0 ^, `4 O; h* P0 E
4 n$ G2 K# k$ \! u& T

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

. z2 E) B: N6 C5 L

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

2 F _1 o% ~: d; L* H: d0 S

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

$ D% O: x. d8 J, }& f/ V! v( Y

load count.dat

* \3 v" |9 K8 U3 Z( F- I

mx=max(count)

$ [9 D; n7 _! W0 v

mx = 114 145 257

' a$ I1 p, C3 K4 B/ e5 N1 I) E, j

mu=mean(count)

2 a) \; v5 v* `6 p

mu = 32.0000 46.5417 65.5833

5 Y0 |* }9 A( A/ J6 b2 T

sigma=std(count)

. J; _( d. {3 @ l2 ~$ P

sigma = 25.3703 41.4057 68.0281

9 e8 A, U1 u4 u I& X0 @) J

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

# b, ^$ G# ~( e4 ~

[mx,indx]=min(count)

1 ?! w; K. C5 |( u$ @

mx = 7 9 7

) ]$ p6 v4 n# S- I: ` {

indx = 2 23 24

/ D$ Y: O- M% |+ `8 _* L9 I: j

1、协方差和相关系数

2 Q8 [' ^' }4 y u1 I

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

* i3 t5 d3 M/ Y( M

cv=cov(count)

# Z% H% C2 x- t; n! E5 J

cv = 1.0e+003 *

0 U+ ]. I" J2 L( y4 ^2 b

0.6437 0.9802 1.6567

1 m: W0 i* o/ h8 }' P* T

0.9802 1.7144 2.6908

) c% w1 k2 X+ P, _( t

1.6567 2.6908 4.6278

! n. j- k2 l% f; F) x! D a

cr=corrcoef(count)

8 b) j {# ?6 R# O- f* l- L, P

cr =

& c2 Q9 V2 ]2 L4 K9 N! @8 \' w. e

1.0000 0.9331 0.9599

* l8 N. p/ l" R1 v

0.9331 1.0000 0.9553

, R8 ], O8 q' j( K1 t

0.9599 0.9553 1.0000

% t4 }3 B$ K' e" `3 n9 y

2、数据预处理

0 l$ C! A/ ^7 L. [" v

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

7 I. v- \ w+ f! |

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

. [7 s( Z+ I" j* L. J. i Q! `% y

sum(a)

& Q+ |8 J! y& O

ans = 13 NaN 13

9 ^+ i( ]& `# M& }7 ]) o$ B, {

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

* n8 K q* I2 f1 O9 s

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

$ B+ J! Z- f/ U9 Y3 J2 {2 F- b

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

: b3 H$ t o5 }' [/ j

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

8 J7 V) H- V" A4 M, G. x6 L

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

! h- H( V! Z% L1 B* P+ f- {& o4 Q

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

+ e+ `# z$ D1 X

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

# h7 O: ~' O) V' W/ ^( W3 O

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

! _: i0 o$ g4 `4 o4 _

3、回归和曲线拟合

+ l9 `0 W' ]& N' n

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

" p( Z: R" [: ?0 E' A

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

a$ ?6 J$ S. X

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

7 s9 \2 x# T$ T

y=[0.5 0.82 1.14 1.25 1.35 1.40];

' p8 c; @8 [5 {& d7 X6 \6 e
. {% ~! {! p0 V1 }! `6 n

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

& g4 k; b+ N8 d) F- J/ g

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

: p0 ~; F1 Z& h2 `, R

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

* q; |7 J1 y3 Q+ e) R9 S, H

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

" p7 s4 P, `& X: b& V/ a2 h

a=X1\y;

* M& _! f7 e8 t5 {8 O% P

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

4 H9 \0 _" T$ b- J

b=X2\y;

% D- b9 Q4 S, ] n

T=[0:.1:2.5];

- \$ I+ C* C9 l, B ]7 T

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

9 k0 G# H- T. s/ n7 l# H9 Z

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

9 z+ u) ^0 R- L8 G5 {' t+ N

figure(1)

) i R2 m, L& ] l$ P

subplot(1,2,1)

) r5 D/ [ F1 R L: r- R

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

# X8 \1 n5 F, O5 _# i$ [

title(多项式回归)

! @0 S2 k9 n( M1 |! i2 {9 w

subplot(1,2,2)

3 m1 e8 Q" h/ A- V5 i

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

! \8 X' l8 ]7 L! z

title(指数函数回归)

- @1 m# g1 o/ u) J" L
3 R2 E" K v! [

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

. Z0 |6 Q7 b5 k7 a* N+ G7 ]# [

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

' u# [, s5 b8 h1 X8 \" Y9 T, u6 g

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

! v: h9 D: M5 w; |4 i; u

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

- o: K. s$ X8 p% g# p3 S

采用来拟合,则有

. h' J9 z% v( B: S1 N

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

! I8 m# L/ j3 w( j1 i4 x& P$ @

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

9 X5 h9 B! D, P4 s- s1 y7 Z

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

F& h) E+ M# E' P6 b

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

6 w2 j, S. J @9 H1 G

a=X\y

! _. \9 m" k$ L2 u

a = 0.1018 0.4844 −0.2847

9 h6 Y; O x; @1 `, |. l8 e! O

因此数据的拟合模型为

$ c% i: \. H2 O) Z! h- p

y=0.1018+0.4844x1−0.2487x2

* U2 j k* F: S1 v0 |/ @' V- H7 F

4、傅里叶分析与FFT

D, z* ]. V7 m2 N% p0 W" @

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

' a7 {5 W+ D' t E6 e$ k

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

\9 A) F& I- G. I9 u1 u* S

t=0:1/119:1;

; k* C: E( y/ A$ u% q2 `9 ^6 Y' T

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

5 z& \! b/ E9 p+ s: i7 v

y=fft(x);

( Y& S, C9 c: R" I# f2 W

m=abs(y);

& u" C8 |& L* h. y

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

4 \; T/ l0 |7 y5 ^* B: Y

figure(1)

0 z) _4 j; J {3 O9 o5 L+ ?/ m3 z X

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

3 S# N- ]/ G: j [1 }$ L. i

title(多频率混合信号)

t1 D2 |% A1 {6 V

ylabel(Input \itx),xlabel(Time )

; @* B7 o1 k4 k8 R- H4 C3 ~6 O

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

4 r, V; t2 u! ], G

ylabel(Abs. Magnitude),grid on

7 m9 t4 J' y f; @ V2 R

xlabel(Frequency (Hertz))

6 } a* h6 u+ R( M, D: a
7 _ ^ _: r* }

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

% D9 F5 b, d1 P% k! Q7 Z) m7 a

t=0:1/199:1;

( }! K1 Y( R6 q6 |0 K2 [, m9 T

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

$ D+ [6 e' m0 T

y=fft(x);

, e3 v& \; L. A* f' {) J+ f

m=abs(y);

! b* x' R) ~+ \( r N. `! l

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

5 r, j7 o! _2 Z2 A7 b

figure(1)

6 Z# X! X+ |' d3 u; Y( L }

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

. H4 k) `+ v) A8 `' V9 K9 E

title(信号检测)

% Q' c/ _/ C1 D: c5 {) D

ylabel(Input \itx),xlabel(Time )

( D" Z1 x7 i( m/ _% N9 X0 |

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

9 E: n. h4 N. w( H+ M) B0 ?6 p$ f, z/ k

ylabel(Abs. Magnitude),grid on

" h# u+ s+ _( c/ Z

xlabel(Frequency (Hertz))

. H) A% v4 G6 i7 S% @* L" T$ c
3 h5 W/ ?3 ?: g2 \

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

2 i' _) I# l8 G& h

load sunspot.dat

1 b- M/ ^* t' l7 F$ U# |' J

year=sunspot(:,1);

1 ]+ ]( q/ K8 M- q5 J8 v/ U# n

wolfer=sunspot(:,2);

9 ~. K8 Y6 _8 V) h; L' d! k5 N- o: S

figure(1)

% `% w0 @; v% j

subplot(2,1,1)

/ ]/ ], D% {0 {

plot(year,wolfer)

( e8 q: g) |( Y8 p2 I( Y" g

title(原始数据)

# c& L; m4 |6 D0 ~0 y; Y0 q, n

Y=fft(wolfer);

6 r& ?1 k9 @% W. z6 v) a2 J

N=length(Y);

r7 r8 {) d6 Z& x- X

Y(1)=[];

! p5 w, K" A8 j, N! V( ~& w

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

4 m5 P: [& o0 U+ X. V1 {5 X

nyquist=1/2;

, r8 |0 _6 ? z5 f: e: x. T

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

; z' i) _+ W" ?

period=1./freq;

+ v% c+ b4 T5 r& s2 ^2 J/ a/ W' x7 n

subplot(2,1,2)

! l! R, p/ r- A

plot(period,power)

5 G0 A( X" z8 d( J8 q

title(功率谱), grid on

' m( O" X/ K t$ }; Q

axis([0 40 0 2e7])

6 Y @4 {4 V: T% T5 \
! ?4 P6 z l0 h! X9 y% f

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

7 g$ Q9 B7 i: `* \% V 3 B2 ?/ V t0 W! q ( R0 E4 X' |9 l0 l9 C" Q $ m. a( I/ X' c4 W% R$ i8 T6 O6 B1 V8 ]% s P5 ]7 @, x/ P
回复

举报 使用道具

相关帖子

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