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

[复制链接]
/ A9 p- ^3 j6 O+ X- `
) `7 f/ c) W$ x( H2 s1 Q

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

7 S1 a0 Q6 Q4 ^7 w0 f

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

' k7 ^& ^) G1 l( a/ O# O

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

% [( C' P: L. T4 q, ?8 v

load count.dat

; E4 G* ^& E8 i+ B9 U

mx=max(count)

9 H$ p, b; |! O# m( T

mx = 114 145 257

3 y$ j2 d2 f! w* f2 @! X

mu=mean(count)

- E4 |' g% J# C

mu = 32.0000 46.5417 65.5833

9 E& |% i" P; Y; @4 ~

sigma=std(count)

6 ^" L/ o+ S7 H* S3 c. Z# m- U

sigma = 25.3703 41.4057 68.0281

1 g& e1 _4 v1 c1 c6 p

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

6 A. K7 ^+ E3 Z& |& e

[mx,indx]=min(count)

( E* y d- z1 b S2 z! l& L

mx = 7 9 7

1 S; M9 ?! x: g8 }8 A

indx = 2 23 24

7 x* K% o& k( B$ j: h) v

1、协方差和相关系数

# k2 R4 E( V: I+ {2 f& B2 d. [

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

5 Z4 O) W+ z% C' w- r/ V5 c8 O! C

cv=cov(count)

/ n6 y2 x4 Q6 e/ s% c

cv = 1.0e+003 *

+ {) W: }$ {8 Z2 b7 ~/ w: `

0.6437 0.9802 1.6567

1 g8 t; g+ |% m7 a

0.9802 1.7144 2.6908

U1 P. Z% H& C( j9 `/ _* a" T8 Y

1.6567 2.6908 4.6278

; i4 f$ P) N" X7 `

cr=corrcoef(count)

& x: B8 a' o; C" c: _

cr =

2 A3 u) @& V2 t: R

1.0000 0.9331 0.9599

: M) W9 V, B% r d" \3 B; f

0.9331 1.0000 0.9553

: R" L5 [( b" r

0.9599 0.9553 1.0000

( r3 `' K" j+ p. B; a

2、数据预处理

! z: \4 S" U! N: b/ k3 r

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

" A' P( {. w' s

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

0 G/ U% A: r# U) ^: G/ D

sum(a)

3 f* P- D8 @7 w! z

ans = 13 NaN 13

7 u' O6 P& h* k0 ^

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

0 }* v; o; P, ^' E$ S7 `. x

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

% ?8 v( U) L& t" l) L9 d* i; e4 k

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

" h4 u L J1 _- i9 ^) D

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

8 w% L: ~/ m- i# p

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

: M/ y8 K# m3 S9 Y& V, Y

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

- m; V8 D) f) o

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

" B9 \6 u0 U7 Y Z- y

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

4 a) \- \% a; ^" T

3、回归和曲线拟合

3 t! C8 e: j( n6 w1 _4 s& d \

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

, J) a) ~5 U0 X2 B" F

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

/ }: ], M. ]6 q0 B/ c

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

+ O/ I0 ]* c0 X8 i; ]. y0 R3 P% I2 f

y=[0.5 0.82 1.14 1.25 1.35 1.40];

3 Q# I+ k7 r. E' C+ s! x9 u
4 b" P# U- t k/ y$ H5 h" @

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

. c% s5 j% }& Z6 k& n

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

; s/ w. N! |% F s& n6 `1 M

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

* e" k+ M5 l) b _' E

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

! M' P2 v! z1 k9 U- I5 _

a=X1\y;

9 A% y6 r* _/ N/ \4 _4 x% b3 j

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

+ B: n/ d' n, [

b=X2\y;

4 ?' r5 N$ Z# |( c$ P" [

T=[0:.1:2.5];

3 C0 x% W8 O: C# C0 e% n

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

" {1 h1 v/ E! z; _& I

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

4 V# c3 V) E; e% _, P3 x

figure(1)

& L! x1 U8 S' M4 D9 ]3 i# @8 v

subplot(1,2,1)

" ?8 M: H1 G5 C0 G

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

, q5 }8 H8 a3 ]) y, M, Z- @+ ^

title(多项式回归)

3 w9 ~0 r5 @2 R, P

subplot(1,2,2)

( M" F3 d, T6 d9 d( a: K/ c

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

# s4 l5 W2 \4 H2 H# k

title(指数函数回归)

. u; H; y! @6 t
Q+ b) q. ?5 w" H) Q3 |0 D# L

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

$ ?, o1 o7 m9 ~2 Y! H8 Q' |

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

0 O8 M* r# z- F4 E

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

3 |# S4 G" a9 z* S9 w

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

# O9 V% K9 }1 l3 a

采用来拟合,则有

: h) o& y0 B2 I; V7 W1 K

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

* c- N5 X) w: G+ O

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

$ R( |! K. [7 z q0 Z& ~. a4 W, \: j

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

/ G& U& c2 E) A9 x/ W

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

% _6 `0 {' Y) a

a=X\y

- ?# y! o }) h. v: {

a = 0.1018 0.4844 −0.2847

0 `. N+ c( \' Z% o( b, t: C" z

因此数据的拟合模型为

- ~- o3 f% `. D3 e# u5 s

y=0.1018+0.4844x1−0.2487x2

6 P- ]$ r; B9 r# V; G) ] ]1 }! B

