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

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

[复制链接]
" X0 a# K/ z" U! Z6 c1 b, E
4 z6 x& e6 `" l& x# ^; m

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

. w9 U4 K/ X9 v

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

3 U" ^ {* ^* v5 K& y* I

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

- e- @$ E/ Y$ S1 }) k& C

load count.dat

0 E5 j& k0 \7 u# I/ Z

mx=max(count)

0 w$ b+ o5 t9 F, @

mx = 114 145 257

; J) C' k* T. P( J% i& e$ t+ a+ r) l8 V

mu=mean(count)

" }8 n* h& D$ l- I

mu = 32.0000 46.5417 65.5833

0 ?* Y# _' D# W

sigma=std(count)

9 X% A: R8 Z( v

sigma = 25.3703 41.4057 68.0281

P& v2 c6 J) P

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

- B; @% g" h+ v' t" O6 e

[mx,indx]=min(count)

V2 p, i9 G, `' K* o

mx = 7 9 7

5 s/ p% U8 p1 y) Q" ^7 s9 I" t

indx = 2 23 24

. B+ C8 z: j0 i8 ?

1、协方差和相关系数

& }0 {. z& L3 P- E

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

& z. h: ?3 e6 a& _

cv=cov(count)

% r$ I2 R3 U. e6 j% ^# ]9 Y

cv = 1.0e+003 *

7 n) p& n* O4 Y2 _

0.6437 0.9802 1.6567

; E$ \6 K) } K. I0 `

0.9802 1.7144 2.6908

' A" M# e7 h; V. \/ @+ `

1.6567 2.6908 4.6278

; K/ X. N- k3 I2 @) c( R

cr=corrcoef(count)

5 z$ B( f+ n5 h. g

cr =

; z# B) e: ~1 `" r

1.0000 0.9331 0.9599

1 o. ]( b1 s$ B# T2 g$ _1 V

0.9331 1.0000 0.9553

6 r% f" W6 r ~% a8 A

0.9599 0.9553 1.0000

5 y* X+ j( [; M+ w' G

2、数据预处理

5 Y+ s. o5 R. `$ x$ q

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

; N+ b7 i$ F7 F8 C+ M9 p% o; P

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

" g0 k! c3 e# z {0 i+ F

sum(a)

( L* D) T6 V6 W. W

ans = 13 NaN 13

: l3 b6 u3 {5 V- [5 E

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

; g3 H$ V- @' \# k$ \# h7 h0 z

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

+ H9 P5 T/ g4 `# K/ u

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

) R4 l- T- [9 g+ e8 t! m. L

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

+ M, v4 d4 }; B

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

. ^$ Z/ V! u) j7 k, \1 W$ [' k) d

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

o% K, X$ p. d

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

- s2 M" q6 `- `# ]( a# Z2 b* m5 G$ l

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

* F* x4 e# y( i) [( y$ r

3、回归和曲线拟合

- R4 S/ h9 M/ O8 H$ s/ f

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

; a! ^. k6 V1 t+ m: z, m: }9 I

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

+ S; t8 }7 B4 `9 q

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

: p$ A' O5 B. {& C

y=[0.5 0.82 1.14 1.25 1.35 1.40];

& q) }0 b/ l6 m3 c
( e4 Z/ t8 y8 z+ ^5 L

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

6 Y. j( S' u2 r7 R

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

% Q! h- {$ x% u9 U% G1 p1 H' N

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

9 H( a6 N! w- o( g: }

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

0 v" H( ?5 C! Y

a=X1\y;

Y- h( J8 D/ l

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

% y: B$ f+ C S, }$ x. m

b=X2\y;

$ M2 |9 n, O7 t W6 ?* K

T=[0:.1:2.5];

5 C! A6 k. ^. B' I* V! J2 j

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

% v/ ?$ C' h, L

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

* A: ^8 U9 @/ g4 U4 p5 W9 A

figure(1)

; S& z7 J: \8 C5 D# [

subplot(1,2,1)

. B/ j, m# S' w; V. ?

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

4 q7 s$ H' w* _/ C6 V* A; c

title(多项式回归)

8 X1 |) x5 U" L

subplot(1,2,2)

6 H0 Q" M7 \; `# @! M# n4 v3 A

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

# c3 u- H: a4 V# Z' Y0 i5 ^, N, a% o) r

title(指数函数回归)

4 u' ^# x7 S; o" W- K! g" }
7 n% c. z, V2 H% D6 H0 @" r# b

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

' C9 h& f. c' v* f5 g2 p2 W

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

% Z! [4 T2 X: f1 l% }2 m6 o7 s

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

" {2 ?, V L/ I& }+ o

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

& ^ P, Y7 X/ m) g3 V

