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

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

[复制链接]
' m' b5 L; P- n
- I) K8 x; o7 n! Y# j3 ]" q4 p: [5 J

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

$ D5 B$ c3 x% L( Z6 e* h

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

& x: b% U5 E& K/ [9 q. H* m+ y: ]

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

6 g( J `! ~6 t* \; e( u

load count.dat

: x6 I" S3 c. N- G: u

mx=max(count)

7 j2 a$ m6 q: I: W& L3 a* Z

mx = 114 145 257

+ w: D6 b* H% Z* F) R( x# @* W4 p. S

mu=mean(count)

+ [" W4 r+ J+ `# u `8 e

mu = 32.0000 46.5417 65.5833

9 i5 d- A, N3 [( A9 A

sigma=std(count)

% a: {% Q; w4 r1 |- V7 l# r

sigma = 25.3703 41.4057 68.0281

i+ A3 F6 W! G- K2 y/ U; w' @7 T

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

7 q2 F# ?9 R% o/ |

[mx,indx]=min(count)

7 u1 z" O! m& a- e% y

mx = 7 9 7

1 p3 u6 O: v- o7 S: q4 ?

indx = 2 23 24

) Z3 }$ o8 F9 a j- i! Q) }

1、协方差和相关系数

, U1 N, v9 B. A( G0 F {: v) a

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

) S- s" t3 M3 Q0 j

cv=cov(count)

3 i) h. @: K: j& ?+ y

cv = 1.0e+003 *

1 V5 v: A1 g% O

0.6437 0.9802 1.6567

, m- Z* D8 G: k+ w/ I; ?8 [9 W2 ]

0.9802 1.7144 2.6908

; j0 b$ Q9 e- r2 E( z4 u

1.6567 2.6908 4.6278

! }* a# |: U$ q! N

cr=corrcoef(count)

; q4 J+ U/ I* v% m" d3 T( }/ B0 l

cr =

" d7 ~- k% N0 @& f" @1 ^

1.0000 0.9331 0.9599

5 P, f. n% ]# y F9 @

0.9331 1.0000 0.9553

* x7 k. O; N2 }0 c+ i

0.9599 0.9553 1.0000

8 D6 P0 b1 p% r+ f

2、数据预处理

2 _1 ?8 S( G5 ?4 G7 c

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

9 I r: q6 O& e7 o- S" i9 H

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

$ l6 B% O! m( U* {& k

sum(a)

t% C" C( N+ A( x! S% X- X

ans = 13 NaN 13

8 k( E% Y9 p7 N/ b$ H

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

/ M8 n6 X* e7 Y* ?8 s: j! Z$ b* @5 {

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

. e5 w4 r# o9 @0 s3 d( p. O% Y: b

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

% D) m4 j# i' o' I0 \; P& w

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

# B% ?8 q* Y' m5 w0 A

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

6 I# E x( O9 l% U$ T

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

# V! B* b& V* m4 ^3 v$ H- y0 v" i

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

/ Y4 H4 d6 A* t5 e' |8 X

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

7 ?" U; x/ n; x5 Q

3、回归和曲线拟合

; N3 i/ _5 [' h+ i

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

2 U s8 |4 F8 f2 |2 Z& t

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

* P% S* r6 b, r, @5 W8 D8 E

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

& k) _" ?. C2 H, H7 o3 k

y=[0.5 0.82 1.14 1.25 1.35 1.40];

6 L0 c9 a, ^ v/ D$ s1 j/ [
# C" p4 j: q1 Z7 e9 @

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

! T5 X' P) E6 W/ _5 G# p

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

* Y: M0 A: r: Z

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

' Y; \7 h! j p' _

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

0 U9 y5 T a h% L% o4 j

a=X1\y;

0 j; m Y+ Z9 }# V+ ]' C

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

Z/ ^9 U$ b2 y) ^4 Y3 ?: ]

b=X2\y;

! b2 U- y6 h" n5 d) ?

T=[0:.1:2.5];

: w- X& Q- B8 p

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

3 [; H& U- ?7 J

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

" T+ ]; X* B( R1 j

figure(1)

& R9 e( {9 v" e" Z. O) F( F0 y- u

subplot(1,2,1)

, G0 b f" z& |' s- D5 J1 `/ d

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

- G+ h/ j: i+ x7 Y) x" i( P. w9 {

title(多项式回归)

4 S5 e- [) q$ k* M# `* Z6 A

subplot(1,2,2)

1 T2 k n! I1 y

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

/ Q- b# t, f0 h }: w8 U/ v7 W

title(指数函数回归)

& G1 f Y% O' ]' H* Z
3 W4 u1 C- ]% p1 k0 R

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

& y3 ]* r8 ~9 l+ U* k% a3 \; h3 h

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

% q" v0 G1 s5 |1 H

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

% Z" ]! `2 r$ S& K: z3 C

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

" H8 F4 L% J- ~# v f# G

采用来拟合,则有

+ ^5 d, m6 g6 \# G& h# W

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

! a' G) i9 X9 j& s

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

0 S+ h4 W* J) Z1 N+ _. o

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

. s& \: k8 O$ s( k7 O

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

+ c& a! u6 U! O1 ?! ]/ e$ r1 a

a=X\y

: w& r7 P3 R" E5 }+ }

a = 0.1018 0.4844 −0.2847

- R% d& z) y& o

