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

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

[复制链接]
# I! W2 |2 y* ~5 v! N
3 N9 W* E$ X e3 u. f. @3 W

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

0 N5 D+ r1 i! [& q3 o1 ?& A& H

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

& V& X/ t0 o) Q

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

- P1 `8 C& c7 k$ `- O* z2 u

load count.dat

4 M- `; i% x( C. V, h

mx=max(count)

' a5 B* I3 b, ?# z6 c

mx = 114 145 257

, {, B8 K J v i# P% ?( `; M

mu=mean(count)

2 D/ J# j* V7 N' {- @

mu = 32.0000 46.5417 65.5833

4 U/ D$ @& y# `# l( y' B

sigma=std(count)

0 t# @7 P+ [( V7 u- X3 K9 J [

sigma = 25.3703 41.4057 68.0281

8 a1 r) E7 [1 t

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

: }4 o) D$ e& N3 X* H

[mx,indx]=min(count)

& I6 ^6 F0 {$ R* b, d1 e6 i9 O) r9 T

mx = 7 9 7

( @8 K1 A5 M1 y, w( m

indx = 2 23 24

+ m, y- l" v$ A( w+ W. U( Z8 U

1、协方差和相关系数

1 _( ^. E7 D0 D7 y$ V) e7 M

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

/ R* G$ N6 @5 p! N. V

cv=cov(count)

3 @* |9 o6 M V k3 a% ~. d/ s0 U7 y3 h; j3 z

cv = 1.0e+003 *

- U1 y. w+ u1 n6 L; r+ I: w& U

0.6437 0.9802 1.6567

( Y& P% r+ j* p1 \2 ], J

0.9802 1.7144 2.6908

6 m# N4 F% {* B+ J% |3 g: ]; N9 R

1.6567 2.6908 4.6278

`% L* _* b ^) v, X( _( y5 A

cr=corrcoef(count)

" _/ @1 j9 A+ K0 A& ~) e

cr =

- O4 @* V- o/ Z; ^ n3 {

1.0000 0.9331 0.9599

+ L' g8 j7 R0 s/ `7 C

0.9331 1.0000 0.9553

6 E K$ f7 b3 q( A6 h

0.9599 0.9553 1.0000

8 \; B, T. P! J6 c$ J0 }% E7 o

2、数据预处理

5 A- U" ?) a; \8 U( J' t

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

! q5 Y3 }2 P$ _8 x4 R

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

: U0 L- X! u @

sum(a)

5 j- F5 v' Z, f2 J4 d3 u4 d

ans = 13 NaN 13

1 X ]7 Y# T. G+ y5 e* a5 K4 _) h

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

- l8 s6 B7 ?; r, a6 D6 e

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

) A: `7 }) [1 a- P, L7 V, s

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

+ Z9 G0 |9 w; {+ l5 S; o# F( s

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

$ m' }" G% k$ {8 p# x0 `

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

