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

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

[复制链接]
1 d5 [" M. D% O9 ^/ G$ U
0 Q; ~2 u* _1 v- w9 C

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

7 W1 P0 f- [1 y1 l

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

2 }) B2 y. N. t4 `2 ?9 J4 w. P

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

5 E7 t6 ]1 f& d' K( E" t, M- K* O5 W

load count.dat

" Q6 G1 x. v9 a8 T" n

mx=max(count)

7 A0 i1 u i1 H6 m5 f

mx = 114 145 257

( a6 h2 W) k* d* u8 z1 b) O

mu=mean(count)

; V* B0 b2 e9 e# _. }

mu = 32.0000 46.5417 65.5833

1 Y* B- r4 h2 k4 A" A, _# D' E& q

sigma=std(count)

: p4 j1 C/ I/ y3 u; h$ Z. J

sigma = 25.3703 41.4057 68.0281

$ \" ^1 w0 E. |7 y/ v U

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

0 Y! W6 E: p, T* p

[mx,indx]=min(count)

' G! P8 X% U6 L% K% @! e

mx = 7 9 7

$ w: L, {5 \/ R

indx = 2 23 24

- }, {. ~- E. i

1、协方差和相关系数

' M. D" A$ E4 E+ a$ F0 r

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

$ d) n! L2 Z8 R' O; a- G6 P

cv=cov(count)

' I% W; r7 }2 o' a+ U

cv = 1.0e+003 *

' T& ^8 J# z3 \

0.6437 0.9802 1.6567

6 F6 Z9 u) c# m5 j) V

0.9802 1.7144 2.6908

. @1 [; ]" b8 x3 M

1.6567 2.6908 4.6278

' v+ N) H6 B/ M+ w3 ~: p8 W

cr=corrcoef(count)

9 e, k9 F0 }( `! T5 ~7 j

cr =

4 s6 g$ k* R* y; Z

1.0000 0.9331 0.9599

7 b$ T/ J/ d5 N: y

0.9331 1.0000 0.9553

