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

[复制链接]
- ~$ }5 ~5 Y! Q* I+ f& P
4 _6 C4 l3 c3 U8 Z

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

2 {' _% c- U5 d/ D( m3 D6 S

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

. B9 ]" n4 r' w+ m% T+ m5 S {

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

" W7 a& Q: b5 F: R

load count.dat

3 ~+ P0 v7 C9 y; {8 d8 \/ C

mx=max(count)

: B% A% ]0 a/ X+ r, m. `

mx = 114 145 257

3 }- _) a+ G! O, c

mu=mean(count)

- l+ m, O1 @0 a$ C- @/ N" y

mu = 32.0000 46.5417 65.5833

% I) Z X4 J+ J* o! r" C. d

sigma=std(count)

9 ]5 O% f9 b+ H& [/ ~" ?

sigma = 25.3703 41.4057 68.0281

, Z4 s' C2 v) m1 V

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

/ L( F( O$ q+ @$ e% B' u

[mx,indx]=min(count)

0 }7 ?6 ]$ i; L Y+ L

mx = 7 9 7

( E2 a' u$ F$ ?7 l4 ]: y

indx = 2 23 24

- A% r" t9 T% x

1、协方差和相关系数

) c8 _& Z: V% O* G& J9 ?

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

4 P2 I7 I/ \( X6 o# Z/ @2 _) M/ v

cv=cov(count)

, g1 U* v* q* I, m9 H2 g3 V% \

cv = 1.0e+003 *

' B7 ^5 M# x0 `. h

0.6437 0.9802 1.6567

4 @- R8 t* g/ [; N5 U4 {

0.9802 1.7144 2.6908

: \# _; Z' V/ o% ?& ^5 l* W

1.6567 2.6908 4.6278

( L: t. Q7 T7 c. R* j, c) ~' ^

cr=corrcoef(count)

6 ~: c9 d- @! y4 `' s# d) l

cr =

8 m# G, y4 V6 o5 y3 ?

1.0000 0.9331 0.9599

2 r( x. V- U3 _5 p" _

0.9331 1.0000 0.9553

# a/ w. M! Z) l

0.9599 0.9553 1.0000

4 e6 G% n% k2 s+ N

2、数据预处理

. C) t8 Z% I" Q! h

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

7 {' w( |1 U+ b4 i) u% N

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

/ [$ O. ~: z2 |& f9 j) _* g6 P* A! F

sum(a)

$ h* y, m' T @* S3 o

ans = 13 NaN 13

: E0 T' g& x/ ?4 t

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

9 N% |3 _, N3 e5 o( e1 t

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

- s# U- u8 @) q" ?" _

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

. y5 ~7 S( ?, g$ B

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

2 J$ g1 G# k$ S% h8 j9 V6 _

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

" V* J+ T: R' N: o! a( h7 v

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

1 s# e$ q }+ C4 _! z& ]3 z

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

7 ~; x* E& c$ L/ p+ U- O+ B

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

2 H: E7 [* l9 O

3、回归和曲线拟合

4 M0 L1 E% U* f/ @6 G; x9 ^) E

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

( q7 A8 v* u! q7 z

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

5 Z6 }+ a8 V8 d5 k8 q1 H

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

! `% [# x! [* P1 S. Z

y=[0.5 0.82 1.14 1.25 1.35 1.40];

: Q! y" W" T0 z- Q8 M) V* A, z1 G
; e" _, i2 h6 k1 Q5 _( y" f# b% m

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

* B/ ^' S) f' }$ ]1 k( ~

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

6 K5 }* j6 C5 I1 Y$ T5 i

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

+ Q1 K4 `1 _$ B9 K1 q) ? v

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

2 Y, _+ ?! @: {# _- T

a=X1\y;

" f/ e3 ]- @& ^

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

& o7 {: k% \/ ~( V. P

b=X2\y;

, Z4 }# R3 ~$ N4 Q! R4 }1 V

T=[0:.1:2.5];

7 b2 s! Y% E0 c+ l4 \+ V$ V7 I

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

, Y: o' L2 j9 Y+ ~# J# b

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

0 v5 m' X4 }( G1 F- P

figure(1)

- h) `. C' \% ]9 d+ O" J# e

subplot(1,2,1)

7 H! _7 p0 R r) A) ~

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

