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

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

[复制链接]
: P# n x/ b* J$ [
. A; n% G0 C( t* C$ W `/ P1 R

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

# a6 I; o4 r$ {# N% Q

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

# v' ]7 W; F2 V& t" I8 p

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

9 Q0 ^5 h: u+ L( `8 ]- h2 M( d

load count.dat

+ Z0 B7 d0 o% A: z' R3 w ?

mx=max(count)

, l; E4 {. Q5 i$ J

mx = 114 145 257

r: x8 P d- h$ ?- j' d! L. @

mu=mean(count)

. u# B2 m5 I% A8 G1 Y0 ~

mu = 32.0000 46.5417 65.5833

+ x* t$ q+ B6 p! J, a, m+ D- |4 A

sigma=std(count)

) Q' Z6 K. O: x9 ]( ^2 V2 Q

sigma = 25.3703 41.4057 68.0281

. p( r& [- F) h3 g* t& n k

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

7 V$ y9 R$ Q2 k! K' ]% s

[mx,indx]=min(count)

4 G# R; T, Z5 E& U

mx = 7 9 7

) r6 a+ e" \* O4 N1 F. B

indx = 2 23 24

8 u' p* @1 p$ Q4 `4 |* U. A5 W( i

1、协方差和相关系数

, Z% U7 T1 i' K1 b* x

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

$ F7 ?# V! ^+ ]* Q# q* v

cv=cov(count)

3 D7 R5 A& c! R$ n

cv = 1.0e+003 *

6 N. n# C" X, Z. Q5 p! x0 y7 h

0.6437 0.9802 1.6567

; X! N5 y9 v) {% U5 C' a4 @% S2 x

0.9802 1.7144 2.6908

6 e) H: ?* j! i9 ?9 b( }/ r' w

1.6567 2.6908 4.6278

& o: _( A% M% Q' k2 ^

cr=corrcoef(count)

1 l( g% N& K- U5 O C

cr =

; U" u. P6 L* x1 k. Q

1.0000 0.9331 0.9599

9 t" [- G! j5 B6 e- w

0.9331 1.0000 0.9553

@: W* b. N, Y* F6 F0 b) e) Z. K

0.9599 0.9553 1.0000

