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

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

[复制链接]
& U9 l0 ], ]1 F0 G) S- \" x
2 k) w# o/ V* O; `0 b! E3 E# J

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

: h* ?% n1 j. a3 g {6 E$ R: n

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

+ r* E9 s$ x3 H$ Z3 {! ^+ ]

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

3 D7 ]; w7 ?# [; {0 ?8 W4 u

load count.dat

7 o9 _: x0 w0 v; g6 M) R

mx=max(count)

5 y* |: t) j( x) k( ^. w" Y

mx = 114 145 257

( ?' ?+ ]1 P3 g3 x5 w3 K* J' b, N+ l

mu=mean(count)

2 @ f* e) z; ~; f* `6 n* I1 T

mu = 32.0000 46.5417 65.5833

# ^0 G- i7 @/ z& z. t. U6 u0 L3 ^

sigma=std(count)

1 B5 L/ a; d/ }

sigma = 25.3703 41.4057 68.0281

# n* Y6 I; t2 N4 O) H; x

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

* x* h3 Y/ r; h. W1 g

[mx,indx]=min(count)

# x G" U6 ~. b2 P/ ~3 [4 F! V

mx = 7 9 7

2 q+ e7 y! Q% t: }# k3 q

indx = 2 23 24

, E% G+ L: x. {+ b

1、协方差和相关系数

8 J0 N# E- a+ l, y

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

" f" ~; E: n% f

cv=cov(count)

. a0 C6 b: c" l) c

cv = 1.0e+003 *

' n: }: G0 k$ E6 X

0.6437 0.9802 1.6567

7 I( Q0 v t. `) M8 b, b, V1 O3 L9 v

0.9802 1.7144 2.6908

. ]) N! L( O- w. m6 U2 E

1.6567 2.6908 4.6278

0 J! J0 Z! |! A, K& A

cr=corrcoef(count)

4 q* b( j& D8 A

cr =

: @7 H4 x; C5 J6 O5 k+ B

1.0000 0.9331 0.9599

# Z$ O. `, h! x) }

0.9331 1.0000 0.9553

7 d4 _, p, K9 l& J

0.9599 0.9553 1.0000

+ ], D8 K; ^7 r' V6 y1 w

2、数据预处理

- O( |- T% I, R6 y; z, ^* E, f

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

' n& W0 o7 X: s8 _" W& h

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

2 ~* H; o1 d% c5 @

sum(a)

) W9 S4 k2 w$ x" J& t+ G/ v

ans = 13 NaN 13

7 Z- t4 O' E& \: t6 J6 V

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

! [9 _9 F. w+ V4 t2 x. U0 U! v' `! z6 s

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

/ ^5 M/ v9 X' P! e; s

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

6 j2 ^2 l ~/ q2 v/ U) v$ `/ {4 g

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

) H1 p3 R3 n7 b9 h1 a

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

$ \4 q) x/ H$ X; U$ C8 l

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

: }+ R4 g2 K8 B3 S

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

2 X. ?$ j5 D# J9 N3 Q9 [$ P6 Q9 a

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

. e6 P3 E7 a# X" N' I1 d# i( D

3、回归和曲线拟合

6 p3 s0 M; H- n+ B6 J

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

) l4 i' D. e9 B+ l T7 v

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

7 q& E- u* B5 f* \) N

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

! F' d) C7 y& \2 i) a4 J

y=[0.5 0.82 1.14 1.25 1.35 1.40];

$ M" I' G6 h E# D6 h* x
7 [ a+ }/ k, B

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

6 Q; G: E& a; T M4 @2 }

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

* S! ?* y% N/ b& d- ~0 n: \

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

2 o" s) \2 E5 X; H3 x% O

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

- l# F$ Q5 D) U$ N4 \/ E: t

a=X1\y;

# _0 C/ g, G6 q$ h$ w

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

9 z# q0 e& n; g) }

b=X2\y;

6 ?; X+ y5 k4 D" @

T=[0:.1:2.5];

; g/ G0 O: X% s1 w, C9 ]& Y# ?% @1 R- e

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

5 S3 S1 N/ O2 }2 F$ D& f" |( b

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

; i) b L( |2 P! r/ N( b

figure(1)

" D- ]% B3 P7 q, W: P

subplot(1,2,1)

' a7 J2 x* ^9 X. G$ x9 Z. F

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

( Y9 c+ M6 M6 p4 _3 j

title(多项式回归)

4 e5 u! B$ ^/ p

subplot(1,2,2)

5 ~+ g0 ]1 n1 c1 X( K8 l6 W

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

. I; W. D& o" a9 g$ L

title(指数函数回归)

8 d. ~: p) d1 q
. z* R9 R( B4 C, l6 v

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

) P" R& P6 ]7 P7 Q

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

7 |2 }- H6 f3 o. e I, n

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

) I6 N8 c* f$ ^( C

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

M2 h7 r: ]7 b

采用来拟合,则有

: C) o7 p# q0 b. m7 a- i

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

8 w& d) t# ]8 f4 x. S0 p

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

, e6 A8 b9 _# ~6 a) B5 G! L

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

* a. e) \7 ^# C0 Z. P8 _

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

+ @( E$ S0 j4 v- _/ b# N+ Q

a=X\y

, g5 ^1 Y6 ]5 Q6 ~0 r7 J

a = 0.1018 0.4844 −0.2847

# ~7 r, C. q- H+ n

因此数据的拟合模型为

8 y, `) K! n4 g! K R6 [- {$ f

y=0.1018+0.4844x1−0.2487x2

2 X" O$ F2 |* |6 K* w

4、傅里叶分析与FFT

- a: V7 w3 |7 a

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

, n, O2 H7 I0 M. E0 N7 c

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

' D! B6 G3 h/ F+ m4 L, w. s

t=0:1/119:1;

; c' g& g5 V# `% ^) t: \, b

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

: H, d+ j0 W' m, J9 U

y=fft(x);

7 f3 _2 R% c" q& B6 T3 ?

m=abs(y);

1 {4 e( B1 t& V4 t) U8 W/ O) D5 W

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

, A/ D7 ]. v/ h& O

figure(1)

1 b- q+ r- g* K2 p+ h! y

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

" d. F) @& a1 r* D4 q7 @/ w

title(多频率混合信号)

# Z& c& R" }4 M8 a3 n

ylabel(Input \itx),xlabel(Time )

9 k5 J T4 N4 b4 `: H3 }6 U

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

' d- T, c& D+ T+ b/ B/ Q/ o- j

ylabel(Abs. Magnitude),grid on

1 I4 S0 l. [8 Y$ u" ?. |

xlabel(Frequency (Hertz))

* u$ F: u: X3 M$ r* ~ j
- i& E2 H6 K9 h0 k; o3 k9 Q7 R

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

: [& p+ i# ` S# D4 U4 M1 [2 O+ ]

t=0:1/199:1;

1 _3 Q4 {( D6 ~

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

2 r* u* L* b3 P% N8 ~

y=fft(x);

, v: p+ c7 Y0 j9 ~

m=abs(y);

" s3 S- x/ r& K

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

3 k9 d$ c7 r) K3 A5 G9 }

figure(1)

2 v7 ]7 G3 ]2 n3 ?0 f' f9 e

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

