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

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

[复制链接]
5 Y( _. b6 Z! Q* F
8 \; O1 H, i2 Y

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

]8 W: v+ A% x

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

' i0 Q0 }* m) W+ k

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

^$ H# \/ Q. n% Q2 F9 Q

load count.dat

1 j9 |- \1 r: w! l. S; K1 j

mx=max(count)

% ~0 T6 v" P% w. j3 n5 {2 q

mx = 114 145 257

6 X' X! V W9 ~1 A

mu=mean(count)

; a/ B# V$ h. k5 i! Q# W

mu = 32.0000 46.5417 65.5833

" i' I6 A4 d7 |9 ^! C2 a% N

sigma=std(count)

0 S, L, B9 }4 T& V

sigma = 25.3703 41.4057 68.0281

; A0 [( j/ `, a% y

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

8 w6 j* x3 Z" c- p$ M6 a

[mx,indx]=min(count)

: b0 y( @4 E% l2 }$ L' T- k

mx = 7 9 7

* Z* d$ F7 `% `. m4 s+ ~; X! s

indx = 2 23 24

) I; i9 h0 i5 g% g' ?

1、协方差和相关系数

! E6 G% z5 Z7 C: d0 a

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

" T2 G: Y1 X" X/ o! A9 J" I/ T

cv=cov(count)

" ]! ~: I# X m! M l8 ~

cv = 1.0e+003 *

- v M! Q6 x( ~# ~

0.6437 0.9802 1.6567

+ Z7 j$ f8 X" x

0.9802 1.7144 2.6908

8 u% \* ?+ I$ M

1.6567 2.6908 4.6278

5 z8 c: C6 I |& k: [% b B: R

cr=corrcoef(count)

. s4 Q! ^ p+ Z2 I

cr =

5 Z0 c+ F+ ?8 \$ W* B9 `& t

1.0000 0.9331 0.9599

- b) F2 w1 P* t/ Y) A( x

0.9331 1.0000 0.9553

9 a0 q; V) H; P

0.9599 0.9553 1.0000

8 {% @8 ?6 N. O$ z' |( P8 Z

2、数据预处理

4 S2 M2 E9 D$ } j0 N! w: d5 X

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

5 O. y6 ]" y1 d! g! j3 a

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

! {; B. m& S3 N$ _- d7 Y

sum(a)

! N j0 y# t/ e* l! s( Y+ U

ans = 13 NaN 13

( y4 Z3 L3 c" `' a( K7 O. V

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

+ o9 D# w6 Y2 N$ ]2 q

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

, ?' L7 |4 p/ S; E" m

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

4 {8 D. S; m5 T' ~6 P0 z# m+ ?' w5 K

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

5 l2 u5 o+ J/ f5 I4 a

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

% S- O {( r. V% x. _' I

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

( b) T, T% Y/ o+ t+ K$ r6 w' }

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

' u. O2 R* X# Q" W7 e+ Q) ~

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

2 }/ ^3 G) J7 T, A0 n1 O

3、回归和曲线拟合

' V9 f% t- ^( `

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

5 a5 S" ?) H. r T; M& q

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

" ~4 f/ u" a* c1 o: e3 Z: f7 u! V

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

4 o* l- F6 p+ e* {7 P5 n+ b/ E

y=[0.5 0.82 1.14 1.25 1.35 1.40];

5 `, n- i5 C5 w* g+ K6 B8 P
( k" X; c8 Y/ e9 @6 r

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

% L& G q! ]6 j

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

) g7 g$ W+ g# a5 ^& f' J; t

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

v$ d# Y5 P1 J! `

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

" I0 ]: C$ q, O4 n5 r) V0 L: l) r& ]

a=X1\y;

- y$ Z+ U l9 J# J4 k

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

a& C* J: u8 L

b=X2\y;

' r% g! F! G1 H( ~8 V6 j/ w* T5 U

T=[0:.1:2.5];

. a" Y! |- i3 [, _

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

' o) L+ e2 r5 o+ B

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

( e2 E2 ^1 g5 J+ A- Z' j

figure(1)

+ e; r) U& ~" l( q

subplot(1,2,1)

; s; h B" i* ?2 o8 N* F# F

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

" n; c8 t& ^* N+ N# o8 h) t

title(多项式回归)

' b1 c7 B- f! K, Z( w1 G \

subplot(1,2,2)

- p5 ~+ e) {3 e+ M* U

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

- n8 Y) } f8 [ D

title(指数函数回归)

, F! q, T9 y# b4 y$ D$ _' E. i
$ D$ S: K7 d1 j) W

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

; x0 z" E- v9 U1 x# A! l

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

! x* N& F: Q$ A6 s n a* w

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

8 n* e0 E4 D: D+ V

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

1 H3 B. Y4 Z6 l. h) |) _- V2 ?/ z

