数学建模是用数学方法解决各种实际问题的桥梁,它已经渗透到各个领域,而且发挥出越来越重要的作用。面对自然科学和工程应用中的难题,大部分人无从入手,而个别人却能短时间内给出切实可行的解决方案,其差别往往在于驾驭数学知识的能力不同。现代计算机技术的应用不仅减少了计算错误,而且加强了数学应用者解决问题的能力。MATLAB是一款常用的数据处理软件,为了更好的应用MATLAB软件,我将整理好的MATLAB函数分享到今日头条上,以利己利人查阅。
MATLAB提供的很多数据分析与统计函数都是面向列的,即矩阵中的每一列代表一个变量的多个观测值,其列数对应于变量数,行数对应于测量点数。
max和min函数可求出数据的最大值和最小值,mean和std函数可求出数据的均值和标准差,sum和prod函数可求出数据元素和与数据元素积。例如,对MATLAB内含的某城市24小时的车流量数据count.dat可作分析:
load count.dat
mx=max(count)
mx = 114 145 257
mu=mean(count)
mu = 32.0000 46.5417 65.5833
sigma=std(count)
sigma = 25.3703 41.4057 68.0281
对有些函数还可给出位置,例如,在求出最小值的同时,可得到最小值所在的位置(行号):
[mx,indx]=min(count)
mx = 7 9 7
indx = 2 23 24
1、协方差和相关系数
cov函数可以求出单个变量的协方差,而corrcoef函数可求出两个变量之间的相关系数,例如:
cv=cov(count)
cv = 1.0e 003 *
0.6437 0.9802 1.6567
0.9802 1.7144 2.6908
1.6567 2.6908 4.6278
cr=corrcoef(count)
cr =
1.0000 0.9331 0.9599
0.9331 1.0000 0.9553
0.9599 0.9553 1.0000
2、数据预处理
在MATLAB中遇到超出范围的数据时均用NaN (非数值) 表示,而且在任何运算中,只要包含NaN,就将它传递到结果中,因此在对数据进行分析前,应对数据中出现的NaN作剔除处理。例如:
a=[1 2 3;5 NaN 8;7 4 2];
sum(a)
ans = 13 NaN 13
在矢量x中删除NaN元素,可有下列四种方法:
(1) i=find(~isnan(x));x=x(i)。
(2) x=x(find(~isnan(x)))。
(3) x=x(~isnan(x))。
(4) x(isnan(x))=[ ]。
在矩阵X中删除NaN所在的行,可输入
X(any(isnan(X)'),:)=[ ];
经过这种预处理后的数据,可进行各种分析和统计操作。
3、回归和曲线拟合
对给定的数据进行拟合,可采用多项式回归,也可采用其它信号形式的回归,其基本原理是最小二乘法,这一功能实现在MATLAB中显得轻而易举。
例1:设通过测量得到一组时间t与变量y的数据:
t=[0 .3 .8 1.1 1.6 2.3];
y=[0.5 0.82 1.14 1.25 1.35 1.40];
进行回归,可得到两种不同的结果。MATLAB程序如下:
t=[0 .3 .8 1.1 1.6 2.3]';
y=[.5 .82 1.14 1.25 1.35 1.40]';
X1=[ones(size(t)) t t.^2];
a=X1\y;
X2=[ones(size(t)) exp(–t) t.*exp(–t)];
b=X2\y;
T=[0:.1:2.5]';
Y1=[ones(size(T)) T T.^2]*a;
Y2=[ones(size(T)) exp(-T) T.*exp(-T)]*b;
figure(1)
subplot(1,2,1)
plot(T,Y1,'-',t,y,'o'),grid on
title('多项式回归')
subplot(1,2,2)
plot(T,Y2,'-',t,y,'o'),grid on
title('指数函数回归')
例2 已知变量y与x1,x2有关,测得一组数据为
x1=[.2 .5 .6 .8 1.0 1.1 ]';
x2=[.1 .3 .4 .9 1.1 1.4 ]';
y=[.17 .26 .28 .23 .27 .24]';
采用来拟合,则有
x1=[.2 .5 .6 .8 1.0 1.1]';
x2=[.1 .3 .4 .9 1.1 1.4]';
y=[.17 .26 .28 .23 .27 .24]';
X=[ones(size(x1)) x1 x2];
a=X\y
a = 0.1018 0.4844 −0.2847
因此数据的拟合模型为
y=0.1018 0.4844x1−0.2487x2
4、傅里叶分析与FFT
利用MATLAB提供的FFT函数可方便地计算出信号的傅里叶变换,从而在频域上对信号进行分析。
例1 :混合频率信号成分分析。有一信号x由三种不同频率的正弦信号混合而成,通过得到信号的DFT,确定出信号的频率及其强度关系,程序如下:
t=0:1/119:1;
x=5*sin(2*pi*20*t) 3*sin(2*pi*30*t) sin(2*pi*45*t);
y=fft(x);
m=abs(y);
f=(0:length(y) -1)'*119/length(y);
figure(1)
subplot(2,1,1),plot(t,x),grid on
title('多频率混合信号')
ylabel('Input \itx'),xlabel('Time ')
subplot(2,1,2),plot(f,m)
ylabel('Abs. Magnitude'),grid on
xlabel('Frequency (Hertz)')
例2 :信号在传输过程中,由于受信道或环境影响,在接收端得到的是噪声环境下的信号。我们利用FFT函数对这一信号进行傅里叶分析,从而确定信号的频率,程序如下:
t=0:1/199:1;
x=sin(2*pi*50*t) 1.2*randn(size(t)); %噪声中的信号
y=fft(x);
m=abs(y);
f=(0:length(y) -1)'*199/length(y);
figure(1)
subplot(2,1,1),plot(t,x),grid on
title('信号检测')
ylabel('Input \itx'),xlabel('Time ')
subplot(2,1,2),plot(f,m)
ylabel('Abs. Magnitude'),grid on
xlabel('Frequency (Hertz)')
例3 :天文学家记录了300年来太阳黑子的活动情况,我们对这组数据进行傅里叶分析,从而得出太阳黑子的活动周期。MATLAB程序如下:
load sunspot.dat
year=sunspot(:,1);
wolfer=sunspot(:,2);
figure(1)
subplot(2,1,1)
plot(year,wolfer)
title('原始数据')
Y=fft(wolfer);
N=length(Y);
Y(1)=[];
power=abs(Y(1:N/2)).^2;
nyquist=1/2;
freq=(1:N/2)/(N/2)*nyquist;
period=1./freq;
subplot(2,1,2)
plot(period,power)
title('功率谱'), grid on
axis([0 40 0 2e7])
各位读者朋友,感谢您的阅读,您若对工程应用中的数学问题感兴趣,欢迎关注我,愿我们一起讨论和成长!!!