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

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

[复制链接]
. c2 E$ R# ?% F, O5 G
' ], W( X$ k- U% _4 _

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

3 x! j! s" r) S" M' B

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

; r8 ~ R+ J4 b# y4 r8 u' u

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

% V+ t9 E- m. F

load count.dat

$ u' H8 t* ~: ^& p5 R3 B3 Y

mx=max(count)

$ P& j/ D0 y! z6 @

mx = 114 145 257

" K3 t7 Q0 m+ L% v* [" D. v

mu=mean(count)

- A1 k* u d! w

mu = 32.0000 46.5417 65.5833

/ Q0 G5 M& `2 W

sigma=std(count)

6 J( B& ^& L" X2 o+ C+ x# _3 b7 D

sigma = 25.3703 41.4057 68.0281

2 Q/ ~* |) [9 V6 m' F! W6 ~

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

3 U9 h! h0 _! S5 r2 Z

[mx,indx]=min(count)

! Q$ N. }: c$ V% O

mx = 7 9 7

( q3 h& k9 V0 ?) v: o

indx = 2 23 24

1 M T8 i) R# P) A F

1、协方差和相关系数

) {- B! G# F# S+ k0 Y; k

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

0 X9 ]" q- g/ Z& h

cv=cov(count)

( ^* b" U+ I" j/ U$ S7 k; [3 L

cv = 1.0e+003 *

. i2 e' d0 E4 E

0.6437 0.9802 1.6567

: ^3 P$ N. U( n3 Y( p

0.9802 1.7144 2.6908

, d1 a8 c/ R+ }5 w" k5 g9 p& ?

1.6567 2.6908 4.6278

% ^# T" Y0 K0 ~8 W7 A4 ~/ o. y6 X

cr=corrcoef(count)

4 ^& T9 r' G6 P8 ?$ R# i) I2 M- M0 n

cr =

' a2 G C ~7 E+ w

1.0000 0.9331 0.9599

4 ^* M/ V# ^: f: s/ q3 e

0.9331 1.0000 0.9553

7 I V) y6 s% k3 u% P9 f

0.9599 0.9553 1.0000

4 d, |7 ^) F! Q- h4 B9 S

2、数据预处理

1 |: l5 c0 {; ^& e

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

3 _; I4 A) h% n% w8 X

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

$ `8 u6 S0 O( n, b9 e* {0 \

sum(a)

5 v" |$ X+ n; q; l4 O

ans = 13 NaN 13

& S8 Z0 R( I1 I* u. E5 M

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

* p% g' }( A5 b ~

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

; i5 t( _0 \3 N7 _

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

: a! B+ ]$ K5 p$ v( p

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

& q$ o3 ^7 S6 a$ [* R

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

$ }+ O" b, f& j% e. D$ J) X1 {

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

! o% T2 a5 @8 p/ V, d$ f

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

! P$ m0 \/ U1 M% u4 H

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

9 j0 B: G/ Q; u2 ^ q9 e+ A

3、回归和曲线拟合

6 r' g Y" ~- r2 M& ]

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

$ ?3 C: m$ j% X. w) W

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

9 q' ~, A& R6 u+ z0 y

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

- U- ]+ I9 A9 x& m

y=[0.5 0.82 1.14 1.25 1.35 1.40];

: s1 @+ z3 y$ J! x9 S9 O* b4 U' p1 E' Z
& j* X* u7 R1 @( @ l1 I

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

& `1 G; a- q9 t# N

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

: j( b3 z! h8 C3 d/ J

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

( h) Q1 d# ^* x; D) y

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

: U9 A5 q0 S" m3 }- y" d

a=X1\y;

2 _5 z9 k! q: C

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

0 q: p0 W, [1 ]; X6 Q/ ?. C) M

b=X2\y;

. @" Y6 c7 w" A) ?+ w' a W. o

T=[0:.1:2.5];

- f! o) o8 F, H1 [

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

+ l9 d" n |, z4 ~7 L/ U n7 Y

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

2 F! ]2 k6 {2 S+ \/ K4 b

figure(1)

. C- ^9 M) c. g/ u4 }' s* h; l

subplot(1,2,1)

% w0 o! l* _3 B) d- w3 S Q! i* e

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

& `- Y' m- w) Z! r

title(多项式回归)

4 M1 I2 o. h A8 S) J

subplot(1,2,2)

1 g J& M% K! n% @: ~8 l# X% s

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

# o* g* G) W* ?0 [6 X

title(指数函数回归)

! s- a# q5 Q; B. S! u6 Q
1 I- N& z" H! o7 R/ U

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

9 Y0 A" E& G2 I* \! p- K: x

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

{& l/ {+ \, Z1 q- {' c

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

! n; a% E$ ~' t) E2 @: X" r! p7 V' [

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

/ H! n7 Y4 n- b% K) L! i, W1 d: v

采用来拟合,则有

% k4 W' J$ g, `$ Z5 e# y

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

# b+ m! s* s; Y3 [

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

! B0 x* w" \) p( E$ i

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

& f8 J0 o, J R9 Q$ a

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

* _) V& P3 k) v% n& R6 d F2 I/ ]

a=X\y

0 J% V! I2 U6 L" {# N/ m1 G9 T& |* y

a = 0.1018 0.4844 −0.2847

2 n g$ ?. `8 p x+ h$ g

因此数据的拟合模型为

) l& w# g' M# ?% Y! J9 t2 W: x

y=0.1018+0.4844x1−0.2487x2

. A6 N6 V* r" `6 A

4、傅里叶分析与FFT

$ U6 r5 i X, t7 k |6 w

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

+ a% s0 u$ E1 j2 |6 S l) |7 b, w

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

& q5 Q2 L7 @4 L. ?2 ~

t=0:1/119:1;

. C7 I7 v& G7 e3 g

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

) ^2 E4 W; k' v. E4 f! T5 q

