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

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

[复制链接]
$ m. v# n) Z& c( y* f+ A# {
4 M% e9 n6 c! H' T# f! [

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

e4 O- L( b8 v* e: Z

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

6 U/ T, Y1 q3 J- J

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

0 c1 }& N( }( K# ?) ^

load count.dat

6 g O0 U' F6 s) X! e$ @, d ?

mx=max(count)

! X( w7 u G+ Z7 U3 a

mx = 114 145 257

& P5 V5 i" j" U0 T" x: f

mu=mean(count)

& x! [( b- ^7 V

mu = 32.0000 46.5417 65.5833

/ j7 e* d/ i! u" {. c3 W/ q# V

sigma=std(count)

, v# r& X: S7 f. r

sigma = 25.3703 41.4057 68.0281

+ F( ^3 K3 B& B+ |5 A ]

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

# r v+ y/ O8 G2 a- m. @9 e1 [

[mx,indx]=min(count)

( v( |, {- A6 O2 Y+ O

mx = 7 9 7

% v- F" w2 V1 ?4 }4 `2 `4 m( L0 M" \

indx = 2 23 24

* G. Y& X* S" v) x/ N0 _1 K" X E

1、协方差和相关系数

7 B: n j- X! `% t

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

, v6 G1 \' R T! `4 {1 v

cv=cov(count)

) v% D& E8 x: M' y+ I

cv = 1.0e+003 *

5 p. k' [1 j# U% U+ f

0.6437 0.9802 1.6567

8 `, y$ f; R; D! k7 p* Q3 d1 e1 j( K, {7 y

0.9802 1.7144 2.6908

7 E* E* a" z# J( S5 D" {! I* }

1.6567 2.6908 4.6278

. H. l. A7 N! H' b4 \

cr=corrcoef(count)

9 ^, @5 H2 j) A9 \+ y

cr =

3 Z* g' J# Z, _5 S- t* q5 }

1.0000 0.9331 0.9599

9 }& b2 B* k, N+ r/ B+ N

0.9331 1.0000 0.9553

, A! n' {; _0 f& U @. }

0.9599 0.9553 1.0000

) v1 \, j/ E' S

2、数据预处理

+ |# ?& O4 c. q; i

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

. H% K2 O$ x' d

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

( _1 w0 X) |) l% @6 z

sum(a)

& a" @2 E D: l0 G B5 Y$ x# a

ans = 13 NaN 13

% ]9 J. O B) H) c$ }

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

# u5 w* B$ p) ]# K* w

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

$ V2 L" V9 k# \" Z7 O+ j; ?

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

, D0 q1 F5 c2 i0 l* q6 E& F

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

' T8 d0 Q" R( Z, J# p' _- f+ K0 s

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

" `4 X( x9 B! |' x) ~1 `- L

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

9 ` H6 q6 h) X+ P* X/ R* y+ t

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

- }; o* P# J' h! T! a9 X) ]- x

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

7 F6 P" R; n: |4 l; E$ R# p( @

3、回归和曲线拟合

# _1 E4 a+ O+ v) G8 a3 z

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

i- ]9 j% m0 w" l$ X! @" n, P

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

: V/ t# z6 C9 `8 M1 h @

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

* R; E7 ~7 L4 V! l& ~3 l# U

y=[0.5 0.82 1.14 1.25 1.35 1.40];

$ G5 d' j H* @4 E! C( b' @
: O/ G" j4 n2 O3 }6 B3 s

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

* O1 R f1 {' Z6 l7 {

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

: ]5 ]3 A8 C9 M" t( i

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

5 M( |* T* l7 a' p2 @& P

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

, q- O6 ^# y6 I& F

a=X1\y;

- l) Q# J, U/ X; A* w9 u; F

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

& P8 d9 f7 M: N# z$ w

b=X2\y;

) v& x0 Z7 N$ W5 A/ |) w" ~

T=[0:.1:2.5];

. Y1 G- B; Z) ?# D% b

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

! ?! O6 _0 G1 n [( f/ ]

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

1 ]# ^' o1 I/ E N; B7 V

figure(1)

9 r4 N8 y9 `5 A' [2 z. h

subplot(1,2,1)

/ w$ x1 V" A4 v: e$ y" T

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

" k8 t: w. x2 j$ m$ b. u$ ~! K

title(多项式回归)

+ J5 r: C" u' z# [: u& I& C1 d

subplot(1,2,2)

7 C s3 @! q& e6 J7 W. |

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

( P/ ]6 i% g' e% o- D# U

title(指数函数回归)

8 D! n e/ [6 [" ~1 j
- q/ t, c! V- E$ J4 q; i

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

/ E2 h3 [& |1 u+ H1 W; s$ R

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

O) v# i# t+ I/ S

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

% {/ x$ n5 j! Y, c" t: V* s

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

: ?' _) R2 ^* K+ [! Z* m

采用来拟合,则有

6 }) V+ x2 d, M* X. G9 @

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

5 a7 j- Z$ [: D2 A" L I3 X) p

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

) J. M1 r1 H8 v. E

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

' A, g2 X3 Z2 l$ C$ p. b B, t

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

; u5 _$ T5 ?; R

a=X\y

1 ?4 K( z0 k A0 G9 K

a = 0.1018 0.4844 −0.2847

$ U# p3 W8 [7 k. M4 w# } W1 y

因此数据的拟合模型为

! T0 U( |4 O5 c7 F; p5 t

y=0.1018+0.4844x1−0.2487x2

/ k) x/ P" x8 t5 z9 \

4、傅里叶分析与FFT

) R5 r& Q$ W2 w* W. F# t

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

. F* r9 P, _0 j

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

* s: e+ W* l) |. @

t=0:1/119:1;

4 s6 ^$ ?* u. M3 a

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

, |( J! k* J4 g" x0 ]8 w: Y4 W8 M

y=fft(x);

+ i, F( u+ Z6 q* h/ {) T, @# k1 ]

m=abs(y);

6 @6 S$ I2 X# i1 f5 H6 o: K# r

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

7 i+ y8 L# |4 V$ {1 n& f1 p; k

figure(1)

! b2 ~9 ?) f) c/ s$ H$ M

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

: O f' \' M" N/ ` {3 q: g

title(多频率混合信号)

: H3 i4 O7 }6 c6 ~4 d; h5 T2 V

ylabel(Input \itx),xlabel(Time )

8 `. ~: E3 c: V+ g

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

9 F5 b2 G4 n4 Y* v/ W' E; |: R7 n% `

ylabel(Abs. Magnitude),grid on

; y% g/ K/ k4 h4 T) z! B1 Q! J j

xlabel(Frequency (Hertz))

+ R- H' x' _5 [& e4 Q+ Z$ U) X- H
7 Z5 x- a" R* G r/ {

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

# ]. b" B0 e7 p5 V# |5 O

t=0:1/199:1;

( _0 b/ E& {7 d7 l7 c& g. s, }

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

. B7 F! T8 n N; f& z

y=fft(x);

( m: R, B# \/ y6 C/ j

m=abs(y);

! r, v5 C& g1 u# ?! Y: }

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

+ ^- T5 H" U0 D0 d, D: x: n

figure(1)

; U H1 s) e$ ?$ H% X# [

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

% c. |0 G2 m7 K

title(信号检测)

* A$ E, @8 `$ P+ k! i

ylabel(Input \itx),xlabel(Time )

+ l4 A" N0 n- {* v6 S

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

1 U0 y& s% ~- e/ ~' }7 V) I

ylabel(Abs. Magnitude),grid on

u0 M( r6 E7 l! T& [$ U

xlabel(Frequency (Hertz))

3 `& @2 s- v5 V0 w+ b7 M! K1 h6 |
, {9 ]/ x, k% k3 V

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

- g6 l7 s. r- z7 ~

load sunspot.dat

- Z5 i9 U/ h ~# d9 B$ g6 ^% B

year=sunspot(:,1);

0 m# i; C6 p/ H* ?# O

wolfer=sunspot(:,2);

$ c6 @, v1 O7 a0 i& \

figure(1)

+ d$ u3 z! ]& Y* K1 u" F1 `" A7 G

subplot(2,1,1)

* s' b% ^# D3 Z/ t

plot(year,wolfer)

* v% ]4 B5 P: m6 V- |* v

title(原始数据)

* D+ l. f8 j1 X. s5 @/ o* @

Y=fft(wolfer);

: a. f, ] q( ^+ C3 A! N6 c

N=length(Y);

& N5 C8 [2 X/ H

Y(1)=[];

& Y( v0 V! q1 A4 a7 ?

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

+ n+ C; P8 s5 w: b

nyquist=1/2;

7 P: q7 _ Q1 | u: r

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

+ F$ l7 b0 [! O

period=1./freq;

5 N& d6 r; A" ~

subplot(2,1,2)

+ g& r0 I9 r% }8 B% ` _' U

plot(period,power)

! O$ a5 E7 _, @9 b. o* s- P% |

title(功率谱), grid on

0 c* p' A$ v$ t% \; ?: L7 }5 ^

axis([0 40 0 2e7])

; o( r) U. k$ O3 j
( H. X& Z8 L1 g9 Z8 R9 n

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

* A, Y5 E: t1 E9 d M 6 Y* b+ l& u' u : s+ O9 p" v. ~) X) j: ^3 b5 W D 7 s7 e' @ A8 T% j0 R & J& ~* Y( x e; Y1 H
回复

举报 使用道具

相关帖子

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