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

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

[复制链接]
) r4 i. I8 ?7 `; x
9 z, W ? [ j7 `3 E9 X/ T$ k

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

# A% G5 D6 h( l2 ^% C, @) f: p6 j

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

* }$ i8 [% J; a z7 k s+ N2 _

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

b) o7 W7 C6 v/ h* [3 q! C0 }

load count.dat

) H2 C8 D1 v, F% u# T7 w! v$ I

mx=max(count)

+ c' V) c9 w4 @/ c3 u! X

mx = 114 145 257

- g% L4 P) r8 ]; W# B; }

mu=mean(count)

2 w: `/ i; \. Y

mu = 32.0000 46.5417 65.5833

0 S3 x& e# q9 T2 \( W: F' s q% I

sigma=std(count)

" j7 m) _( l. h$ k) u

sigma = 25.3703 41.4057 68.0281

3 w( o5 i3 l9 G6 w, d

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

+ p/ V, d% q6 G( d4 e& v

[mx,indx]=min(count)

4 J1 s$ F3 u; f" e1 f+ s

mx = 7 9 7

5 z9 i# u! Y- B/ y

indx = 2 23 24

1 O; K$ r6 F, g8 T! @, D

1、协方差和相关系数

, l2 @5 X1 { H

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

; N/ Z \, b* H" p* |9 ~: f) W) J

cv=cov(count)

: @" y" W" m* \7 l

cv = 1.0e+003 *

8 \9 o4 K0 U' _% ?' d

0.6437 0.9802 1.6567

1 c: d3 i, [2 o5 @$ S

0.9802 1.7144 2.6908

1 ^0 ^# y. z, x* y3 {$ a

1.6567 2.6908 4.6278

9 `( }6 K+ r1 F+ U: J

cr=corrcoef(count)

2 g' [9 ~9 B: w

cr =

4 G3 Z" q+ D0 U, c6 Z5 g

1.0000 0.9331 0.9599

: p* B9 ?% C4 N* Q& F: g

0.9331 1.0000 0.9553

) _6 s- a# [+ R. o

0.9599 0.9553 1.0000

/ y% g# U+ x J/ k( r

2、数据预处理

0 [4 w( v7 m0 G2 z# o; U, u, G

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

! b( K4 O4 |3 I$ z, c

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

4 }! T K- T) Y, r. d" k, k6 Z

sum(a)

/ T, @) l* B# W7 B0 |0 [

ans = 13 NaN 13

4 n. b/ L" I) W

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

