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

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

[复制链接]
6 n3 x# G% q; j' r
U! ^' M& {& \6 P1 Y- B; V7 U& E

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

" F0 S" P. K( G+ W, H" y7 S

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

& q, n, ^- Q6 B7 N& N. Y( h1 E/ W

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

5 b* w6 k: s) Y" L* u1 z& m' v' P9 n/ d

load count.dat

% P. ^) b- Q: l1 |8 E W# ^

mx=max(count)

. x: e) D: x8 R

mx = 114 145 257

3 h, H, J6 b/ m" g# m: m1 r7 V

mu=mean(count)

/ o" X( c: L8 c- X# J9 Y6 d+ o% Y

mu = 32.0000 46.5417 65.5833

. i! E: T+ k* M' L0 L! l6 p- j* Q

sigma=std(count)

: B1 y' A4 D' g& s, U) @5 z

sigma = 25.3703 41.4057 68.0281

. D5 x9 C3 \$ L, C& n. a

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

' S) K" c* l% B4 n

[mx,indx]=min(count)

. G+ c4 O2 {6 Y* a W2 q R1 ^! e; O

mx = 7 9 7

' c( l6 \( ]) U9 W& Y( h! ~5 ^

indx = 2 23 24

) T9 w- _. m' p4 C! L1 C9 {) e( U# l

1、协方差和相关系数

* x6 `" V9 b. f! `' o

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

3 v. P" z3 V4 W2 o: a4 H' v

cv=cov(count)

( T: a. f& @: r

cv = 1.0e+003 *

) _9 S2 }, v4 l" v! h: k

0.6437 0.9802 1.6567

, U0 @; Y9 w# O: K2 z4 {

0.9802 1.7144 2.6908

~6 g' y+ X( v+ m+ b# V" [+ v

1.6567 2.6908 4.6278

2 a7 Q1 x9 w. {7 h* {7 E4 Z N4 e7 m

cr=corrcoef(count)

0 H$ W+ W3 `, H/ z. N

cr =

: o) j. F( Z8 h; X( `( g: g) P$ G- D

1.0000 0.9331 0.9599

7 a6 I! g+ O; v: O$ n5 g

0.9331 1.0000 0.9553

- i7 q: l* z: r/ b# K3 t- {

0.9599 0.9553 1.0000

0 D8 s4 ]3 ]! ?9 D

2、数据预处理

3 U+ q% ]5 j& V8 C" L

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

* }- U, f/ r3 D

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

1 y0 Q) C9 c, H0 V2 E0 Y! n6 n

sum(a)

' E8 ]& q, b$ J( z( e3 Y

ans = 13 NaN 13

$ M1 O- Y* S8 {5 a+ T5 i+ D2 m

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

( N- `' a1 i0 l/ J4 }

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

, G) u4 S# d! r( ?& V2 ^3 j

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

% r% A8 L( E/ H {7 f" M8 a5 z: y

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

& f2 P. x6 p: ~8 `5 D& A

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

7 h, O7 F# D& q$ Y% d5 g

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

6 `7 y7 M1 H* ~& M: _! X

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

, G4 d* p* q S! V u R

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

7 ]9 g Z7 N% g, y1 K/ y0 u

3、回归和曲线拟合

& D0 X# S& m& }. }3 U% U! x. P% s

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

: D V- Q& Z! n4 A) J

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

- s: B! ]! A% I% V# W6 G1 h4 p

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

% q# _* \' C. D9 u- p

y=[0.5 0.82 1.14 1.25 1.35 1.40];

/ ?$ v6 F. V: v' K- U& a- ?
( ^( F* C& {7 u# Q. F

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

$ F2 I8 x8 b# U# i& l

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

, G3 V, X8 k' z$ ^- n9 ]. P

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

2 V0 O) G. \3 P* k3 Y+ L

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

# h7 E% T) L0 b% H

a=X1\y;

7 Q7 q: |9 J0 `; q- ^& a

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

1 D* `4 K% e4 z2 w: @5 o

b=X2\y;

) K) r: T# b' x8 d& Y4 A& j

T=[0:.1:2.5];

2 c I( T( A# a' J: U% p8 x6 w

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

0 n4 W+ H' I& K+ z

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

8 p: W7 m1 S- t/ A$ V6 T0 L! `

figure(1)

. M# H, ?1 y# v4 \1 I" ?; y

subplot(1,2,1)

% a8 `# X' T& O" O+ x

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

" ?" L! c. V9 R4 _

title(多项式回归)

4 v+ F$ ~0 x& h7 d# C

subplot(1,2,2)

9 e7 g! ]* y/ O k) M' P* r$ G' _

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

4 L( W$ O2 D7 p# [: ]

title(指数函数回归)

' C" z: h/ I) f8 X6 w2 G
; @* M/ O, v2 r1 z0 g

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

" d& P3 i7 X" E+ F, `

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

, k: X9 P1 G" j- t1 w3 o: V) j2 P

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

+ n4 D7 N k7 x) [, [* J- E; |

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

0 B% ~$ O9 Y9 ^

采用来拟合,则有

( [. p8 _) q- \6 i ~1 k

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

/ t# e6 C: T) j

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

q) i) w6 c% Q) J$ _; \' h$ m9 W# q

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

5 i6 l' {- Q- y; G! a$ l

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

% c1 q: u$ K$ M, J

a=X\y

`+ x5 H3 r7 q, n% j+ D

a = 0.1018 0.4844 −0.2847

7 Z: g. y; A& c) L' D c

因此数据的拟合模型为

! O. h2 ]3 I" k" o& @& H {

y=0.1018+0.4844x1−0.2487x2

4 k' J: G8 p! R

4、傅里叶分析与FFT

+ t, R% B9 z3 v! o d

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

: d1 S; E6 E/ B5 u! k( n- u

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

9 [' x! `' n9 T* F2 R( f4 a

t=0:1/119:1;

2 a) I4 K, N2 A* L# p+ n* u/ H7 x& A

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