采用来拟合,则有

, j1 y$ b6 D/ N) `1 W

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

9 H$ @( t+ q9 \& E8 F; d6 R

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

1 ^+ A$ U! \5 o5 F. t

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

3 }; Z' g H& Y5 u0 Z5 @% a8 l

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

8 d" n4 X- z- f w: _! p5 ^

a=X\y

* c1 m% ~. W) U5 u8 d6 I

a = 0.1018 0.4844 −0.2847

, I! C: p3 f& p; h

因此数据的拟合模型为

( ^) y( P1 ^! j8 {0 a% ~/ d

y=0.1018+0.4844x1−0.2487x2

0 D. X; u; Q' e5 ]

4、傅里叶分析与FFT

* q0 ^& }- c2 I& ~" F+ r( [

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

2 Y! [1 a; f% D

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

+ F; G, e% N! k' f& M- ^% g$ D. S

t=0:1/119:1;

1 U, g9 Z4 ~: u* B( M8 v d

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

: _. c: G' m& b. T7 ?- B8 ~, [9 T

y=fft(x);

( P: {7 N5 n" t. G, Y. ]. Z5 l

m=abs(y);

! ?4 [1 A# z' V1 b: n

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

- z K6 o% H: [+ n ` l5 C

figure(1)

" u( ] ^6 n' f( }- V

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

' \% c! h$ h6 x( W7 `+ v

title(多频率混合信号)

: C; D7 T0 |3 N- q$ o

ylabel(Input \itx),xlabel(Time )

2 T/ Z T/ O' k' |8 k

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

& {, }, [4 j+ ?/ @4 n/ z5 b f# N

ylabel(Abs. Magnitude),grid on

' e+ d6 C4 {& t4 M7 [0 P( a+ _

xlabel(Frequency (Hertz))

v$ [' \ Q/ ^) a/ A R8 G3 s
1 U1 Q' V9 C g3 L$ D4 [- ^* C( `' Q

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

# J3 Q& D1 y3 h+ e& v. B# N: \2 C0 j

t=0:1/199:1;

' f. P2 [' Q3 ?

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

( f1 N2 Y# J5 R

y=fft(x);

3 F0 k3 M4 C' t

m=abs(y);

" r. l" x! L) x0 Z' K% S3 ?

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

. T$ a2 M7 U8 {/ @8 p4 g3 \9 a. z

figure(1)

$ k+ M' ~+ t& o

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

( C* ^, R( }% Q; J; k6 ?+ I* ~

title(信号检测)

8 w" f+ v& u5 v) o) X) }

ylabel(Input \itx),xlabel(Time )

& r# K5 `( o9 k* n9 O* N

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

; g6 T7 P# a6 S+ v1 b4 U

ylabel(Abs. Magnitude),grid on

$ S4 l! q$ F9 m. C8 n- P5 K

xlabel(Frequency (Hertz))

( ]/ O. N4 x8 X
- G( f* G6 x! H( B

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

' y* i# }% V, h: m0 O) p8 S5 ^

load sunspot.dat

* U+ s/ L$ s* z/ N. q* v/ B

year=sunspot(:,1);

8 ^! R0 @, N0 E8 |

wolfer=sunspot(:,2);

7 h" q' p3 h1 X1 z& R6 I. E5 L; {

figure(1)

$ x- E6 g* Q% z! m5 h1 H' v

subplot(2,1,1)

0 j* j# W7 m7 V

plot(year,wolfer)

; @( W( b# p+ m7 p

title(原始数据)

" O& h* x6 B; Y5 H+ w4 s E0 D& f

Y=fft(wolfer);

- S) d8 k; e0 T" _1 |# b( g

N=length(Y);

5 g+ M; ?( p% [( x0 R+ w0 S9 @8 L

Y(1)=[];

3 o( a/ ~; N2 |% v# B

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

% {' s G9 F$ m& ]6 p

nyquist=1/2;

6 J( P I' P. T& C: p

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

6 L4 t: x4 D& w, q

period=1./freq;

% }% x! V5 D- H7 X/ }' ~: b

subplot(2,1,2)

7 r1 N# T- ~7 X! C( F3 U) Z$ w

plot(period,power)

1 ~, v8 _! c( r9 N- e3 }

title(功率谱), grid on

S. |; F& x, h0 K4 M$ S1 g5 h4 Y2 H

axis([0 40 0 2e7])

% z7 Z) H8 @% {3 {
! p- p: ]- M; e/ M5 h+ X

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

( H. u# K- M7 B# ~, O % B. l& f7 r; b4 z7 m3 ^; O0 b$ J5 o# ^ 9 V3 y+ p$ i4 R6 t6 V! l# y+ { 7 V6 N0 p% _ `9 X, y5 u% ?
回复

举报 使用道具

相关帖子

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