' A- K7 A( m: h0 |* }

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

) Y( o8 K. Q( S8 D; f; m% i6 ~

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

0 `; r( K; t+ _; v% J8 @

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

* ~& T! @% _# B

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

- g: F- X; O/ I+ k6 F9 O+ S. \- _

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

8 z/ d m/ F/ e8 T

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

6 ?" d% \) D w. Q( Q1 m) g2 s) K+ C

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

3 z: f) K @% N/ w( c! G1 M

3、回归和曲线拟合

* F- E- Q Y3 ~% [* `) {9 c

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

0 {6 S' z6 m* E2 x7 L8 T6 v/ Q

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

8 B! Q$ ^- z! m( v w, ?4 w" i$ L

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

: n( \4 W7 K% b$ u3 z8 j) L

y=[0.5 0.82 1.14 1.25 1.35 1.40];

) S% w9 A9 {/ N: N! a
( s- C: Y. t) s& G! w3 g) ~

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

9 i8 p8 e2 U0 ~' j% E" X

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

! G2 E8 L, m/ D7 H6 n2 v( y# a

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

5 [$ {, N' Q+ Y; w! v7 x* o2 l! ?

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

# \, I h7 J9 |' \

a=X1\y;

' n u1 t% s/ l; X, b

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

; e# g, S5 a2 z( Z. b

b=X2\y;

5 n! l2 L# ^2 A* Z4 A

T=[0:.1:2.5];

6 E( q. Q5 C+ C9 N) C0 r4 q

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

8 @- ?7 F/ Z% T

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

: B8 N& f% r/ P5 U

figure(1)

# k) I' U$ I- f5 P1 Y: n3 s* G

subplot(1,2,1)

. ]+ K# x% _9 O. H! E0 r

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

- G5 ^9 P3 A4 G

title(多项式回归)

$ N$ j1 ?) x% Q6 j( J3 w# v" y' L

subplot(1,2,2)

/ _( A; o% a, S+ i0 H' j1 }; ~2 z

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

( t0 ]* y; _9 m

title(指数函数回归)

$ |6 u, G& c, ~3 ?' u! w r0 [2 _
; g d+ I# {6 F) R6 |8 v

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

' w( F9 a, m& `. R

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

6 Y: R# u" P5 x

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

+ z/ F) n. }8 }% I5 u

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

7 A1 n- F( A( i# [9 e% {

采用来拟合,则有

! v1 q7 p8 Z4 X: E

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

0 u0 k7 n! \6 n& G! _

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

2 p1 |$ J+ [# C; K6 D

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

0 N2 b s2 ?8 S$ f

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

. F5 U& _! E9 @

a=X\y

* L/ K1 U& D' K, O k

a = 0.1018 0.4844 −0.2847

) V z9 I' ]: I- j

因此数据的拟合模型为

" J) }0 m- D9 d% G7 P

y=0.1018+0.4844x1−0.2487x2

! Q6 |! }" F) @

4、傅里叶分析与FFT

3 k( ^* a/ `: F# H1 J7 r* C

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

( k1 A: c+ i7 i

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

K2 _, o# V+ d% X3 ~- ^# Q

t=0:1/119:1;

# Q# j" N+ O n0 o1 E0 l. G0 @' l8 g

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

1 K( |# g' J1 w) ^! L$ ]# R

y=fft(x);

8 W9 {1 _$ n; g. i6 r% h6 r" l

m=abs(y);

! F5 ?7 u, e" H4 b, j* `$ ]0 I2 u

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

" I, ^! F) f8 t( m: I5 J3 [

figure(1)

, ~- ]* B9 Z( S) w# Q1 e! F

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

9 J( h4 v, E; F( |+ I; a. R

title(多频率混合信号)

$ {' q3 l: \% k, t3 x1 ~ E

ylabel(Input \itx),xlabel(Time )

$ Z/ q \* k W6 k. q7 a t

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

+ U# U; S: {* L0 W/ `

ylabel(Abs. Magnitude),grid on

! E- A1 t" {9 d1 N. X! k7 ~/ K

xlabel(Frequency (Hertz))

0 |! j- I1 S* E: a, B# f1 g% R
' R C" v; y/ j# ^$ G

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

, u, L' `- {6 V( N

t=0:1/199:1;

5 ?6 c6 d3 R, Y# r- D

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

( |7 l4 y6 _" M

y=fft(x);

7 M7 e/ y* }! k

m=abs(y);

. E. O2 y+ ^( z. u1 R% n

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

1 z/ i+ I" B4 i" B4 S: j+ `% b

figure(1)

, g, S( B. Y2 C6 Q- i0 p

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

) u% X3 x4 W' n! h

title(信号检测)

0 r$ Q/ x" p. n# ]+ O

ylabel(Input \itx),xlabel(Time )

: T' u8 W% s" } T$ {

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

/ T1 h) {0 O6 C( |; T h- k- b

ylabel(Abs. Magnitude),grid on

Q+ O+ v2 p: g9 Z5 k

xlabel(Frequency (Hertz))

; _. t# x4 L1 o
/ v! k$ c+ |: H7 r0 {/ H

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

# h" R+ d3 Q v# u6 k/ u

load sunspot.dat

/ }7 l) L# _& b

year=sunspot(:,1);

7 c. w. e* F. z) d

wolfer=sunspot(:,2);

/ O/ k5 D6 Q J+ p7 }6 K

figure(1)

) E3 ^: I' s6 u e/ K; E3 a

subplot(2,1,1)

. ^3 }% t- N' O* }

plot(year,wolfer)

( t/ P0 N1 l" b$ X

title(原始数据)

( j% X: E: z" h: ]

Y=fft(wolfer);

% o% j# z0 G4 \( [

N=length(Y);

7 H h4 ?8 ^0 l) \/ v

Y(1)=[];

) t! z9 p* m+ c% g) {8 V

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

& J8 H6 {. o% D( s! [) p

nyquist=1/2;

* Y6 I/ O4 h# g+ e% a9 R6 K( u0 d

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

* k# i8 O! ~7 G- b |

period=1./freq;

3 f& h" d& f6 } N

subplot(2,1,2)

) S$ ~& \* ^, k7 T+ l

plot(period,power)

0 `; d* M6 d# ~/ W4 }9 V& P

title(功率谱), grid on

@! H* L/ w/ w6 B9 i( C: Z) q S

axis([0 40 0 2e7])

* N7 z/ }2 @; u7 G+ C) h; q6 R5 f
: X" Q+ |: B; R# K |

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

% n( Y q! M1 T; X( _' ]; h8 e $ T1 e& \$ }0 U; y# [9 X6 R + G6 G8 ?0 x/ ]$ ?' p' {$ D & Y. ], x4 t: n. z$ L) Z& d 2 G9 E* R+ r( q: R
回复

举报 使用道具

相关帖子

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