8 a: |7 ^) D- w8 [9 R! b

0.9599 0.9553 1.0000

$ {4 f9 g& p ~; ~! B7 \" [

2、数据预处理

* Q V9 s5 T! [: f4 g1 [

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

" H f& y; p& [: ^

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

4 d0 k0 |7 @" t( Q- H8 L: }

sum(a)

/ f! w8 C% Z+ f: k$ }2 F* H. i

ans = 13 NaN 13

( R7 N6 {! d5 i2 G

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

) j4 \; q: M/ y/ ^. u, x

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

# e) A/ v. f% z, K& F5 |! z

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

' c3 u& L6 V! Z' \& p0 T$ |$ x7 ]! X

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

0 J; i' E' U+ s6 K

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

5 d; p; W2 B* U! I- J

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

. p# c+ z& Y& o( {. P! {

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

" l8 U0 P2 j( a) |4 t: O9 x4 R* \

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

/ M* U* ?7 m% _: v( c! j

3、回归和曲线拟合

5 `# x0 B; m6 O5 e& F

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

8 m5 M. N: F+ ^, k$ D& A

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

6 f' o7 Z9 Q/ Z4 n- l& f; S

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

/ W. s5 }9 |3 |" {. L+ W

y=[0.5 0.82 1.14 1.25 1.35 1.40];

2 E0 ~( V V9 B
3 v# d2 l" b0 ~4 [/ `. ^

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

. e9 |4 P. w6 q$ x9 B6 _

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

+ i2 p7 d6 z6 ]5 `1 g, C8 b" [ G

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

8 s i, q# @% ^$ D" L

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

: i* A% H* G0 {2 T" u

a=X1\y;

+ I* E: g/ D; f5 S1 C

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

# Y2 {4 h2 a( i h$ @8 H, p

b=X2\y;

4 G* ~' b7 T/ `- q" P( i* V; A; `8 b

T=[0:.1:2.5];

9 h0 o& f7 |- I4 r1 w

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

( y4 K9 A8 q: c8 h

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

+ V( G) K3 y' s8 p. R2 g

figure(1)

3 E3 @# V. ~0 U

subplot(1,2,1)

; U9 M5 ]. w% r9 x; A& F: w- u

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

- J6 q: C0 U* `% |: U

title(多项式回归)

4 e- @! s; T2 K5 n

subplot(1,2,2)

: h3 D. G( z/ V1 |) [' ?5 w

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

* P( v/ D& B- ?+ ^" F3 x3 w `

title(指数函数回归)

1 d* b7 W$ L v# Y4 r
( e. a9 i+ u* U- Y5 s

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

% j/ z4 u3 ^! w! b9 U B* c: H2 S

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

% L+ R# f5 q3 U' V# J

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

4 s; Q* f4 M# X0 K

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

& S7 u1 q2 ^/ U5 {9 I" W

采用来拟合,则有

3 u/ x+ R" w+ _0 w& x& t

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

4 z; P( s5 V5 @7 {8 L) y* ~, f, H

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

4 ]# Y4 i: e) O

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

i/ `* m8 D* P4 I6 q3 \

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

, T; R1 J5 ]' z5 Y2 Q, f

a=X\y

; B3 h1 \" |2 D& W8 _

a = 0.1018 0.4844 −0.2847

7 s% A% D# ^3 X5 R8 t- e/ U) v" z6 n

因此数据的拟合模型为

. e# P! K# f( H- [" A* V) w3 U

y=0.1018+0.4844x1−0.2487x2

/ s/ C! R5 R( q$ F- Z# b' q6 R

4、傅里叶分析与FFT

' [. R- [; M2 f( ~

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

( t9 A/ I( {& j; i2 k( ?

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

+ Y0 }# W1 ]' I; v

t=0:1/119:1;

5 `' w" j+ d' s# I$ s* ~6 e! {% b

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

/ L9 T; @8 J6 @5 ]4 s- v; m

y=fft(x);

' Z* O1 G5 q' N) G* p5 A8 R8 a% j( I O

m=abs(y);

+ g% p. h, {/ }. |( P

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

; G: E4 k% W$ S% l5 c

figure(1)

' \& G: z% }. B( K2 f- W: T6 L

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

' K, c9 z8 {$ u" O/ V1 Y

title(多频率混合信号)

# m) f4 _* E6 V/ ]; \

ylabel(Input \itx),xlabel(Time )

4 A7 G3 z% z `/ P1 l9 V, S, B! q4 C

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

" U/ Z0 q: O& S* O% ~* Y

ylabel(Abs. Magnitude),grid on

( F9 [2 ^! R0 b

xlabel(Frequency (Hertz))

" Q/ g- e1 u* }; H! a
' }0 h3 O% ` Q! b- ^6 r

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

, _/ W" R1 x# o

t=0:1/199:1;

" }, L8 H: w& d& i& X& Z3 k; H

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

( R. K/ B% S5 B/ F

y=fft(x);

8 R& d" m! ]2 q* W( {& k

m=abs(y);

. Q$ a2 e( l/ V0 j

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

" H3 A+ Y1 _. d! F- ~/ m w1 n2 x5 ?

figure(1)

; M4 \! M8 v2 C; a7 U

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

; W+ n/ ^2 N p: A

title(信号检测)

$ c( C' \3 l! V- Y% }5 e

ylabel(Input \itx),xlabel(Time )

* t) L( D$ X9 R: @2 s

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

& j! n7 l4 R+ g

ylabel(Abs. Magnitude),grid on

/ `7 C6 v8 A# v+ d+ @. Q

xlabel(Frequency (Hertz))

Y7 g' w! r0 A& _8 T/ x5 d3 m
0 u( {& B, M+ {2 V( p) Z' }4 `

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

! v& h) N; A: q( N

load sunspot.dat

6 Z+ C: E, H, i2 r

year=sunspot(:,1);

+ Y' m: J: ?+ G- a o, m0 b

wolfer=sunspot(:,2);

/ {% ]8 Y- S0 s6 ]

figure(1)

; f! e% ~6 c: `2 o6 I1 U6 }

subplot(2,1,1)

$ }: ], x% A3 x, r. v# Q& t% |) j

plot(year,wolfer)

7 P7 f. e( e8 F V2 l/ j9 c1 _

title(原始数据)

9 Z- b- r6 m7 [! ^, i5 \

Y=fft(wolfer);

& V( N' D/ Y0 c' u$ M

N=length(Y);

& d# u+ V: ^9 ~( t3 [1 p

Y(1)=[];

* L- q: u% p6 l5 J* a

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

+ Y; f7 a+ e- E- k" N- d: J

nyquist=1/2;

+ O/ w9 B( E" | c6 n, R* l

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

, p% O2 o* G% A* C3 b

period=1./freq;

9 P5 \1 j/ y" A! e

subplot(2,1,2)

8 j4 _, [2 }% O

plot(period,power)

# I2 b U2 a% m

title(功率谱), grid on

1 q7 u$ o; m) _0 d

axis([0 40 0 2e7])

' U3 I1 I j( y) W
7 }! a# J- f! U, C5 Z1 F; j& J% i

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

; Q" q1 l* B2 D$ K3 B $ G4 P; ^# f" u. N3 o/ j; Q - f# i9 a0 M/ G' M7 I y & E. v& O* d% Q$ ^* a # |& @, U+ l6 J* x! X3 U* o
回复

举报 使用道具

相关帖子

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