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

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

[复制链接]
$ y9 W# R; J: U8 H
6 F& y7 O, R( p6 C6 C9 T

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

' ^1 k8 `; V/ T g" k/ Y2 w" p$ a

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

& Y+ r/ G' Z: _( p( O

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

8 G! x" h1 ?. Y+ F. h

load count.dat

+ H k+ {8 M. U! w, C& d# l! h

mx=max(count)

) a4 A# L; V- L, g7 S. F

mx = 114 145 257

9 j: w. y* G* _! O

mu=mean(count)

7 B! m5 s& s& c, d5 j. m ~

mu = 32.0000 46.5417 65.5833

+ g+ S" N) T1 l; l% P

sigma=std(count)

) M* A# K) H9 L; M' m0 S

sigma = 25.3703 41.4057 68.0281

6 i8 a# H# P/ P, @( \: H8 c Q

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

2 w) E( V# M$ V: |

[mx,indx]=min(count)

' U/ N; X2 U3 A. k2 j i# x

mx = 7 9 7

8 X, r6 ~/ p, h4 c

indx = 2 23 24

( ]: L J4 @) [( y% u5 u

1、协方差和相关系数

% d8 T. k/ `' ^4 z ~

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

3 Z; h3 n2 e! ?5 q- w/ V; R- ?

cv=cov(count)

! |1 b) i K6 X. N8 D4 J+ x

cv = 1.0e+003 *

) D2 }( {! h* ]' B( i+ h3 ~

0.6437 0.9802 1.6567

, w- v+ H& x2 b; R

0.9802 1.7144 2.6908

3 ~5 F# }5 r- ~5 g

1.6567 2.6908 4.6278

/ F. g- x$ Z5 o+ j

cr=corrcoef(count)

5 x, Q% }% A- j# Y9 L" K

cr =

7 X9 L+ A, z9 W/ H9 a* ?! j) s

1.0000 0.9331 0.9599

; \: F. G2 g4 O8 B9 B( t, ?

0.9331 1.0000 0.9553

6 [* n* U* f, z [

0.9599 0.9553 1.0000

! r4 r% t5 N; c `; D5 q5 Z

2、数据预处理

G4 ?: d7 J3 A1 b5 Q& I$ I

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

6 H" ?9 q% \- J2 Y% F0 \! h

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

/ H: W8 {; e8 z- @

sum(a)

+ j6 Q; p& J' d4 Y

ans = 13 NaN 13

0 v" q4 {6 \1 Y! b

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

& f. R3 H7 B* d5 ~; w; n* [

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

1 m& u9 g4 U M1 n. q

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

* K) P# _6 u. S! C7 d. h, ]

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

& c" V3 t: {% t( J9 j1 T

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

. I% {1 B1 l5 i

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

Q# \) I# a" T# n- o5 t

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

9 @" R0 |) c% B( C! A0 m

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

) R8 e! \& A0 K

3、回归和曲线拟合

2 b# f0 D) r0 Q6 F# O8 V7 R( z

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

2 `# [2 R. h; Q) [2 @& N

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

& f2 H1 {& w1 i3 y/ Y* C5 U& J

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

& n; ~) A/ M6 Z# Y& z7 i

y=[0.5 0.82 1.14 1.25 1.35 1.40];

+ d% K c, O1 C0 @$ O
3 ^+ B- ^/ ?; t8 l8 ~. s+ v

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

$ T M; Z# a+ w u+ E8 n4 R& r8 X

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

' {3 B& U, o3 N! c

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

+ ?8 g; t/ v& N3 H7 a' F, G& _

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

( ]# u' Z a9 P% X

a=X1\y;

: t: ]: {5 Y. \3 X

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

; N+ ]5 i; e6 y0 t( H" F3 I

b=X2\y;

8 U- e! {8 G6 u' [( i& F

T=[0:.1:2.5];

* [9 N' h/ y4 S# D7 X' k, z, Q

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

. m, ^, y% L( R. r) _

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

1 U- b/ j7 x( o( I! _! C! h% L- Q

figure(1)

: M: J v) f2 _/ Y9 t$ w9 @

subplot(1,2,1)

( e9 A2 K$ o/ G

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

: {& E! E" @. T& r0 B% n

title(多项式回归)

& ]; U7 W R$ l4 a2 M0 U

subplot(1,2,2)

5 i( {! S# x, x4 B0 L+ i

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

! Q% ~# k0 b @ G6 p

title(指数函数回归)

+ c% C* { m6 E& ]6 L
* ?: S) J' ~8 S. D! q

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

! A& u( i5 B' G

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

" u/ M5 i7 V6 H* `& _

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

5 c1 l3 p6 w7 a; M

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

9 \+ \8 d! ?2 q4 W( b

采用来拟合,则有

. d0 @, b" N: |6 P! ]

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

?1 j3 {9 z! M: X4 ~+ ~

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

( O% x' ?0 v3 P' m' N

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

, ~* ?9 T q' Y# ]% Q; Z. W9 Q8 q

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

( A5 R0 j1 _* i; m7 O* `

a=X\y

+ G" U0 L( s- _ h' t5 T3 z0 S

a = 0.1018 0.4844 −0.2847

; @- X8 ] t0 k! I, \ u

因此数据的拟合模型为

* P: B, c/ x, G) \3 t! f

y=0.1018+0.4844x1−0.2487x2

9 f D' w" l# d7 ^3 w

4、傅里叶分析与FFT

' B$ k) {' B* V, F. W" F) d$ Q6 ]

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

; G& {7 W/ G' q

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

) D9 n+ c: a% P% r6 Q4 ]/ h

t=0:1/119:1;

, y. Z. p: J( S6 t. C/ B2 Y8 k

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

) {; J* y" I; l' n$ X) u

y=fft(x);

7 s" P# T6 y" k

m=abs(y);

! b) L( D: U5 q& F' x5 T

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

" }: _9 ~# g- w

figure(1)

, l/ U/ w0 ~4 A' W4 X( {

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

9 j( W+ D5 o4 o) I, j; P

title(多频率混合信号)

7 ^& B, w! G2 J! D% A0 ~2 v

ylabel(Input \itx),xlabel(Time )

2 x' E& X! ~$ V+ a5 h, b' `

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

2 M7 `/ Z2 x- L# [! Z

ylabel(Abs. Magnitude),grid on

5 ?) C( S. i' u+ I) E

xlabel(Frequency (Hertz))

6 C- P: i! S* R8 ^2 k: [
2 J P! T! @" K

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

6 a8 ?$ J- V- Q- A$ {2 Y% C

t=0:1/199:1;

5 a# ^0 @( U1 L) U4 ^. k8 e# i; Z

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

) p; @4 n2 k& h: t% q( l

y=fft(x);

( Z. R6 A0 p% A- Q6 w1 D ~! c& [

m=abs(y);

: n8 k. Q4 b; z( k' S

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

$ x& C, ]$ |* \' s) X

figure(1)

( N p3 }+ ^% T$ w, [4 F

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

& G; d- h N6 x- b/ O

title(信号检测)

% n6 G0 l: o. F

ylabel(Input \itx),xlabel(Time )

8 {! a4 v2 |* [3 i L

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

) m* m( A; Z5 @% d2 h2 P

ylabel(Abs. Magnitude),grid on

5 B: u, A4 |) O+ z

xlabel(Frequency (Hertz))

7 L* J2 n, Y3 D$ k" [
, E* [3 a" _1 y

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

$ q2 m; m) {% u; ~. b

load sunspot.dat

4 x( X+ w' k, T0 ]4 ~6 h

year=sunspot(:,1);

* y4 d/ g9 \2 Z0 e, v! c

wolfer=sunspot(:,2);

: e( d; l& v) b6 a

figure(1)

( M* O. h6 [7 `9 r- }% g1 W

subplot(2,1,1)

5 \+ z' @ e0 Y4 N* v0 O

plot(year,wolfer)

4 U% K9 n& N4 D% L

title(原始数据)

6 U5 h2 A. k* N7 I4 l+ \& M

Y=fft(wolfer);

8 [8 f3 k; s, R7 |1 n7 G. L

N=length(Y);

' b) y- c5 B. a

Y(1)=[];

! }% ^0 k& e, Y& D

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

: l+ a1 s! y, J$ F4 y

nyquist=1/2;

5 k( [* o$ Y4 Z: O% ^

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

* c# U# u% L$ `

period=1./freq;

( L$ q: O1 a, k

subplot(2,1,2)

) j& p/ I, i! y

plot(period,power)

8 C! m" v( C3 g8 N$ k

title(功率谱), grid on

" u) U3 p3 v% n/ Z1 Y1 Z& I

axis([0 40 0 2e7])

. U9 f% K2 }, @9 Q! }3 D
& D. b" [/ k9 Q$ S8 \; Z

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

' {/ ]: s* |1 ^' ] . b. e8 b I" t" f9 t2 i3 D' R2 h" H( c # f2 o8 Q6 R: R" r# z: Z( L8 _0 o$ T, j) g& `
回复

举报 使用道具

相关帖子

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