/ G( N3 g1 `5 g: T* O4 V) T

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

4 p; D5 K$ c" o0 m5 W9 R) L2 g

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

+ u9 O. f; X5 E H. l4 d& a" _+ z

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

7 B- O0 W# Z( y+ U8 \" ~

3、回归和曲线拟合

0 S# x. }) g1 k" Y* o& m7 `2 X

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

( f9 c" l: C+ X$ q6 g$ K1 k

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

0 j! Y( G8 H; k5 r. z' u" J, \

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

2 G& w( x! A( q

y=[0.5 0.82 1.14 1.25 1.35 1.40];

+ I4 ^! g% @, R% D% Y
# g3 t$ V6 D- \( C: M% @

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

/ s& o3 q/ _4 @( q" q7 t

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

0 c! E% _( q7 h, y- J8 l! D* @' }

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

" B, G1 Z2 B3 t

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

# f. G! Y* g( l

a=X1\y;

+ f4 U2 N; [3 T) i' U. j. ^1 {

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

3 O5 F' z0 D0 l) T: l$ Y

b=X2\y;

: x8 }3 ^! Z! ?1 C0 c' l

T=[0:.1:2.5];

4 y7 D* c+ A' d- o# G' S5 e' @/ P3 F" E- R

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

& H# [9 I# ]$ n7 n+ u

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

( j. I6 O* [ Q: U: T! [. t' E

figure(1)

8 A6 E5 q, _: O+ A) h3 W, W! b' _

subplot(1,2,1)

! H: P c' D N- l6 M3 U

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

0 K' m9 t5 ?2 |% J

title(多项式回归)

, q# W/ ?( g% L$ R

subplot(1,2,2)

' ]# h9 \! w7 h$ `% b

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

- u5 w1 Y) q8 W$ { A

title(指数函数回归)

9 l1 x# U1 r# d. Y& y! ~" i v
+ h9 L7 C4 A) T7 `# e

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

* |2 M, Q. B( O6 Z- `9 l9 k" L: J

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

4 E; F i# Z0 l8 n+ S

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

$ j; ]/ k# `4 b

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

! l& Z- |+ N# @, X! n

采用来拟合,则有

" n5 k) H% D1 R* W* m5 I

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

; j# q) E! T8 R+ j

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

0 ~) X; [7 o: y. W* e

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

1 v8 x8 o3 p7 c7 x8 X

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

% ~- F6 p( S y7 ^% z4 [& \4 W

a=X\y

4 o1 C4 G% L+ j; j; q% q

a = 0.1018 0.4844 −0.2847

( `- C7 |* v% B7 l$ A* I+ G

因此数据的拟合模型为

- O' Y9 m8 l+ Z0 ?

y=0.1018+0.4844x1−0.2487x2

+ b# H% t2 F$ ?: D

4、傅里叶分析与FFT

# M5 N$ E5 E& E5 Y' F& u O

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

9 X; A. z' Q0 `& O a. x) U/ _

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

+ U: c9 R$ r: c' `0 w" o

t=0:1/119:1;

1 e- |1 H& t+ o

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

1 a B' v4 M3 H n7 i& @! H& D

y=fft(x);

. Z" h9 D. r2 h1 h) z5 ]- G

m=abs(y);

' I5 p) F/ z; p5 J% K9 C

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

* N7 b) @/ b6 C* M

figure(1)

6 E( m( c, @: Z0 c! y

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

! V. _ B4 Y7 G

title(多频率混合信号)

! q1 w& s+ g8 ?& ^( u& W

ylabel(Input \itx),xlabel(Time )

2 N/ K" N! D2 m- H3 k

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

% E% d' Z1 [! V1 t

ylabel(Abs. Magnitude),grid on

, w: Y3 Z. ^- @9 j( v) j( g

xlabel(Frequency (Hertz))

+ o& o6 ^! q' r+ M' u
! S. m1 K* o: P' @* A

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

p& A" x# Q* l, R! [& ^" F

t=0:1/199:1;

# ~& b- X4 j) ]' g

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

. w/ |# X% ^6 X& {

y=fft(x);

D+ B! H2 E% {. l

m=abs(y);

; s7 Y% e/ b; |/ {

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

( U1 e0 ~ |- Z" C. n

figure(1)

; @ g" A$ F, I$ q4 H v P

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

$ {8 [! t6 U+ v" Q+ U9 d

title(信号检测)

8 C0 x V8 z% f

ylabel(Input \itx),xlabel(Time )

! b6 ?9 H; S! C" w1 G5 i5 z

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

9 M v P1 ]* X$ d3 |) g

ylabel(Abs. Magnitude),grid on

0 g- H2 {9 B# l$ X# b+ D1 p' I! z

xlabel(Frequency (Hertz))

' m' ` f1 l% W8 B6 h! W2 `
0 i. p# n1 ]( ?# q: ]- r) _( _

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

7 X: v3 I1 ?% N0 ~, q

load sunspot.dat

9 q7 l* i9 ?0 h

year=sunspot(:,1);

; g3 }. {# ]; x; \' d' P5 i

wolfer=sunspot(:,2);

7 ~8 G. q2 ~3 m% }$ ?

figure(1)

9 U& r; C0 s; {4 A9 A5 L

subplot(2,1,1)

4 r6 H# D/ Y6 L# F$ g7 W5 O9 L

plot(year,wolfer)

- U, Z8 b( X0 S8 n1 C! B

title(原始数据)

+ ~9 i) g v) r' F" X! ~

Y=fft(wolfer);

: {, I5 L$ j3 m$ n$ {* M$ q

N=length(Y);

! {) z) e/ O- k3 p6 G" F

Y(1)=[];

: g/ B9 \! O6 u& z, f* j% K

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

+ E0 m0 P% S( T! p6 [1 `

nyquist=1/2;

3 c6 K$ {' j: L- c5 i: m

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

( x& C4 l& A( X0 X. Y( H

period=1./freq;

1 l1 a4 _# l) u' ], a, b

subplot(2,1,2)

: i' b& S/ z" y' H2 Z1 f2 V

plot(period,power)

. I; M' k; j% K$ }. u4 l3 `# S7 @

title(功率谱), grid on

8 T% k! V; [. K' W% v

axis([0 40 0 2e7])

y" y$ y( y: C8 V# c
/ j" L% u. Y. ]/ J$ }+ u

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

0 a6 E2 [2 _* u/ {& b" P* e # B6 m0 X' J K0 P+ { * O( Z0 R1 s9 C$ x! O [- Z4 f$ y$ p: m7 I7 f9 x. a0 W+ X& ?0 O/ @$ U4 b
回复

举报 使用道具

相关帖子

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