采用来拟合,则有

% v/ v) D+ P- w. `$ b5 X' ^( [

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

/ d( y {! v2 @

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

( f* C' g% t6 y) _& }1 D) s3 g R4 H7 i! \

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

* k& U, |7 P* w

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

" q: t- B0 Q. M1 e: ?

a=X\y

8 x( a" B/ {9 G7 e9 ]6 ^4 J

a = 0.1018 0.4844 −0.2847

3 Y% w9 p2 Q4 T* g& q, Z

因此数据的拟合模型为

4 a7 C O# m( q& H# @# p

y=0.1018+0.4844x1−0.2487x2

. @7 }# \' e/ u1 r- g) J

4、傅里叶分析与FFT

6 ~) X5 v( v9 v' p% R

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

6 x4 f) k+ d! c

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

& _2 Y2 m- e0 R

t=0:1/119:1;

7 R1 b1 B, J1 V( B1 f# r

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

- J5 Y+ a& [ G* Y* E0 j. n

y=fft(x);

( y( G9 ?0 l6 u d! U# E; h# \

m=abs(y);

3 ^4 N* _' Q1 u/ Z" S& o4 q- s

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

: \% K% _$ t9 y3 v

figure(1)

" e M; @) @0 c. k4 P5 f

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

0 ^+ f( X' e# \1 t+ x3 T' Y' i

title(多频率混合信号)

6 T; w6 l" n& Q% E$ W

ylabel(Input \itx),xlabel(Time )

7 O% o( j- k; x2 i

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

7 T% Y" o' c& T; f

ylabel(Abs. Magnitude),grid on

5 j3 L% N: E5 i6 F1 H7 c

xlabel(Frequency (Hertz))

" r+ @8 K8 o0 [! l; e
6 v) Q9 l; ?1 ]) ]; Z8 x

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

* j1 ^6 z* @' t

t=0:1/199:1;

/ p6 Q- l7 t/ A% F+ k

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

2 F2 w. [& R/ J# V0 _

y=fft(x);

Z0 V) y: d4 Z# D0 h. |( S l2 J

m=abs(y);

% J- E9 Q* }. N. K. Q- h* Y8 x

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

4 l8 z) E# `& F8 m2 M. j/ B

figure(1)

) y T1 `( ]6 M$ ?

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

3 l% [/ |* f, {

title(信号检测)

; \# y2 i+ L% e/ h; j3 h/ g

ylabel(Input \itx),xlabel(Time )

7 u+ _) E) W) f7 q) N6 `& k, [

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

# O* W7 g4 v0 l" G7 _* ]

ylabel(Abs. Magnitude),grid on

' N: A* g0 A1 [

xlabel(Frequency (Hertz))

' R% G7 U3 c9 Z0 t' b
6 G' b7 ]0 R% t0 c

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

* T$ g( S% G6 x( E& X, [

load sunspot.dat

1 J8 N8 @+ U- i9 ]2 x& U

year=sunspot(:,1);

$ d4 A& S3 v4 S6 a, t

wolfer=sunspot(:,2);

j4 k2 r% u& c6 S/ Z! `9 v2 w" }: H

figure(1)

! ?" ? H6 K* `6 M0 d5 u

subplot(2,1,1)

# M% ]6 p" M% {0 Y+ l9 \# l6 t6 k

plot(year,wolfer)

- I$ r4 W9 A3 n. M' z3 s

title(原始数据)

. y/ Q# L! x$ d. L

Y=fft(wolfer);

4 e- L4 e6 `3 j9 |) i% t2 ]$ j8 H

N=length(Y);

, T- d9 N I5 w# f9 m2 s8 O

Y(1)=[];

2 d( f( ~1 A; r% c+ }0 C' o! r& m7 \

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

( b+ c, ]- M4 v2 `

nyquist=1/2;

: V" O! H' I7 \( n: C7 f# m

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

* ~! |5 G s7 z, b% t" U @

period=1./freq;

, r' T+ T( X: A. o. m

subplot(2,1,2)

; Y% y0 v8 U, g, `6 ^& h$ ?- J7 ~

plot(period,power)

1 T+ |+ n5 z8 l+ |; H; F3 c$ K

title(功率谱), grid on

. F; p& E5 u9 I

axis([0 40 0 2e7])

# o+ h4 m* h0 I, d
5 H d3 V; Z2 h! x# [

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

# A: L$ X6 p" I( ?+ x1 b& l& p0 M- d ! }' r% r. W) N/ k$ Y' K& z - K. ^( R1 ^ I" v o; l& [ 3 f; R" K+ Z6 K
回复

举报 使用道具

相关帖子

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