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

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

[复制链接]
3 c! n! r' D# H. q
; _7 k7 ]. c& R+ Q, v2 V* U2 P) s

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

6 T$ i9 p4 Y& s* {1 V* j1 X

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

[. m6 h% K/ K. W' U' U

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

5 s7 |1 ~% n+ _; A( `6 R4 @

load count.dat

! x" c; S4 r5 F! c1 k3 L0 i

mx=max(count)

3 u0 r k3 d) G

mx = 114 145 257

! ?3 c: x# A4 ]

mu=mean(count)

* O5 Z% }0 Z' M/ T4 K t5 Q# R0 K" J) h

mu = 32.0000 46.5417 65.5833

# G g7 `3 W0 C& G3 M) c4 O; I

sigma=std(count)

) L, k6 ^, S3 g0 X* O+ r

sigma = 25.3703 41.4057 68.0281

! [4 @0 l3 X& P5 V8 u) f7 s* ~0 A

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

2 ?+ ]1 Z; M! a w) |6 l

[mx,indx]=min(count)

{5 k: P7 ~+ u) u

mx = 7 9 7

/ R, u* w" Y! X+ s( J# n

indx = 2 23 24

8 k r4 [6 i2 V/ X3 |

1、协方差和相关系数

4 }& D: _# ^- q4 e- s0 Z8 u

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

1 {; l; f" G1 Z4 O, M: n' w/ s

cv=cov(count)

5 e' i+ k! ~ a' F5 a- ]

cv = 1.0e+003 *

2 G" L4 I$ w' x

0.6437 0.9802 1.6567

7 G3 c8 G& e2 v3 v/ r

0.9802 1.7144 2.6908

0 O! i6 Y- C6 ^' V! t

1.6567 2.6908 4.6278

# z2 h1 y- ~) L% `( p

cr=corrcoef(count)