因此数据的拟合模型为

- R* M8 J z( h: [2 S. K

y=0.1018+0.4844x1−0.2487x2

: n* N5 P5 ?/ X2 ]+ F; E* m7 a9 N

4、傅里叶分析与FFT

7 _- j5 |% I) ?! y$ D

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

7 h- {; }. h" }/ y& a X# A

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

( x# v- A7 w/ o. D& J8 \( y

t=0:1/119:1;

. P0 ~; J3 }! p" ?0 b3 Y! r+ |0 f

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

$ \1 T |4 i- o1 n5 d) U

y=fft(x);

$ I* h7 h( m. P9 c, ?

m=abs(y);

% \0 Q7 l1 A. z$ v* {# q

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

7 w4 y+ U, O+ `1 x) R( N* G

figure(1)

/ Y6 } i6 Y3 r$ `. | \1 }$ [; T/ H

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

9 B) D5 I- M+ @( J. r" x

title(多频率混合信号)

E3 {' D! e) ]( c( C+ |

ylabel(Input \itx),xlabel(Time )

& y. E a" e* F) C4 F8 {1 L! E# o

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

/ l$ j7 ~7 h) Y+ c1 d* D6 m: U5 y

ylabel(Abs. Magnitude),grid on

4 \& v! b* u4 U1 \: z

xlabel(Frequency (Hertz))

9 T+ J- s% z2 {9 L. ^
. g. R5 A9 _$ l3 [1 H5 K

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

6 L5 b# \% y2 m4 n0 Z3 H* h% j

t=0:1/199:1;

: y6 [" a2 R3 X. c \4 g

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

+ ^% P3 K; U" z$ T

y=fft(x);

4 V5 c5 n. i) f# ?' D& W

m=abs(y);

- V& _: S n. c# ]! F- B2 o

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

: ?1 z% E5 w2 [4 f# o4 W

figure(1)

+ s5 q4 z& x9 a8 q

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

2 D! W s$ G# N& h! X0 l- }8 v

title(信号检测)

+ ~, l2 A) e6 @# s, L9 U

ylabel(Input \itx),xlabel(Time )

+ P# o o* y1 B

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

% |$ s* J/ \4 O% F4 i- D: \

ylabel(Abs. Magnitude),grid on

4 ~* b! v) U2 r. n! h4 J

xlabel(Frequency (Hertz))

! C9 ?: y$ T( `
: z; f% O# f$ A4 {* L, a6 u" q) h

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

" g% S8 x$ W* e1 K# T

load sunspot.dat

. Y8 G. j6 e1 V" E9 b$ y

year=sunspot(:,1);

! C' c% R% n) X% c% J

wolfer=sunspot(:,2);

" W5 }3 R: l% X

figure(1)

- R. v5 e. H: D

subplot(2,1,1)

! k1 A% ~' r7 A3 K% G% j7 J

plot(year,wolfer)

9 Q* ~# m: F+ b: j0 |& @ |

title(原始数据)

, _" j+ @: N9 G/ X& c {

Y=fft(wolfer);

/ ~ h+ |7 n& N1 E9 T: [7 P1 A- W2 [! J4 D

N=length(Y);

. \, h% u* I' w" q

Y(1)=[];

6 a1 @2 z4 x" H' J% T& o9 N

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

3 g! ~/ U" r( F; m; G7 |

nyquist=1/2;

) M6 [7 @( e: M5 V, O/ W- U- E1 Z7 \

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

! h( M% Y; @- j# p# G* u& q+ U

period=1./freq;

* |. @; B, y: M( F

subplot(2,1,2)

* v3 G- r' Y; }/ c e8 [' F. l4 V

plot(period,power)

9 B1 S# e# E* Q0 r& d

title(功率谱), grid on

; N! H6 J0 _# f4 J% f* C

axis([0 40 0 2e7])

) `# \" c0 \9 J8 A i' w; W
( V: s3 s+ D2 s* }$ U

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

1 E! q: ]3 J `1 ?1 X0 U6 O9 L3 v+ C - C0 T2 U* q8 p% g; ^ ( G' \) J' Q5 \; o& d: H4 p* Y0 f 5 d( W* H3 c$ |3 H& o
回复

举报 使用道具

相关帖子

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