4、傅里叶分析与FFT

: w9 _( ~( `! m2 m& i% k# d; s

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

% e( N1 u5 r( M, ~, E2 y0 ~

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

2 V& R+ Y. O; s7 c

t=0:1/119:1;

: O; F# X2 f, P0 a* @( Z

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

8 v) b9 ~1 g1 g! P) U1 J/ ]5 c

y=fft(x);

- @" j! U$ Q. [1 j* j

m=abs(y);

% A' M* @) E; c6 ]4 G

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

0 u* p9 m( U: e$ P! S

figure(1)

! P; t: o3 ~( i% r9 S9 i9 l

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

4 y' g& F2 h# Y

title(多频率混合信号)

9 |; G5 @- k c& Q3 s5 Z

ylabel(Input \itx),xlabel(Time )

- |" A2 t8 _: Q" D% d7 o

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

1 ? g; y. t2 a1 p

ylabel(Abs. Magnitude),grid on

- |0 s( p# _ r( b! d( c v% E

xlabel(Frequency (Hertz))

' @- U0 L3 ^) h0 C0 J
8 H7 O* d( S* Z: T6 h# D1 @

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

& n: _/ D+ ~! }' H- Q! {* W1 J0 y/ g

t=0:1/199:1;

( Z$ I2 i7 ^- e/ T. B8 O

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

$ S) S) x$ T; x- D% v

y=fft(x);

- i) y8 I+ w! G2 j2 t1 J r

m=abs(y);

) V3 Y4 L) t& r* }9 c

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

3 t3 U9 K" y4 D# D8 r

figure(1)

, W0 K1 Y+ _% F9 ]* C8 i1 X

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

; ^8 ?+ W; }- \6 B1 k9 Q

title(信号检测)

1 h Q4 H9 z+ Q

ylabel(Input \itx),xlabel(Time )

" _4 {1 Y" k5 q8 e" }

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

; k5 b* l% D4 j0 {

ylabel(Abs. Magnitude),grid on

0 s* x$ l* Q* \7 [6 T4 P- W

xlabel(Frequency (Hertz))

4 ]( g& K+ @( _. S& A/ Q
. t, X2 M& f: ]

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

* m! ?3 |+ ?% {* g' y7 E

load sunspot.dat

' G6 U7 B) A! W7 b3 J

year=sunspot(:,1);

% d5 Q" X& u" B6 g' r

wolfer=sunspot(:,2);

8 R$ _( `( W+ k: R

figure(1)

; H$ p$ K% l# {" L2 R7 f5 ?6 v

subplot(2,1,1)

1 b5 T, A7 F9 F; @! x

plot(year,wolfer)

) w* p* h. e" ^- Q* U( ?! x

title(原始数据)

' M8 S6 f' m/ I4 X

Y=fft(wolfer);

" t* t2 q" ~+ p M, P: y2 c1 s7 ?

N=length(Y);

# y2 Q5 h" N% B0 U. t

Y(1)=[];

2 O1 P( P' M# C

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

# V ?: k A3 Q5 J1 W

nyquist=1/2;

7 s2 A3 X* ]3 Q

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

- i; r7 o3 ^3 _) L0 _

period=1./freq;

& D; |- ^. [2 O- }; {6 f2 x

subplot(2,1,2)

1 w/ C! K1 J$ s$ ?& f& V

plot(period,power)

1 `* S s2 N: B [/ b, G

title(功率谱), grid on

8 p. A, S+ h( U

axis([0 40 0 2e7])

1 m* F& Z6 Z- Z2 U4 z- j/ @
0 X5 q( x- ^. C1 V5 A& }/ {

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

* ?3 I" {- J+ b8 {9 \8 @7 n7 f+ l3 N6 b- d* L# x * }) k6 W+ n, f0 t1 l: h V& Y + o4 S! Z4 Y7 { h1 i/ v + \% f7 a7 h, z; f1 H3 |2 f$ v

相关帖子

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