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

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

[复制链接]
4 D2 ]+ c8 M3 u& z* _) ?
. Z1 m% B1 e, j- n% |& O- Y

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

0 q; @; C2 `9 p! T

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

' d$ x8 x7 G. h2 _8 H: P

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

, |, S" N- \6 P7 `3 y. a

load count.dat

3 b3 J# I h3 g

mx=max(count)

0 P; t4 @( v2 n5 S

mx = 114 145 257

- t, c9 O ~* \" M6 k

mu=mean(count)

* g4 f/ C! {" S+ {4 W; E$ }

mu = 32.0000 46.5417 65.5833

3 s8 }9 {4 D7 } `/ m/ W% P

sigma=std(count)

' b3 x3 t% O! N+ \

sigma = 25.3703 41.4057 68.0281

$ ~$ Q# A7 p9 T( L, i, _

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

% _* M7 i/ L" }3 _/ b/ R: p; ]$ E

[mx,indx]=min(count)

. W3 Y K4 X& w4 r7 @( I8 }% h$ A

mx = 7 9 7

2 J3 z. B! Q9 m' r, E* H/ ^

indx = 2 23 24

5 A' P6 }; w. ~

1、协方差和相关系数

4 M& o( C8 r6 C/ A! h, z: v( W- T5 K& O' U

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

$ f9 F* K9 I% O. N8 \, R) G

cv=cov(count)

0 e- \' y, F; q; L& S* ^3 ?% d

cv = 1.0e+003 *

! Y- J: B5 i5 [; \: r

0.6437 0.9802 1.6567

* X$ \) W0 X: F( |7 e$ C6 w

0.9802 1.7144 2.6908

; m# Z9 u3 y# }8 X: D7 K: P

1.6567 2.6908 4.6278

6 U O @0 R& @. I. S6 ]3 X M

cr=corrcoef(count)

1 n0 n5 M% @& e. @& a* k

cr =

1 ^8 A9 O c5 \, s

1.0000 0.9331 0.9599

2 b2 W; i9 j' J( O* i+ e3 X

0.9331 1.0000 0.9553

2 U7 t' N q6 m

0.9599 0.9553 1.0000

. I3 c* I: Z; t: d

2、数据预处理

3 z3 x4 f9 C5 I) I% F

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

5 T( f4 f0 n7 y5 e2 J9 {3 `

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

. _1 `- {$ k3 T% k

sum(a)

( W. e$ T% I" ^

ans = 13 NaN 13

8 R3 }3 \' w/ [; u4 J) _) P/ j

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

' M0 G0 X0 r. N& \7 }

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

3 B9 r% W+ \5 u9 ~" \

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

( ~5 m' \- C( N, ?

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

/ M5 {+ y' D e- R0 k% ? U

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

+ {3 T$ n- \1 J% `+ Z- n$ Z. h

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

7 N$ v, Q \5 L' x& }' [

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

: a% C: G0 q: d' o9 S% n6 |! V

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

0 m& g0 \, ]9 f5 V5 V& Z0 C/ V0 o

3、回归和曲线拟合

0 w& R. p) l, j8 g, R8 S# e9 U I

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

$ c& O1 m5 D" p4 `/ u( b

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

$ f4 K7 ^: E u

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

2 _0 B+ ]/ g4 [% e3 K1 l

y=[0.5 0.82 1.14 1.25 1.35 1.40];

, _5 Q6 Z2 M! [0 l
/ A# s- H' O0 d* ?& ^5 Q7 ^

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

4 g- e s; [& v

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

' I P4 Q3 n$ Q) ^; B& g. r

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

: R% N# p/ {2 w6 W- w" `/ _7 m& s) u

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

0 I6 c, X+ c% V0 H: X

a=X1\y;

1 z- U i: e2 e3 w

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

( J$ g1 |+ x% G

b=X2\y;

9 }- z0 i2 X! M w' T1 Y

T=[0:.1:2.5];

. ?! Q! J' S, `3 l/ U

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

& k& d5 g& _$ K! q; F) g

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

3 T o2 q5 `% H9 Y" t9 `

figure(1)

9 d' Z% T% ?" i/ r9 j! ^$ D

subplot(1,2,1)

0 \6 N3 A& }0 X7 m- M- r g

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

5 L a3 z; P y# p7 w

title(多项式回归)

& L% N4 _5 k. r

subplot(1,2,2)

; D: ^: Z3 Q, m' U0 Y

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

[- M9 D/ R& O. }& w0 C' T3 \9 B& K

title(指数函数回归)

- ~) g2 g; N# _8 }( }2 ?8 S- u
% z* Y0 H% e4 X9 G: ?3 v

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

