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

[复制链接]
# B7 l+ a+ a4 t5 {. ?/ E
; ~8 V0 O% u4 v1 c& r O

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

. g/ E) Y {4 b; [: i4 ^8 [

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

# U. J3 ~. r* ^: G: Y" P8 R

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

, W5 L; c* i4 t7 c& c, r1 r& I7 K

load count.dat

' v& D! v7 b7 E. f+ A4 A

mx=max(count)

6 m1 m& R ^2 z# `/ t! `

mx = 114 145 257

8 C: z* m. o( K5 W; k) G

mu=mean(count)

& }5 A3 d; `( _3 w8 s) K8 o

mu = 32.0000 46.5417 65.5833

0 g+ ~2 ~3 z. c- _" j' ^1 P* l

sigma=std(count)

" {$ n' S" ]+ }7 t

sigma = 25.3703 41.4057 68.0281

0 P8 v0 j4 E' Y+ \; ]" K( e: f# Z" N

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

4 [1 B% \0 R' b& G+ k

[mx,indx]=min(count)

: O6 R( Z: k; [1 n+ B

mx = 7 9 7

& p; {* y" v$ h# C2 n+ R* M

indx = 2 23 24

- B1 i" x5 P: T

1、协方差和相关系数

9 y* L+ [3 D# b$ o' u" {4 j% W

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

9 X- y/ i1 A" ~; V$ a. p

cv=cov(count)

% f% R8 F* `1 t" J: {- a: N

cv = 1.0e+003 *

5 K- k3 w6 V5 ^- m5 @

0.6437 0.9802 1.6567

* u( j! u& X3 {( H8 o, P, M

0.9802 1.7144 2.6908

8 H6 {/ c9 ~4 Y7 } E. U: d# P

1.6567 2.6908 4.6278

" A7 Q; [3 X. y! c- h7 R O

cr=corrcoef(count)

: X2 w: o' k& H/ ?! H- C

cr =

) Q( t( A, B& c \

1.0000 0.9331 0.9599

3 b; P8 d9 p) U# y; f

0.9331 1.0000 0.9553

5 A7 t3 A- z$ B* J, i

0.9599 0.9553 1.0000

7 v$ m4 x$ R) e6 {

2、数据预处理

3 n: ]. W% F, z9 |! g6 N

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

% y- u, T7 f+ x7 J* H

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

7 F- n: W2 w% d* |* `1 p

sum(a)

' ?8 V9 T0 O/ {- @% s

ans = 13 NaN 13

6 b( p+ h7 o& x. r+ c

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

0 m w {; e# L

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

3 G% g& V- E0 N; p q

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

; ]" L! a" P: x- ^

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

, y D7 ]8 e# Z6 r

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

Z2 `! {/ Q4 J9 p$ m& k

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

/ S1 M- ]8 X2 }# K, R

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

8 d& }; b5 v2 P

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

( `# |. B2 H! i: Q5 |+ B, L

3、回归和曲线拟合

( m2 F% E) D9 U$ _$ D$ e4 R+ [

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

* m- j7 ?# t& Z& c5 U: M7 `

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

6 V& N* J# ~& I# C6 h3 W4 C$ U

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

' z( O; U, i( v; v' _+ K5 [

y=[0.5 0.82 1.14 1.25 1.35 1.40];

, l e# U; Z. H& V- U) {* P
5 _5 g. C3 ^2 Z' z8 d5 I" E

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

1 v$ D# t6 J4 S: i1 J6 _

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

B: x- c- J: B$ F, @' p8 b# [

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

, `7 c8 D ~ A

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

* I/ i7 P5 R7 C; m

a=X1\y;

: b0 w, A0 u; p

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

" J, D# Z: Y7 O c

b=X2\y;

% g) G" R q( a# C

T=[0:.1:2.5];

+ Z- _" z) h" Q# [3 {

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

4 y# r8 H9 n7 e5 L- N( B

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

' e, [( L: I' Y; k; C" Y$ _/ l" A

figure(1)

" b8 y1 e2 S: T7 j8 u! h3 I0 D" ^1 n

subplot(1,2,1)

: c, `9 `3 Q+ W; A

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

) a$ Q+ J% v4 W

title(多项式回归)

% L1 D, } n' v, \5 @

subplot(1,2,2)

, y: d: w; B8 i' q) s f+ b# m

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

( g) Y$ a+ F- p+ n( w" R# i

title(指数函数回归)

0 P; E" P8 K9 Y8 K0 A
, S- e3 s/ T2 k- c) \. S

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

$ b* A# \. o, I+ p# K( J0 e4 {

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

2 T! y0 ~# c8 `" i

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

6 Y( ]( `6 }6 e6 Y! q, @2 x0 c3 [

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

+ b4 i0 l0 I8 }0 _

采用来拟合,则有

5 N5 z3 `, u' o% ^

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

! C! M: m# `5 f4 p7 U, o s

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

4 g, t5 g6 R2 L4 e: D

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

; ~& p( c' U( g2 B

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

. \" y! f0 M$ V$ @

a=X\y

1 ~. x2 T( c* E( X8 O

a = 0.1018 0.4844 −0.2847

, p# Y( M3 z* c* t7 h) B

因此数据的拟合模型为

+ k, M" z/ s$ F' L5 z. j

y=0.1018+0.4844x1−0.2487x2

& t% {6 y7 B4 V0 Q

4、傅里叶分析与FFT

j% U% a7 W4 ^8 v8 L- Q* M& f

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

' ^- e b+ Z' P+ w! P

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

5 {, R+ x* R% a" n/ A+ r

t=0:1/119:1;

3 K: d; T) n8 G

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

( a4 B2 r! ?& f: t! |

y=fft(x);

; v" y1 j* D5 I1 r

m=abs(y);

& p4 ^& G. V+ F

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

4 B% Z9 n; a( [- J' t; {

figure(1)

! a! t' R( |4 A; R' Y& Y

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

) U& b7 d: o! i/ d* y* l

title(多频率混合信号)

4 W9 _; C2 A, W/ }4 V

ylabel(Input \itx),xlabel(Time )

+ R( t0 v6 V$ s1 I

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

% |4 A( j# k! V# N, D6 ~

ylabel(Abs. Magnitude),grid on

5 _! h% O4 n' A4 B/ \! G+ E7 L0 B

xlabel(Frequency (Hertz))

: K* `, e6 p$ G& m: q
0 c" b! V0 s' x2 Y4 ^: ^

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

0 S% ?% E1 R c% l& s, S3 U

t=0:1/199:1;

) r, [ ]+ U% t! y0 E p4 t

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

. E* O( |; O/ ?. B4 V5 U

y=fft(x);

6 k3 w8 h& U0 ?2 T3 s& e+ w2 S

m=abs(y);

) Y2 [% D% H8 S j( Y% B/ _- a

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

$ \4 F; \4 Y g) f- k: |: f. C

figure(1)

4 G+ Y; A- l; d1 L# I: q5 W9 d6 w& W

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

2 {& B L8 K- |8 Q/ S

title(信号检测)

_, n% h8 `, f# [. o$ _

ylabel(Input \itx),xlabel(Time )

9 \8 n& N2 A' K

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

1 Z4 o2 }6 R, L, C# Y* R

ylabel(Abs. Magnitude),grid on

! W, Q7 q; O* T3 N; s/ G

xlabel(Frequency (Hertz))

* D/ L$ D! n* \! n1 a0 k
3 S. g/ {6 w6 w7 H5 g: Q

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

2 X/ H: r" m. M( V5 z2 A2 q

load sunspot.dat

) d9 `: Z2 O! S/ t4 q* K) B/ C5 @

year=sunspot(:,1);

# o' x7 t$ C2 Y, U/ H* o% S* {

wolfer=sunspot(:,2);

# s- y. @$ Z% [/ J8 m

figure(1)

* R" K3 C \! r' m8 }

subplot(2,1,1)

$ l& `5 e. t8 Q

plot(year,wolfer)

9 J, R' H' h* I# c1 V4 N. w

title(原始数据)

9 a! M* N! `& n5 n5 f$ B

Y=fft(wolfer);

4 y k/ I y/ i# i7 _5 y2 f* W

N=length(Y);

" A/ c, h& P) m& P- m3 y \

Y(1)=[];

5 {4 P) i" L3 _# u$ v

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

; j8 Q' T( w t8 `

nyquist=1/2;

% @2 d- P( k% w0 L- y% {, l4 D) U

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

$ x! K1 n8 Z' z( u2 Q9 r! x

period=1./freq;

9 X7 g+ i' _. U2 I9 f

subplot(2,1,2)

$ \7 j, s( w2 |- Z( G$ c1 f

plot(period,power)

% G( r8 s( M- G- I! q: p3 u8 U

title(功率谱), grid on

8 y% R! v! R9 r; X* S/ W

axis([0 40 0 2e7])

9 y4 N% X1 ]5 h. ]) P2 i) l
2 o+ N& P) A2 e5 E/ H

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

4 C$ N5 Q: w# h" [' u7 Q 7 o7 y5 F2 Y* v# m& `. a5 ^ ; P9 j" X+ ~* v' ?- _ 7 C7 S% i0 e: s7 Z' D0 `( n; q1 ~+ K, ]* x8 R

相关帖子

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