: U. Z% W: {" [, e* @6 O6 |8 I

title(多项式回归)

) {8 J5 X' }4 V9 b- u7 L

subplot(1,2,2)

5 Q* i3 t; C0 I5 f9 Z1 y' @

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

" v! d" g( r' g( ~9 L2 m# i

title(指数函数回归)

% e* U' |; F) A, R; v
2 a; r5 y0 B( o8 X- M9 E

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

6 ^" S8 H# B0 z- ?) J2 O0 T4 N! q9 Y

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

2 S' n' L" N. m1 S

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

4 g( B$ O$ w& ?0 o

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

$ T! ], U7 U1 F$ h

采用来拟合,则有

7 M5 i3 ~7 J% e% c8 Q

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

5 @% ^2 D& z0 e7 W+ c& M

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

# c4 l. c) T4 {# t3 L/ B( c. A

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

/ \) {! G+ C/ R! ~+ a8 G7 y) k4 R0 e

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

$ j8 g8 i& i: f7 R1 C5 w4 _

a=X\y

! G( A/ V4 `( I& j/ E% n: S

a = 0.1018 0.4844 −0.2847

2 c. H' Z/ t8 i) y- f

因此数据的拟合模型为

+ a3 ]+ I; I. A! H0 k

y=0.1018+0.4844x1−0.2487x2

- d9 [, z/ ?$ K4 e. U( a3 @

4、傅里叶分析与FFT

$ k. H; G, H! r6 R7 N

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

m1 C4 M2 m. E# Z7 t2 o* A6 P

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

5 A8 b1 l# i- D# a% u2 ^

t=0:1/119:1;

c* i6 s7 _# V& K8 s1 \- Y2 d

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

; ~, A/ u% n! V7 L+ W8 q/ ~

y=fft(x);

. ~, V1 n4 ~4 Z6 n- C

m=abs(y);

0 v$ u7 Y% ^9 ~5 M4 X

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

9 J5 n# s$ O( y f& w4 f9 k

figure(1)

! R: Q9 E5 |: s, L

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

5 T% W; K4 W4 a$ \6 K" } r+ R+ C1 q `

title(多频率混合信号)

2 R: @0 \! E7 N" b2 |/ C

ylabel(Input \itx),xlabel(Time )

2 M; J& r0 v8 ~6 c' O: s

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

s2 [9 e, r" p8 F: u

ylabel(Abs. Magnitude),grid on

' s4 H. f7 j" x4 ^* M& O3 r7 D

xlabel(Frequency (Hertz))

4 S, f! o2 q: `
$ i- F5 k9 `1 `) V& W

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

) Z; k( M7 M8 S; |. v

t=0:1/199:1;

7 a, E/ Q& O6 K+ W5 N( U2 d! I

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

, G( t9 k+ `+ g8 n

y=fft(x);

0 Q# n+ ~, w2 ^! p

m=abs(y);

" B0 D$ |0 Y* ~

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

- d0 H' k4 l6 M3 w( [

figure(1)

* x% l3 d- K; e+ _7 e6 y. W

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

6 s. d0 _! W$ ~4 `

title(信号检测)

/ f4 l* n: x- t% J, \( w; J

ylabel(Input \itx),xlabel(Time )

% h8 _, {" _. J3 X% B

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

. n4 v# I1 M6 D8 N: Y, j

ylabel(Abs. Magnitude),grid on

: D: \3 j7 l: y0 ?3 q/ U

xlabel(Frequency (Hertz))

3 ~8 y# J* ~4 e
8 t/ g! T) [: g) L, x- P7 A& d# W4 i. j

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

0 l2 y% s5 F% Q% k5 \

load sunspot.dat

0 P& W8 ]2 V/ r8 Y/ h

year=sunspot(:,1);

( n. ~* B* ^9 C0 y

wolfer=sunspot(:,2);

7 Q( V4 _2 R; O9 t. A# z" ]

figure(1)

; {0 \! m) A+ H

subplot(2,1,1)

9 b4 Y* |: o: a! o0 d4 W

plot(year,wolfer)

+ q9 U: G( K. Y7 ^8 m3 ?+ ?6 m

title(原始数据)

+ g6 u4 d4 [7 f. K1 ~

Y=fft(wolfer);

/ t3 h* O2 ^9 s" @3 n

N=length(Y);

' E/ \& j; T4 O: _0 k

Y(1)=[];

6 _$ @% {. \4 K5 }3 g7 K' @

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

' o5 _2 Y+ V* l, @

nyquist=1/2;

# D# g( r* j g7 F& T) c$ L

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

9 C% `9 a- s C8 L

period=1./freq;

# }' K! G, R1 t% b+ \/ g

subplot(2,1,2)

! Z% Z+ @8 ?( K

plot(period,power)

. M& E4 ]- g$ a* ]) Z- A$ e5 D# s) b

title(功率谱), grid on

9 o% Z* \ r( c

axis([0 40 0 2e7])

. U0 Z( G$ C& J) r* X
, Z* w! E: o7 o% N3 }

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

0 f0 [0 h# ^# f* h/ G' B: i1 m* ?! S: a- n2 z& ? ' ]! C1 h8 u* \ E" w ( t6 ?" J7 a! s. j+ c. s( A' e: l/ i$ [+ }% z8 M& N
回复

举报 使用道具

相关帖子

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