, B/ i1 [# e, u; c/ M

cr =

% \) @, e1 {( ^6 b

1.0000 0.9331 0.9599

z1 e5 Q1 l' k* h% ? ?) }

0.9331 1.0000 0.9553

0 R, |7 U, S. V" Z- L

0.9599 0.9553 1.0000

1 m2 ~% S& G4 c: ^- ^$ {

2、数据预处理

" L( Y s9 V9 E* q2 _

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

& Q) @* |% |* x2 Z2 D. j* s$ b

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

8 Y! p* g/ |2 m9 d

sum(a)

& Y9 ?4 U$ o: B( { j) J1 N3 n- U

ans = 13 NaN 13

^. ~* V% K/ {! a

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

; z. o4 d" A+ p E1 |8 j* n4 x1 _

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

) `( T3 K" t( w' Z0 Y$ `' L7 Y

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

, T) Q7 o6 J0 f5 F8 M1 [; X

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

, x% B* S6 x! [$ v5 ?1 M" {

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

: D! i3 c; h4 o/ q5 H7 A8 L

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

7 T$ L& v* V( c7 r2 {+ D2 t' v5 U

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

1 w& V4 o/ U! w, f! D

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

5 \" | M5 v3 i0 Y& `

3、回归和曲线拟合

0 q7 ^" k3 X$ d& t

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

/ K( ?5 R2 e* [7 }6 B, \

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

: \1 M& U: o/ I& J

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

8 H, U3 c# R3 p

y=[0.5 0.82 1.14 1.25 1.35 1.40];

% J9 H1 i0 Y: J V' g9 Z
- w! Z) L: Q' E$ s

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

. P5 o/ [8 [8 `& M$ H

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

! T, e8 N: i: [( R

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

: o/ I* N2 q& `

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

% s2 Z9 o! P0 O$ V6 t

a=X1\y;

% `& U" j: f5 Q2 N& _# N- @

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

. Z0 K/ h( j6 ?* x

b=X2\y;

' G) _# P U( N

T=[0:.1:2.5];

- |2 Z+ H0 ~1 ~2 @& H8 B6 v" C

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

9 ]( s5 T' J1 N$ j

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

* `) ^; a: ^. B e" ~2 [

figure(1)

@( `4 K* i3 f, B' X) i: O

subplot(1,2,1)

# v. D9 W4 W$ N# W

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

3 Z% O- x% F+ L2 k% T# @' P& v

title(多项式回归)

( _, b2 Z; x6 f5 I8 d0 U5 j0 [5 s$ _

subplot(1,2,2)

2 @4 Y! L# j3 b8 ?5 N

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

) n' H3 u. d* I2 o

title(指数函数回归)

1 i: S6 m6 N: @! X, O. x6 L
/ C" J4 V% T4 Q' m) d- ^

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

p7 U# y4 q0 j3 t/ Y

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

& V2 G5 S4 @, F% T: I7 T6 ]

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

* k- W1 I% b9 g$ D) @9 O

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

8 D: q/ }* X1 R! M$ k: @

采用来拟合,则有

& C. u; ?9 ^2 n! Q2 ^& ]

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

5 b3 l+ Y6 K% P/ m+ C1 K) T' \

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

: F" p+ {7 z& r) f

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

; y S' B' e2 m6 T- Y3 m6 d

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

: G* a7 h. \% A. Z

a=X\y

( `) A/ c" O' U. a# u

a = 0.1018 0.4844 −0.2847

8 r& g- x" _. }7 D' O1 \( P5 n

因此数据的拟合模型为

. O" y) z& i+ G- r- J& ?7 A

y=0.1018+0.4844x1−0.2487x2

: }( Z: v& I/ `4 \

4、傅里叶分析与FFT

* q9 t7 ` h) J( Y' m/ q

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

7 v! Q2 |; Y# a* P

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

7 E( q& d. P" S& z/ b2 o

t=0:1/119:1;

5 @. n8 F: b- |# J* E( H- e

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

7 m& g: I6 V9 m

y=fft(x);

2 c0 q7 @/ H3 V* O3 k5 u

m=abs(y);

7 o' V- d i( D' I. o

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

' O$ B* c1 X+ ]- Y2 R

figure(1)

; f! [8 T. V0 @$ C' t7 @0 Q$ x

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

% c' G2 Q; S9 w, H$ V7 j

title(多频率混合信号)

# p+ K! Y9 u3 ^+ I% w! F6 u3 N4 C

ylabel(Input \itx),xlabel(Time )

) Z# c& K! N; G: h3 n$ N

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

1 d, ^% I7 i( z& k1 [, w

ylabel(Abs. Magnitude),grid on

5 R9 [- K7 L+ v

xlabel(Frequency (Hertz))

7 X. C9 I1 Y& ~8 Q9 S1 m
5 y9 Z3 F. u- I6 G L8 A

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

; q0 @1 j) R, ?( w

t=0:1/199:1;

8 Z$ T% G- V% ^, F$ h; t

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

" q4 R) g- N, t( I

y=fft(x);

5 {1 k$ Y* R$ z; f0 v% m5 ^

m=abs(y);

' |" ?& Q8 }$ e

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

+ Q; _3 Q) q) ~& a# O1 N/ U

figure(1)

7 b- z9 U% X' O3 ~$ V( l

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

& d" w2 ~0 E# u l" ]. z8 V

title(信号检测)

7 P! B# G: I3 y

ylabel(Input \itx),xlabel(Time )

/ B' ?# p1 `/ a* M+ r

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

* R2 q; I$ X% `" |& J$ G9 k, Z

ylabel(Abs. Magnitude),grid on

* x0 R: `+ H7 `

xlabel(Frequency (Hertz))

- x0 Z' `9 A+ V5 f
& M- G5 N" h' o: _

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

8 B, o& d+ i/ P% H; Z

load sunspot.dat

! m% s, `8 q% ^. C3 z

year=sunspot(:,1);

/ Y, B' R# b. J+ d5 O; H

wolfer=sunspot(:,2);

/ N: I/ v. S4 J6 A. @* n; ^

figure(1)

) K6 Q _- e& r. i, D

subplot(2,1,1)

# J7 X; i, Q+ f v" F+ @

plot(year,wolfer)

0 h! U% Z: m6 y! i

title(原始数据)

7 P# x, B1 \5 _3 R

Y=fft(wolfer);

6 c! |8 {$ T8 @9 G0 Z7 |6 ^; I

N=length(Y);

! h+ o0 N* L5 A" l# J. F( t1 @* y" _

Y(1)=[];

f$ K% Y9 f1 X

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

0 S$ g& w7 ]) L* {/ a/ F) Q7 [5 H% ?

nyquist=1/2;

2 _5 m- H% g) b3 l( M$ r# ?) l

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

$ F' X+ Q t+ u3 Q

period=1./freq;

9 d! F0 H: f8 c: V: A

subplot(2,1,2)

; s) N6 V/ c( l6 l9 q

plot(period,power)

7 D |5 `/ P/ G) H9 a) T. J7 o, M

title(功率谱), grid on

& n1 f* E' G2 `! @5 J* E

axis([0 40 0 2e7])

+ q+ W' P: y8 e- e
$ k1 T1 ~, d2 s `

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

% a9 }8 P# E% c: ~+ O3 v6 B; H: z 8 d0 v& ~- v- s; A5 Y' } 4 G/ i+ P# p4 S4 C ( f$ ?3 z s( ~/ {* E( F8 U# s/ f
回复

举报 使用道具

相关帖子

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