- U, S8 v& [: b

title(信号检测)

6 R- U; H" g1 t. V8 `4 G$ {

ylabel(Input \itx),xlabel(Time )

0 i0 h l& k, J" q8 @/ ~: W! H7 @# p

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

$ r% I; i t a. Z! I

ylabel(Abs. Magnitude),grid on

: P3 C# k- \# V6 g8 j) V3 k( m" W

xlabel(Frequency (Hertz))

7 R7 b; d1 I0 I4 m; s; f. G, O/ Q
, ^0 k2 v9 A8 S+ K

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

; Z q+ {9 s! g( D1 V$ R$ L

load sunspot.dat

, O; Q/ y, x, F3 N

year=sunspot(:,1);

+ O! J" P) Z* s, M3 N& j, d, w

wolfer=sunspot(:,2);

U' O* p, U4 [& v. O7 @! m- Y

figure(1)

0 O, f/ F0 q8 H4 Q# Q6 R

subplot(2,1,1)

' d* K& y3 }9 J2 c, F, m) e @

plot(year,wolfer)

Z, }1 N' e5 i2 q7 E

title(原始数据)

9 t' F/ U- K* }

Y=fft(wolfer);

+ c& {4 U& \0 }* Q- x, m5 t; z! ?

N=length(Y);

; ?6 \& f; m B4 I6 l- c

Y(1)=[];

9 g) \: _/ |+ T7 ^7 b, h

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

1 F! g7 q" k. j0 G4 y, ?1 \/ Q

nyquist=1/2;

# D; m* b, I+ h

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

2 b% O; a- C7 L3 R( y7 T( l) I+ f. a* W, E

period=1./freq;

) r9 s9 q, c, i) U4 E7 i

subplot(2,1,2)

1 \$ G4 w! s: z: n; o

plot(period,power)

) @- H9 R/ ]1 }; X P) ]% ^5 A

title(功率谱), grid on

1 W9 E' ?; u j. e! m, q6 Q

axis([0 40 0 2e7])

3 {/ [4 c7 L' m W7 q# r! I
- \' T- W9 W- k/ i

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

r$ I: @0 }) J0 B/ t) K 1 ~0 u# c R9 A2 w9 z, D# F, C0 i! B 6 x* }/ ^2 U$ @1 U 6 D5 c- a3 ^; U, }0 @4 v2 D
回复

举报 使用道具

相关帖子

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