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

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

[复制链接]
- o& H# l& }- h/ z5 L
6 W% W) x9 [- F9 I" s& B

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

2 k: L( m3 p' F8 Q1 R8 e

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

$ P3 @8 X4 l; B; Y1 p) t

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

. h' i# b8 C! t9 D8 ?. H$ a

load count.dat

" R; x, ?3 A# x( b0 A% W/ ^- r0 ~$ a

mx=max(count)

$ C9 B7 x: ?2 X0 S- y1 X0 P

mx = 114 145 257

* d, Q6 H$ F& a# G' j# s

mu=mean(count)

1 f2 \6 q* W) u. m' T

mu = 32.0000 46.5417 65.5833

8 |: a, ?7 q: V+ G( f7 g0 ?

sigma=std(count)

( p, v: P3 N2 A" t( e+ s+ s+ I( N

sigma = 25.3703 41.4057 68.0281

+ O& }3 K0 Z; i" U4 e5 P

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

! F8 t# g$ v8 p: ]

[mx,indx]=min(count)

# f5 z; j1 e! j* M- N q+ Y

mx = 7 9 7

& P4 F! g8 K) Z6 W1 S) I; l/ N- O

indx = 2 23 24

+ s' [' J+ x- v; `8 |. d0 m- K

1、协方差和相关系数

3 i% M; n) Z5 u" j. C

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

2 R$ }& g3 G8 _/ x6 k

cv=cov(count)

9 B+ t$ @" _& H

cv = 1.0e+003 *

6 |$ t1 @. R/ A

0.6437 0.9802 1.6567

" _8 A2 A9 t# s9 u- k! e

0.9802 1.7144 2.6908

- U M' e& r) r/ e

1.6567 2.6908 4.6278

& k! ^0 K0 _% Q$ v

cr=corrcoef(count)

+ g% b9 e. L8 D4 ^

cr =

5 v3 ?% A' j8 w* V$ \0 h+ ~) B8 g

1.0000 0.9331 0.9599

9 J- k" m( q4 v" G. P1 x; P

0.9331 1.0000 0.9553

/ V0 ^0 O5 w8 u; _

0.9599 0.9553 1.0000

7 Y2 b& c7 a% @, L+ m1 w2 T

2、数据预处理

/ n' Q: e! |# t- }2 }

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

2 f- l) D7 \1 R

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

0 @. @- Z4 S0 @, _% {1 B0 L% h

sum(a)

' j$ @0 I$ s# {- ^0 C7 @4 Y. e

ans = 13 NaN 13

O; g7 z: D6 w- u' f

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

+ S: {6 p# ^ k# ]( A1 H/ \+ H

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

0 j! W0 e& M# Y' [6 o! E

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

8 E/ I; S; Y) p2 F

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

/ U% T1 V# e. D' y

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

' a; _+ l5 ~" K6 U% U1 p

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

' W2 h( N6 V, P% B! w; K

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

' M% |* Z% s3 x9 G% B/ _# s

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

9 P% ]' @. ^- L- X

3、回归和曲线拟合

# _5 ]0 A7 x$ y" q3 N% z

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

. }3 w; W5 j+ c5 Z7 h' Q, Q4 k t

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

" T1 h, W- l4 Y

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

; W. X) Z" d: n5 m+ T

y=[0.5 0.82 1.14 1.25 1.35 1.40];

4 j% O- n3 l; I$ K
" L" o1 Y2 I2 \9 M. t

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

8 k4 D# p9 S: n1 h9 i

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

b6 J& ]3 e1 t+ e6 o* B

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

1 g: M! K2 [4 V8 U5 p

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

$ ?$ @2 e) w) P1 v7 e% G

a=X1\y;

* Z) c" p# Y$ }! q+ E& i

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

( B4 O) y2 ^" }7 z& z+ d' B/ p

b=X2\y;

7 G; }' s3 t% E1 x( q m

T=[0:.1:2.5];

9 y) w& P: b E# r9 [ z

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

* y7 t- R6 u( k, F7 I p3 A

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

" y; M6 d( G" w

figure(1)

$ {! i6 Y y1 [$ l2 W

subplot(1,2,1)

# X: r7 _2 | p

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

! Q8 N1 c+ F0 n7 z b% Z

title(多项式回归)

4 u3 U( M( {; x

subplot(1,2,2)

9 H: Q5 H/ L) B' C' }2 S

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

) W/ u8 r7 ~+ N

title(指数函数回归)

. d/ u0 O3 S, D+ C8 U: n. o
5 }5 E- {5 F! x" s

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

4 u, D3 t6 q2 y( d: B# F1 F

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

# Y0 G- T2 ~: n. W* i+ \

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

2 a6 Z# R- g B3 v; l7 U4 ~$ H

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

& X7 P4 U; x2 ]

采用来拟合,则有

3 t" \4 ~) r9 o

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

9 W& v: n& v: g* |3 [) ^

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

5 G- l9 D- k/ w0 Z. m: D

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

6 T# F( m- u) L5 D. l* a

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

O9 d- l' j e( f1 N* }

a=X\y

' H* s: e1 ]2 Q$ P

a = 0.1018 0.4844 −0.2847

. U4 D" d6 b% ^- q

因此数据的拟合模型为

# p. C$ S# R; q0 _, i4 G2 _

y=0.1018+0.4844x1−0.2487x2

) ~: ]+ }& |2 P( E! ^1 z

4、傅里叶分析与FFT

& `" v. @( ?* i% U5 s

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

