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

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

[复制链接]
$ P& h8 F2 K; F/ }7 ], u
0 u0 d1 m1 o1 W3 D$ i

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

8 Q' m+ X( f A3 ~5 S. a

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

* {4 H0 c3 S% a8 X1 `: F

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

' V- l, ?/ o1 d* l: }7 s8 c

load count.dat

$ K8 r( C1 F+ O

mx=max(count)

! d7 o" {2 r) F4 i% g7 y+ k

mx = 114 145 257

3 g: m' x5 r( Y" b( ?

mu=mean(count)

z5 o m4 Y2 Y5 ~" P8 b$ S

mu = 32.0000 46.5417 65.5833

) [ [# E) L- n9 z

sigma=std(count)

E& e: d' {7 ?

sigma = 25.3703 41.4057 68.0281

8 L. [( u. x) ]( m7 _

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

u- s! V$ [/ B& a7 |( j

[mx,indx]=min(count)

/ J& G) `7 A' U6 z) T& U) G$ r

mx = 7 9 7

0 t# K5 ?' I. Z& z

indx = 2 23 24

" l# H% q4 z4 [5 b3 D; U7 S

1、协方差和相关系数

+ l+ C( E8 }0 ~/ }. A

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

# {3 g& c8 F X* l) Y) X

cv=cov(count)

. p) Q! j7 x2 @% x$ Z

cv = 1.0e+003 *

+ _# M/ `) z% B) n" N3 J; y

0.6437 0.9802 1.6567

% H+ D. A: e' f3 ~* ]* a

0.9802 1.7144 2.6908

; w: j# \- P$ [* A/ I

1.6567 2.6908 4.6278

: }& N) V: X( @8 J2 P {2 r" J

cr=corrcoef(count)

' ?0 s: ~6 p, Y: c- f( E

cr =

" |( J& i! z6 E Y# I( C4 ^% W

1.0000 0.9331 0.9599

& E. @# X; K9 M( ]+ b. r% R

0.9331 1.0000 0.9553

- a, m# }: P5 S- x

0.9599 0.9553 1.0000

' N: T b& U. |9 a% v

2、数据预处理

% p8 o6 I/ S8 [! X" k4 K# Q: p$ a

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

+ D5 D, P" T) u5 m. B

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

( T& s1 @% Q2 X! R7 }" D

sum(a)

+ Y. K1 E4 v3 b; P; R

ans = 13 NaN 13

9 {& S9 T; R) D& V% Y

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

- w$ P4 K' w" W# k) |( s

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

. [- s5 c. F% y* z3 @) i

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

* G3 m& ]& t* I) u" I/ r

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

8 ^6 s9 t; c4 u9 J/ |

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

9 K1 f$ A8 o3 `0 p! x* Y0 L: N

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

0 H2 V: r1 f7 ~/ W* G8 e( n. f

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

. b1 w( h7 \$ F) ]4 o

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

7 w: \2 h* Z( e7 v" M4 i

3、回归和曲线拟合

+ X8 {- a9 q3 j9 C# [7 d5 G

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

5 |& x" ~6 h2 y& g# y7 g) p

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

9 e7 S) y' O/ |* q9 V4 C5 y! S

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

! u$ d7 o: p. B/ t$ t

y=[0.5 0.82 1.14 1.25 1.35 1.40];

; r2 Y3 S$ c7 o t8 j2 S
0 C6 d& b- V7 Y4 U9 S4 W) V& w* [

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

5 _8 ^ Y0 b' j5 e

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

! b6 z3 z1 P$ t6 w8 Q

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

2 ^, Q9 k- p! P+ b) p6 I2 f& [5 y! d

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

/ k' V+ r) H* u; G; B2 n+ D5 V

a=X1\y;

: n( ?- ~ k: h- O0 d. v% \' D6 @* o

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

2 t2 x7 o+ O6 x/ k7 }# a9 ]; H/ O

b=X2\y;

& x: H {$ e+ l: b; s; g1 |

T=[0:.1:2.5];

) j+ G/ `1 i* E& t! n

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

1 ]9 i! w( ?& S3 @ m

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

3 Y, W# T, e2 N0 e

figure(1)

1 a$ c% F6 o$ D4 X8 M

subplot(1,2,1)

5 r% D4 |' k# C7 L1 N: H

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

" y1 e( C9 G4 p! u/ g7 u8 s o

title(多项式回归)

& [( V' {# J1 X# E# v7 o) j' V+ h. O) p2 S

subplot(1,2,2)

# ^- |/ _. u8 r+ z

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

2 v& j) U6 q% h* p: u5 S; }

title(指数函数回归)

" C( J0 {! P, H1 _/ a/ D2 |5 v# ~
# r% f6 Q$ ~8 Y+ r/ o9 L

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

