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

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

[复制链接]
3 ~# F& ^2 n. O# Q
1 ]8 F Q/ p/ ]+ |4 `

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

- ? A/ q6 F X

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

- [' [* V; b8 R2 t

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

5 s( h0 j5 [5 s3 o# {

load count.dat

+ @$ f0 b: B k# T( p& M9 L

mx=max(count)

1 |( j, S+ D3 j; V0 Q

mx = 114 145 257

' ^2 \! l2 P1 P) z% ^3 P1 B

mu=mean(count)

/ n- U" c2 A' u8 y

mu = 32.0000 46.5417 65.5833

: J$ N' V- b! D* P) c- G& E! P3 V

sigma=std(count)

. ~; j- l% Y* p0 \! w) y

sigma = 25.3703 41.4057 68.0281

+ L; X. a( F' l, h

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

~3 `$ X+ p3 m: C! A+ U. \

[mx,indx]=min(count)

6 f2 h' p9 b+ o' {# s$ P5 Q' d

mx = 7 9 7

2 E' @, R, r# j- D4 [7 _$ J f

indx = 2 23 24

! U" ?" K. o1 J3 Q/ Q

1、协方差和相关系数

! k9 b# g' B6 {9 [

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

! u4 Y6 H( G; Q9 l( n. t6 e

cv=cov(count)

% `2 ^# x& G$ m5 M$ x0 I

cv = 1.0e+003 *

8 f9 w6 }$ c* j6 P: |1 |" b: B

0.6437 0.9802 1.6567

+ f" V* [9 a( m$ Y; ^

0.9802 1.7144 2.6908

# p& i% k$ U& }, X: ]: E1 q

1.6567 2.6908 4.6278

6 \6 G. N( u: S9 o \7 P7 p3 `3 P

cr=corrcoef(count)

, ?7 x- j- O; k. f

cr =

/ v% i# z) _# g& I4 _3 ]& J7 ?( j& Y% c

1.0000 0.9331 0.9599

; y9 T: ~. t" ?" a7 D" j3 j5 d7 M

0.9331 1.0000 0.9553

0 ?& g; R7 }% l7 f9 x0 N

0.9599 0.9553 1.0000

9 @- r/ a3 A: \

2、数据预处理

% a& N2 Q7 h9 r; j1 ^

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

3 k6 ]0 d& S7 P# h: N

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

5 J% i! }6 ]1 M! R* j' P! d

sum(a)

9 l( g4 ]' \- U* t

ans = 13 NaN 13

! @. e. u3 v; a o1 L

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

8 x6 _3 X. L) }6 P$ J

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

: ]: O2 O1 a) l! S* X2 d( B

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

5 ]; X. u# a. p7 F) S8 D0 v

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

, h: d- q. Y* o" C! a- g# Q5 G

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

' O( C F$ [1 f" Q4 ~5 d( m

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

% T6 U& S9 D1 s

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

' E' C* C& K, i

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

: o- J! z! q5 v$ e

3、回归和曲线拟合

& p8 V* D% j7 o" x. n

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

* V+ \ P* ?* w

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

, Y0 @( v: w: t( Y" d9 R$ R

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

# F& t( e1 M9 H3 z$ j

y=[0.5 0.82 1.14 1.25 1.35 1.40];

7 T7 q1 v( [! z7 I
. f: D& U5 @# {1 F4 i( K

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

* h: L: { a; \7 b4 t

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

" P& H! h# o1 Q1 R( Y

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

' G! r- B4 L t$ x1 C

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

8 s( q! f# w, O- h% V4 R8 k& g

a=X1\y;

" X0 Z* z& ~# ~; s5 Q

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

8 }9 L5 r9 I' W* r4 H$ L1 B

b=X2\y;

4 ]" o; Y$ |: Z# q9 h

T=[0:.1:2.5];

' {9 a- c' h/ q3 I5 t- z/ Z

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

3 v8 b3 w E) ~$ T- I3 c' N o

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

. k$ r" F8 ]3 ]( Y+ A) h

figure(1)

% l" T) h2 `% S9 U( |; J. J

subplot(1,2,1)

* H& R7 Z7 K: g$ g" B- h

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

6 X1 a) z+ \6 t7 v: I

title(多项式回归)

. H+ n* `! ~( }4 }7 q5 O6 _" c! J

subplot(1,2,2)

8 O8 X4 h" K7 C, f

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

, ^8 K6 z6 |/ y& t; A# T) R

title(指数函数回归)

2 F# O, f4 Q* r( F2 N n( y
2 [2 w) d0 ]/ G& t

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

3 X+ j! ^. j1 K5 N" e. Y: G

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

4 c! R8 @6 E2 ~( S3 A2 d

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

; ~. K3 M( @. C6 B' u4 \2 |; Y

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

& h+ T1 i' ?: z% ?

采用来拟合,则有

* }+ \0 a$ N6 q- z% W

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

6 E2 J$ L% F6 i0 A

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

8 d$ I7 r) u- @) ^& u/ V" b6 P

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

/ z0 k8 j0 }6 S3 m

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

5 t3 _ v2 w/ G) z3 j- a$ i- F7 W6 {

a=X\y

" v* O& T: M3 z8 O5 V+ l

a = 0.1018 0.4844 −0.2847

* }( @, Y0 E' I* j/ M+ ]7 n

因此数据的拟合模型为

* j# q( X) A ^7 j7 Z- N; ?% i5 f

y=0.1018+0.4844x1−0.2487x2

' B7 G$ J- J& b

4、傅里叶分析与FFT

9 g$ w( u1 N7 h2 `9 W6 n

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

# J* B" i/ P) d% s7 O' i

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

! d9 X+ ]0 s7 J4 ]