8 ?" ^& s# N; r: o/ h; @

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

! t4 ~2 X1 |' ?8 T* E

t=0:1/119:1;

& Y/ a) @7 L! z0 Z1 [; d$ u' d4 }2 y

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

( F( q2 @/ d8 x1 B, `

y=fft(x);

* [( z! V& D; K3 y. q$ p) T

m=abs(y);

0 P9 [: C" A3 `+ [& K

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

J" Q8 Z; L8 ]/ h/ C

figure(1)

: I0 m# I) c7 z

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

* ]9 s1 d3 I3 G' s

title(多频率混合信号)

9 U3 S1 N* V1 F3 A4 r

ylabel(Input \itx),xlabel(Time )

# ]' X6 e9 ^5 s

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

* V c4 o4 T& ?& {! e) o+ Y9 j

ylabel(Abs. Magnitude),grid on

+ H8 n" \5 a M% R6 l7 {* o

xlabel(Frequency (Hertz))

# w: v: s6 X- W5 ~8 C/ ~0 u5 f9 ~. r
4 H2 y, t% h! ?, H( }6 E3 u

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

$ ^' L" U6 ^4 ^4 m

t=0:1/199:1;

, p9 O( S/ a) A# U% F

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

* y6 i" {2 Z" I0 |, }* f! |

y=fft(x);

/ c' g& e5 S e3 `

m=abs(y);

6 A7 T6 c& e6 ^: l

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

! k% n8 b( q" p8 _* n; i% o

figure(1)

- B$ J) a$ W" S- Z: g' I

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

. D' N( n) |8 ]% q

title(信号检测)

7 Q9 N3 E+ g* o; u

ylabel(Input \itx),xlabel(Time )

: c8 b4 }9 Y8 A; D" @% A

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

7 K8 k) q& }5 E- i7 b/ B

ylabel(Abs. Magnitude),grid on

/ U- t: ]$ Z; p) e. q

xlabel(Frequency (Hertz))

8 u( C9 ^" ^4 u d& @5 w
* J. A, O0 c) _* z' w9 V3 ^

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

1 q0 ^: W) \, s( @) {. D

load sunspot.dat

4 }4 i" U7 E+ \) Q; a& d

year=sunspot(:,1);

7 |+ r: T; z3 q x+ z+ _- c- s$ |2 L

wolfer=sunspot(:,2);

0 [& ]; o1 L/ W [3 X9 a; u5 }

figure(1)

" V3 U0 r. R, K- t( B

subplot(2,1,1)

( ~2 R5 O0 A, h

plot(year,wolfer)

# N! B: X9 L( N6 a% w6 z

title(原始数据)

' S% X, t+ X. m8 j% V

Y=fft(wolfer);

6 C0 z7 Y# c0 a( }6 S, Y) I

N=length(Y);

# G% h& {% `2 i

Y(1)=[];

, z; z$ N' e- Z# s$ l8 _

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

2 N2 G, c+ E* X/ Z$ ]

nyquist=1/2;

. q6 g S. u; u2 T1 F4 {

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

5 M% F, g3 ~7 h) f( `

period=1./freq;

! }* B6 F9 \3 _

subplot(2,1,2)

7 ^3 ]( f: W4 x$ ]/ n' ^

plot(period,power)

* ~# w6 q V2 S: Y R; r

title(功率谱), grid on

0 F p2 O# ]* i2 L

axis([0 40 0 2e7])

0 j! t7 M" E0 z }% H ?% ?
3 f2 P! \$ i. c, b

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

]. l# B/ h* Y+ k! U/ X 7 l8 n: B& n/ G; D( {$ l% }6 G3 Y9 {3 i1 ^& k2 L , C( o" z5 V v+ J 9 c- O' v' j+ d8 x! m; F
回复

举报 使用道具

相关帖子

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