y=fft(x);

2 s" ~5 }, K& e& s5 ]

m=abs(y);

' `4 \% T1 g4 O, @) R" s

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

, L9 }8 U. z, x$ x+ m& z/ b

figure(1)

7 R0 \; F2 T2 s

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

9 b. q- Y( L- v/ V/ Y' l3 F, ?* n' n

title(多频率混合信号)

& y' w# x( i" r

ylabel(Input \itx),xlabel(Time )

/ Z9 x D ~0 P! N* k

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

a ~2 T7 c4 O; z3 ~9 b/ }7 Y

ylabel(Abs. Magnitude),grid on

% [+ M6 k# @" {& S$ K

xlabel(Frequency (Hertz))

4 S1 }' | S& l+ R
8 ~7 }# |5 w! Z- T1 w' ^3 t

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

7 i# v, d; X# L

t=0:1/199:1;

9 }# i. s. g4 x' U" F3 r

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

: W" ? u6 r! t- H

y=fft(x);

$ @( T- h- O0 i4 g* t/ |' R

m=abs(y);

/ U4 [' j; T4 B' O9 }% U2 S! H

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

8 Z4 {6 B: w$ O4 m) E% ]

figure(1)

3 b1 a( b/ u2 c" l. V

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

' d6 o7 s! ]4 b& t5 A" h

title(信号检测)

. y. H; b% t3 p5 x. l1 ]

ylabel(Input \itx),xlabel(Time )

- v. q9 a1 E; |8 T! z- B% w8 J

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

% Y, {4 U9 M+ S3 B1 ~6 k9 n$ y

ylabel(Abs. Magnitude),grid on

. Y& T' W+ h8 [

xlabel(Frequency (Hertz))

, [- R: b: Y, j# }- q% G7 C, X6 }
5 ~5 w% P' x$ N( ^/ O

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

$ B7 c0 r/ Z6 G/ B' n

load sunspot.dat

+ A5 b- H8 I$ Q

year=sunspot(:,1);

: P/ M$ k. }) M7 [% e( j

wolfer=sunspot(:,2);

6 Z( C( n8 \/ w. V

figure(1)

0 i' `4 I/ F, Q4 ]

subplot(2,1,1)

6 {! X! W7 x* q( \. W( Y$ B

plot(year,wolfer)

* Q/ a" A* t! ^/ `" R. B( e

title(原始数据)

/ q+ V& R$ B2 V+ G% `9 d/ |' g- E& `

Y=fft(wolfer);

/ ?- H6 [" r1 t! o4 e

N=length(Y);

+ b/ _/ S4 C1 U! H3 Q, d5 J! I) p

Y(1)=[];

; ?) g- B5 w, A6 @3 W: F, {" n/ y

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

& B; ~2 F) \, q. J: d

nyquist=1/2;

8 O/ w& S P' b& Z8 g0 \4 {( P

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

* [0 W5 ~1 D' {: S6 ?% `

period=1./freq;

, e- W: Y6 B& N6 G) b

subplot(2,1,2)

+ M% y R2 b! ]2 p

plot(period,power)

2 S2 ~5 h8 Q# t2 W

title(功率谱), grid on

/ Z" K: n' `: F: ^

axis([0 40 0 2e7])

! }. a/ u- f: v* M
1 @; e+ I- [( y U1 F

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

6 W6 m" D ^+ v1 ^8 z9 P/ h7 u4 O+ C) X$ W2 _0 r 1 O( G& C% }; }9 [ t7 T 4 O+ Q+ u, h% c ) y( h E. d6 K
回复

举报 使用道具

相关帖子

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