t=0:1/119:1;

' t0 y: h& `' |0 a6 o

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

3 O \" \7 Y8 g

y=fft(x);

" M1 u) {* @* O! P( l

m=abs(y);

5 y1 a" n) t# D1 w. T4 w% B' B, x

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

6 y" d; d2 j( m6 m

figure(1)

8 r7 C# u0 q! t

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

1 O# f5 {" i& `; A. d

title(多频率混合信号)

& n8 P& b9 L, e5 r' m2 v

ylabel(Input \itx),xlabel(Time )

' b. c2 y; J3 L. y J# E

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

. K( b9 c& J5 j2 a

ylabel(Abs. Magnitude),grid on

/ `4 j: I; c; @( _

xlabel(Frequency (Hertz))

0 T4 d/ _, v$ Y1 ^
0 }2 ~- T( q' y2 ]5 T1 ?3 o

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

+ D- @4 G3 Y! A5 [

t=0:1/199:1;

) z f N3 ^/ Z5 r3 U4 l) C

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

; u2 h9 f; T/ O0 ^6 r9 {/ N

y=fft(x);

# W, }& a8 r( X7 j7 Y6 q3 S* f5 Y9 u

m=abs(y);

5 j. L4 v- M. {# Z! J

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

0 b0 n+ n( n' U, S1 Y& F5 ^( x6 W

figure(1)

' f' U1 i, d& o' Y+ Z0 h

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

0 A# {7 ?+ V1 K0 J3 h

title(信号检测)

" A1 x" d/ h8 H

ylabel(Input \itx),xlabel(Time )

& s# V1 D/ o( @

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

8 W2 ^2 i ~. g

ylabel(Abs. Magnitude),grid on

* [. _$ l* L; g' x! V; }

xlabel(Frequency (Hertz))

9 j, Y1 A* l+ C3 v$ w6 u9 q& n) u
& G; o2 ^3 W1 P5 y; T

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

7 C4 B9 f7 x/ `( H5 @6 t8 d2 l

load sunspot.dat

$ j. Y% `4 W0 J- h& ]

year=sunspot(:,1);

: ?& b) N/ s5 u5 K% R, z$ ~; @

wolfer=sunspot(:,2);

7 ?7 a/ `7 \- I( {) O3 m9 `

figure(1)

% p8 `5 m- @* S) B+ R

subplot(2,1,1)

& \) p0 E9 W3 o5 D8 j

plot(year,wolfer)

5 X- R1 V( f% h1 `0 e0 a' J& s

title(原始数据)

; G$ S3 b+ t$ v1 ?9 ~8 F

Y=fft(wolfer);

( \4 S# }$ [; ]& j

N=length(Y);

0 b, F. S/ _7 R* v6 b5 F

Y(1)=[];

5 K& W7 g+ b0 @0 k5 N% n8 E

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

# f; z& R- a% ]( p- T% i

nyquist=1/2;

5 k7 n+ d8 L( c8 p) k; E

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

7 G; ?4 T/ k7 n) S# d! J' m

period=1./freq;

, o/ e# m$ @7 l V/ d% e

subplot(2,1,2)

* V. ]% Z2 B; M. i* Z+ j. j9 a0 E

plot(period,power)

; ~- ]3 Q& R6 R+ e

title(功率谱), grid on

' c ^' o+ T# b* W( R

axis([0 40 0 2e7])

$ W( v- ?3 A% n0 v/ t0 y9 m
- F a& G0 G j* U

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

, Z& e; k% |. e# P" N* q9 T0 W4 i" Z. [( ], W! l5 V ) ^' x9 h; \' M4 x3 j7 G2 l ' Q0 ~" g! k w& S5 S) _; C / ^; l' O) C0 g2 Q; N# A
回复

举报 使用道具

相关帖子

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