; ^9 J, i3 u2 h5 }* Q3 c- A( b

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

% V5 R5 I* }# c3 g. t

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

0 Z' q" \" ]) J* n' ?

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

7 t. n& l8 {2 V- @

采用来拟合,则有

3 x7 S: {$ [- s: e! z( z

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

2 H" I+ T4 A0 ^% y0 Q0 U# U, a

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

! K1 y1 B$ A( L7 ]

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

. B; ~& e; q% I# N0 d! L2 L5 l

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

$ ]$ {7 [4 z6 a# Z

a=X\y

* a4 P& W' x9 T- ?% z) w4 ?

a = 0.1018 0.4844 −0.2847

& o/ |0 y4 H. ?. x- ]( ~+ l

因此数据的拟合模型为

: ^" N# J4 r3 r+ R

y=0.1018+0.4844x1−0.2487x2

1 S5 o6 V% Z3 s" Z

4、傅里叶分析与FFT

9 ?" N! B; K( t

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

8 V" _- a' C- H* G( h

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

+ D9 N" C! ?$ p" x6 ~9 r

t=0:1/119:1;

* z7 W- q, }9 O2 ^! O3 u

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

: _! ?3 G+ T3 A

y=fft(x);

% q' K) P+ F9 ]" _' O

m=abs(y);

, `. Q$ G& ^0 T4 c

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

# [9 I9 x9 U8 p! S, ^( J

figure(1)

; U7 b" ^ V! l

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

0 L1 @' {' s J$ v+ v

title(多频率混合信号)

( b8 y! s! V7 w# d& r* Z

ylabel(Input \itx),xlabel(Time )

8 o5 [" ^: E+ L! g' ?2 A

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

K1 v. b7 m# W0 r/ g9 r M

ylabel(Abs. Magnitude),grid on

. L0 r5 L" F- V2 |" N

xlabel(Frequency (Hertz))

4 O) ]9 S; c+ x6 ~& q- m) s
' ^5 Q, o, L0 v' q' I+ c G

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

, j7 e" A1 p9 ?4 c# p5 Q9 n, c

t=0:1/199:1;

+ ~2 ^# w# m% a, K( l% g1 m) C

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

3 Z: e( d. S0 G0 K8 O3 n, \

y=fft(x);

) B3 [7 H9 K" E4 ^4 g% P6 x

m=abs(y);

8 I3 i& O( x- h

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

" B+ A2 r; |: C9 Z

figure(1)

8 g0 \; X, \* X2 f3 q) [ R8 H

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

& @( S6 v) w! v7 ^

title(信号检测)

( @% o. {/ r7 k! m& Z S+ Z

ylabel(Input \itx),xlabel(Time )

* |( A4 f0 U) J0 v4 j( u) {9 Y

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

# y# L2 X/ \& n/ V! [: _

ylabel(Abs. Magnitude),grid on

+ U; F8 R; |- q" a3 @! O. d( v

xlabel(Frequency (Hertz))

2 N* V: p. N2 S' q" d3 m
$ M# p6 E- |0 f9 d9 b" W' K

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

, P( ~1 Y; Z& ?) D+ Y

load sunspot.dat

3 o6 h0 q8 M. e: g+ u

year=sunspot(:,1);

0 q* o `) b! V @6 D6 S* k+ D

wolfer=sunspot(:,2);

Z0 O- F+ Z3 ]3 s

figure(1)

* P& c! U! b: M' m2 E

subplot(2,1,1)

' Q' s4 m9 y7 d9 i: t0 U

plot(year,wolfer)

& B3 X5 h- F1 x+ R$ x' N) ?

title(原始数据)

1 B( ?2 i* j4 K" ]. T

Y=fft(wolfer);

" W7 l4 e' q* j' S- ~

N=length(Y);

3 v/ H4 A7 ~. d) ]& e

Y(1)=[];

7 `) ?$ J- ?' \

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

" z7 n. [# } b6 F s; r) i: _

nyquist=1/2;

9 |- {1 m r( ^9 R: a% T

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

2 K/ }; {& F& H3 J- s

period=1./freq;

, ]7 I% Z; F0 O

subplot(2,1,2)

- t7 ], I& _' M, D$ X6 K4 g$ ]. u

plot(period,power)

' ^$ O6 u+ {9 Z# _1 r

title(功率谱), grid on

! p* M, ]. D4 o3 p

axis([0 40 0 2e7])

( Q3 w/ a* G |& l" Y
j$ C9 G* {3 {/ K, L

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

, i' N& G& `2 k. R) U. ~' G, ]8 O # ~! V, w' Q, w) Z- s ) v7 g( ]1 i. O5 ]6 s2 o" r# T% d8 x A " f4 r5 w5 g6 O% o. f A
回复

举报 使用道具

相关帖子

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