, c8 f2 I$ i4 X5 u9 b: m

y=fft(x);

2 f7 D& F% K2 r

m=abs(y);

p: x: x, |0 j2 y# e0 U' U

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

: {& k4 v2 N7 s4 h! w6 S

figure(1)

/ W- B% s( F: Z( V

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

9 ~6 L: ]) a5 H5 Z

title(多频率混合信号)

% p/ H x% M3 ^* a

ylabel(Input \itx),xlabel(Time )

: z" ^' P( G! l3 Y; g6 Q2 D

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

% c3 p" w( R& X1 a/ c: v

ylabel(Abs. Magnitude),grid on

, k3 W; j& L7 K7 i8 V1 r( p

xlabel(Frequency (Hertz))

7 y5 P0 I. W3 V( y" U
1 O- J) r. x5 E" l" s, X6 O

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

3 Q9 g k, W; L/ c- h

t=0:1/199:1;

7 s$ A+ B$ ~# {5 h9 c4 q

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

1 Y0 W, I4 {# q) H! J' V% H

y=fft(x);

9 Q" K. B$ N s3 r* w' V' ]: ?

m=abs(y);

; _6 d% [5 y* }* D/ @' P

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

* k' A7 x, L6 B& A

figure(1)

! S3 h* x/ n: S' t3 k

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

" i1 S, J8 H2 I |6 h

title(信号检测)

# f |1 R2 s, y4 t' }" M6 f

ylabel(Input \itx),xlabel(Time )

% W) X6 s0 a3 W) Q# n# w

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

, B, ^ `0 X* d& l0 Y

ylabel(Abs. Magnitude),grid on

- L$ ?4 Z# p; B# G& Q( `

xlabel(Frequency (Hertz))

2 i8 o& v$ p l/ y
( D) X* U4 e2 o& F/ ?# q

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

9 D! l/ k t0 Y4 n) W `; i

load sunspot.dat

4 Z9 o% N7 O- T+ N1 `

year=sunspot(:,1);

; u$ Y) i9 F; Y0 _$ [% b1 w5 U

wolfer=sunspot(:,2);

' l# o& p1 T/ I" o! n" I: x

figure(1)

! F6 Z% ~# ?/ X

subplot(2,1,1)

& h9 t# o4 q4 I7 z

plot(year,wolfer)

7 \; _( z6 a. Y1 @9 o% r4 f

title(原始数据)

0 P/ U m* B9 {/ ~" [1 E# ~+ x8 k

Y=fft(wolfer);

/ c" S: b1 _6 \; l& I! l4 p

N=length(Y);

& R/ B5 ] e% L+ {7 v4 x/ u% T; n

Y(1)=[];

% ~5 A6 u* @/ M3 j3 l4 n

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

2 x1 s* Y* N* \# H) H/ U. v

nyquist=1/2;

2 ~0 F- F# r# h9 S* f

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

8 z( n- O0 L" G6 n6 E2 ~; H

period=1./freq;

. K$ W, A2 l' _9 U7 S6 }+ p

subplot(2,1,2)

+ w; j: i m2 ^/ |( e( A( c7 ^

plot(period,power)

2 M& e0 j- h- z& b( b

title(功率谱), grid on

7 v; {4 A* O( L4 l. [2 s& f. K: T

axis([0 40 0 2e7])

( `/ a% k p6 X8 o8 B9 B
4 A- y& Z/ l: l( u/ j4 Y+ P

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

" j w3 `9 z+ Z: B2 E) G$ X$ u0 f: w 9 ]7 h+ b, f3 v 9 j$ ~0 ~: G" H3 a / y4 g! h3 D- P( E7 t
回复

举报 使用道具

相关帖子

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