: {! W; P: V/ c8 O) d3 P* {6 Q

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

5 v% x, f' q1 K9 J6 Z

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

5 \+ \4 W5 S w0 j9 e0 f

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

9 M6 O$ }, Q, ]8 ^7 A0 C$ K2 X% `

采用来拟合,则有

3 g1 l( P4 Y8 A# d) V

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

J% F2 r5 q7 x

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

! H9 h, v" O: M6 R" Z! C

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

$ `' F+ t6 u+ W. ^% b2 w. k/ P

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

* E5 t- _ ?; s4 l$ W

a=X\y

0 P i9 E: C* v0 M. Y9 F, t* u. X

a = 0.1018 0.4844 −0.2847

1 R, z! S. |# q0 V! ^! _

因此数据的拟合模型为

c- {- Z' v) I# U

y=0.1018+0.4844x1−0.2487x2

# |2 W9 M3 D/ O4 Q

4、傅里叶分析与FFT

9 {: W. L4 S9 H. c9 v# @

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

7 @; O0 S; M) g5 j

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

6 n3 k# ^- U3 \$ g6 X( x

t=0:1/119:1;

+ B' \5 b5 w: t* A

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

# b1 A9 v3 o. k: w4 q; c4 Q

y=fft(x);

7 N$ \2 ^: `, `7 ^+ q4 y0 F

m=abs(y);

& }3 j2 I3 G6 c1 H: H

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

& X/ X& S$ A6 o7 v2 t5 O9 D \1 G+ r

figure(1)

- d. D1 D, m' p" ?

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

- ^7 C0 Q# [- a3 ^1 A4 l

title(多频率混合信号)

$ }& U$ M5 s$ {( F* `

ylabel(Input \itx),xlabel(Time )

% q2 N6 t+ V3 m$ _( r0 L9 t

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

' o c/ y& a8 ~

ylabel(Abs. Magnitude),grid on

# C2 m2 T2 o c6 p7 J7 u

xlabel(Frequency (Hertz))

; K) N/ u) h& x) v8 U# p7 h) d7 x3 J
6 h3 k" M3 H, w4 [& ^9 V

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

' G, o$ B( G: S

t=0:1/199:1;

4 x% U) P+ _3 |' R& t7 q* {# }6 \

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

9 ^. M4 p0 ^" F" n

y=fft(x);

! F6 U, ?, J8 p: Q

m=abs(y);

5 [6 @9 S6 J& m L6 G' `3 E

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

1 X" P' W' ]1 z, g$ o2 \8 S

figure(1)

! @, g7 ~, I" I1 U* k9 N& {

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

6 ~# ?% Y5 z( V {) j1 I

title(信号检测)

. N% R& I% ]5 o$ g }

ylabel(Input \itx),xlabel(Time )

! A$ ~8 j0 @$ w& l

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

+ B( e. [0 }; A1 U" M& w

ylabel(Abs. Magnitude),grid on

+ m" b( g9 K! r8 n7 Z

xlabel(Frequency (Hertz))

) P2 B' m1 H( W, `* ~: {; @1 a
! X1 P( E8 j! H% o9 [

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

: u j1 \! E5 x% _, i5 x* e

load sunspot.dat

) P$ z. _0 m; L4 e: n2 v: l; u0 B

year=sunspot(:,1);

1 T1 l" C% }/ M& L& y: H5 h8 {5 X) X

wolfer=sunspot(:,2);

! g' ^0 A8 {& l+ @

figure(1)

1 L! S. G5 r. {% t# n; W! h8 i( m4 g

subplot(2,1,1)

/ i/ A* N! A1 n+ M- _/ ~& t+ a

plot(year,wolfer)

5 M; i# I7 n& Z$ Z; N& h' x/ Z

title(原始数据)

% ~" {) q' d1 s" M

Y=fft(wolfer);

& j) h6 _/ ^7 V

N=length(Y);

" w& P, Y7 G5 z$ w7 H) T9 ~8 f% p% i

Y(1)=[];

?( _- R6 Q! M

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

X& |4 N- p5 v; W) W

nyquist=1/2;

6 |$ B+ I: \+ t' I+ P; W

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

' j: D( g. o, g# r; O

period=1./freq;

3 A6 c9 F6 h& q+ l! g5 O' Q

subplot(2,1,2)

( t0 P# @" T9 A

plot(period,power)

* Q$ h' k6 S( ^

title(功率谱), grid on

& m- L/ v( D, Y% W$ }" i1 g

axis([0 40 0 2e7])

8 {3 {! X( a5 g. Y% E! G" J
& w4 k8 K# `) C6 F# L9 }

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

4 ]5 p7 [! |4 n * p' J8 g0 g1 C& c- T ( i7 j$ k. a) f" i* Y( _ + l* f8 o3 F( r9 J5 J) p) r1 n: B3 t5 r3 J
回复

举报 使用道具

相关帖子

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