* k3 ~% N& I& |$ }4 |/ t( ? ^: W

2、数据预处理

- u: @" t& p% a9 H

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

6 f" s/ Z2 |% |: x% U8 N

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

( h0 s \' v% W' A& ^6 H

sum(a)

; K: p# ]2 X5 |( X0 P

ans = 13 NaN 13

3 P9 m4 { h, b4 {

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

& v( T/ {9 ]$ h( O9 s+ V) z

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

' f4 J3 V! d3 m4 K6 o4 c( B5 k

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

% P6 A3 o2 W6 B. b1 O3 G) b

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

' j: T& }" O5 r2 N

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

6 a$ p" X$ q) b- d+ V6 l, q

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

: l* b9 @, {$ z, {# j

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

1 g5 Q% e5 z; g5 o2 i: d, _) b

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

% l5 j# ?4 S4 M, j! K6 K4 `: m

3、回归和曲线拟合

. O$ Q9 O" U& U

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

/ S5 a+ k/ K; d: `

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

5 X) v u% B# ?& M% \+ K" G+ h

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

9 { t# G* [. J I

y=[0.5 0.82 1.14 1.25 1.35 1.40];

& y- ^2 B4 B8 g2 G$ B
4 H2 o O& [5 P5 }6 F

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

" R7 q/ V' F# U( |4 A. [; ^8 o4 C

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

( g5 R( @7 ^ ~5 L4 S3 K% w

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

- z; t8 C; E* ?( j

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

" S: @$ k7 A. t" A3 N% m: v9 w: Y

a=X1\y;

; T% A7 e) ?3 G3 t

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

* p3 M7 G, J3 r% g

b=X2\y;

# h- T0 j' V; a+ j9 [- u: y

T=[0:.1:2.5];

) W- x' r6 A h" l4 J) Z

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

5 A/ Y; d/ d* L5 F( m& n8 M

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

. x; u. J' X( Q9 e3 {; e

figure(1)

+ u. y3 r8 d" W" m+ j7 ?/ R* F9 v& F

subplot(1,2,1)

0 z* k3 J: n8 @9 g; _8 r( F3 U+ A

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

0 r4 }" ?0 t0 }3 i% O

title(多项式回归)

" [: B! ]" X9 B7 m" M( f3 s. S+ }

subplot(1,2,2)

" x: x% O. z4 \$ L& Y3 J

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

# C0 \* h9 y) I

title(指数函数回归)

3 P( l7 d. g8 d7 W- q
/ ?" E% e; s2 ^" Q h( U8 E

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

2 R- o3 h3 @8 D, E" _3 t2 @

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

" b$ D& ~3 J9 B; f

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

1 u6 {* o: `, z7 B

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

% G1 M4 s t' v/ b8 T6 |$ q* W

采用来拟合,则有

. E* }( o \ O

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

3 f( {4 @7 k, z; ]5 S

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

# G) v T: e6 {

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

6 j: ], n. N& A4 F9 a! n B' M

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

1 @6 l/ r W/ C

a=X\y

+ U4 ^5 P( ?- ^8 c7 h) W2 k9 L9 M4 [

a = 0.1018 0.4844 −0.2847

- ]1 M& `8 \( i. }. Z& G) C& d

因此数据的拟合模型为

" Q' s2 o- b4 V( f! U% a

y=0.1018+0.4844x1−0.2487x2

( V: g) K8 J$ s0 F; ?/ _8 ~4 X

4、傅里叶分析与FFT

8 R( [9 ]# a& u2 z+ I. u" C; z

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

5 x5 t2 t8 d, u$ S9 C

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

* l4 q K7 a* W6 J# U4 Z% `( j

t=0:1/119:1;

: V! N+ ?2 x7 P: Y c

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

& c' k" f7 U$ J, f8 D2 ` `* |$ i

y=fft(x);

N+ r/ {" h% O2 L

m=abs(y);

' u6 t; J2 i1 ^. m% Y* V

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

* m$ B, X& v: ^6 g+ L9 ?4 b

figure(1)

" Q& l* T) w9 D: `/ M

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

: ` P7 R$ |: _1 s3 r0 ]

title(多频率混合信号)

4 _! F4 r% w" K) w

ylabel(Input \itx),xlabel(Time )

v- h) |; j" S& v7 |/ X3 |5 l1 o

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

$ @4 M6 M- E+ Y) E

ylabel(Abs. Magnitude),grid on

1 X1 b, h/ c1 B

xlabel(Frequency (Hertz))

1 n4 \1 U2 z4 @# S# x% B
! c' ~+ _( @( |1 d) ^

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

+ }; j: F+ h; k; q

t=0:1/199:1;

! U. y5 x6 A& r$ D# ]1 [

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

: {5 _! E2 g6 p) a* P* A& D9 E

y=fft(x);

5 Q/ {+ s$ ?# Z+ V2 }. s; y6 T+ ^

m=abs(y);

5 ^# S4 ?; }7 E/ t$ E

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

: f5 y5 p7 M; S% Y

figure(1)

7 Y. k' a3 A$ }9 l7 f; Z7 _4 v

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

$ l0 R- c. ~ R& H; A

title(信号检测)

' {" N! i4 r+ r' R7 `; r: H

ylabel(Input \itx),xlabel(Time )

9 R: a4 ^/ Z- a& n0 E. g3 K; B+ d

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

, R7 P- Z- G/ m4 X/ h

ylabel(Abs. Magnitude),grid on

; f. E8 i$ I6 L: i) Y+ {

xlabel(Frequency (Hertz))

) P) C: N+ H! D9 u
7 L% {3 W/ {1 j

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

/ ~9 A% O+ {& ]3 `7 A# m6 e' ?1 U% ?

load sunspot.dat

1 _; x, f4 L6 R8 H2 I6 n( ~

year=sunspot(:,1);

6 X) x! B- r* A. A- ~/ a

wolfer=sunspot(:,2);

7 g5 }; q: B A! O

figure(1)

, B/ Q& J" v; Q. j8 B

subplot(2,1,1)

7 r e- u* w8 u8 @7 ~ r ~

plot(year,wolfer)

2 i4 e5 Q) B& Q

title(原始数据)

6 X" ?+ B# m# ^- S6 ]

Y=fft(wolfer);

6 d$ t3 }7 N+ n4 n' r- ?7 ^0 x+ r

N=length(Y);

" D2 K2 I7 Y" t

Y(1)=[];

; R. f5 \7 D" m* M

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

5 ~& X$ ]2 L, E1 H8 h. ~8 Q$ o

nyquist=1/2;

" e B! z3 e9 s

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

$ p/ H1 ~/ B0 O' S5 v0 m

period=1./freq;

. V6 }2 {; Q# ~4 D! U

subplot(2,1,2)

0 o$ t( _8 a( G9 H

plot(period,power)

7 n5 ]- ^+ K: m! e' \

title(功率谱), grid on

7 ?- f/ }1 v0 e/ ?0 _

axis([0 40 0 2e7])

1 b1 B( f8 Y! Z7 Y
) A/ j3 ?, @! C7 O4 G* n9 t

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

! l1 G8 [3 x( E5 f- j6 o& Q' Z+ c: O1 S# ~. v- l- U . P* `' ~6 I8 @6 I$ O: F1 M: G 4 _: R# z% ^! N ( T K! f* F8 k d4 U
回复

举报 使用道具

相关帖子

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