王直杰
[摘要]本文采用Matlab仿真产生模拟的可用于线性与非线性动态系统建模的输入输出数据。根据这些数据,设计程序生成建模所需的数据矩阵。同时给出了最小二乘法、最大似然估计、BP神经网络、RBF神经网络建模的样例程序。为学生熟悉、比较及应用各种线性与非线性动态系统建模方法提供了条件。
[关键词]动态系统建模 仿真 人工神经网络
在讲授完线性与非线性动态系统建模方法基本理论以后,需要让学生进行上机实验[1]以达到以下目的:1进一步加深理解学习的基本理论;2各种参数的选择对建模效果的影响;3各种建模方法的优缺点及适用场合。为了达到这些目的,我们模拟实际应用时的情况,提供给学生模拟的输入输出数据,以便学生利用这些数据,进行编程建立模型。同时我们编程实现基于最小二乘法、最大似然估计、BP神经网络、RBF神经网络的动态系统建模方法[2,3],学生可以利用这些Matlab程序进行各种方法的学习、各种情况下建模效果的对比,以及各种方法的适用场合的对比。
一、 基于Matlab仿真的线性动态系统最小二乘法建模的教学
假设系统的差分方程为:y(k)=-a1y(k-1)-a2y(k-2)-…-any(k-n)+b0u(k)+b1u(k-1)+…+bmu(k-m)+e(k)。其中y(k)为输出,u(k)为输入,e(k)为模型残差。假定建模用的数据序列从y(k)开始,则构建以下数据矩阵及数据向量:
如果模型残差为白噪声(实际情况多为有色噪声,但当噪声强度不大时,可近似当作白噪声处理),则根据最小二乘法,由这 组数据估计得到的参数 。
以上的最小二乘法需要输入(u(K-m),u(K-1),…,u(K+N-1))和输出(y(K-n),y(K-n+1),…,y(K+N-1))数据,我们可用以下的Matlab程序(程序1)产生模拟的输入输出数据(程序中采用了一个简单的二阶离散系统,学生实验时可换成需要的模型),并形成数据矩阵及数据向量。
程序1:
clear all
K=3;%残差序列开始序号
N=1000;%共N组数据
n=2;%对应
m=2;%对应
u=randn(1,K+N-1)*0.1;%随机产生输入数据
for i=1:1:n
y(i)=0;%设定初始状态
end
for k=n+1:1:K+N-1
y(k)=0.2*y(k-1)+0.5*y(k-2)+u(k)+0.3*u(k-1);%根据输入计算输出
end
y=y+randn(1,K+N-1)*0.001; %在求得的单位阶跃响应上叠加噪声用以模拟测量误差
X=zeros(N,n+m+1);
for i=K:1:K+N-1
for j=1:1:n
X(i-K+1,j)=y(i-j);%构成矩阵X
end
for j=n+1:1:n+m+1
X(i-K+1,j)=u(i-j+n+1); %构成矩阵X
end
end
for i=K:1:K+N-1
Y(i-K+1)=y(i);%构成向量Y
end
save X X;
save Y Y;
save N N;
运行程序1将生产数据矩阵X(保存在X.mat中)及数据向量Y(保存在Y.mat中)。以下是根据最小二乘法估计参数的程序(程序2)。
程序2:
clear all
load X;
load Y;
XT=X';
sita=(XT*X)^(-1)*XT*Y'%计算得到估计的参数sita
运行程序2,将得到估计的参数sita。如某一次运行中sita=[0.2004,0.4998,0.9998,0.2995,-0.0005]T,与模型中的值(见程序1)a1=0.2,a2=0.5,b0=1,b1=0.3,b2=0非常接近。
二、 基于Matlab仿真的线性动态系统最大似然估计建模的教学
在模型残差为白噪声的假设下,最大似然估计和最小二乘法在估计参数时是相同的,但最大似然估计还能估计出噪声的强度,程序3为相应的程序。
程序3:
clear all
load X;
load Y;
load N;
XT=X';
sita=(XT*X)^(-1)*XT*Y'
Z=Y'-X*sita;
StdV=sqrt(Z'*Z/N)%估计标准差
运行程序3,得到和程序2一样的参数估计值,除此之外,还能得到噪声的标准差(或方差)。如某一次的运行结果为StdV=0.0011,和模型中值(见程序1)0.001非常接近。
三、 基于Matlab仿真的非线性动态系统BP神经网络建模的教学
基于神经网络的非线性动态系统建模的输入输出的样本数据组织如图1所示。
图1:基于神经网络的动态系统建模的样本数据的组织
如图1所示,当输入为y(K-1),y(K-2),…,y(K-n),u(K),u(K-1),…,u(K-m)时,期望输出为y(K),因此BP神经网络的输入输出数据样本对为(x,y),其中x,y分别为上述最小二乘法中的数据矩阵及数据向量,将程序1中的动态系统以非线性动态系统代替(如将y(k)=0.2*y(k-1)+0.5*y(k-2)+u(k)+0.3*u(k-1)
改为y(k)=0.2*y(k-1)+0.5*y(k-2)+2*u(k)*u(k)+0.3*u(k-1)),采用程序1产生非线性动态系统的数据,然后设计如下的基于BP神经网络的非线性动态系统建模程序(程序4)。
程序4:
clear all
load X;
load Y;
net = newff(X',Y,10);
net.trainParam.epochs = 100;
net.trainParam.goal = 0.000001;
net = train(net,X',Y);
Y1 = sim(net,X');
plot(Y,'s-');
hold on
plot(Y1,'*-');
save net net;
从程序4运行后的产生的图形中可以看出BP神经网络训练的效果。
四、 基于RBF神经网络的非线性动态系统建模教学
基于RBF神经网络的非线性动态系统建模的样本数据的组织和BP神经网络相同,因此可以使用BP神经网络建模时所用的样本数据进行建模实验,以便对比两种网络的建模效果。以下(程序5)是RBF神经网络建模的样例程序。
程序5:
clear all
load X;
load Y;
net=newrb(X',Y,0.000001);
Y1=sim(net,X');
plot(Y,'s-');
hold on
plot(Y1,'*-');
save net net;
从程序5运行后的产生的图形中可以看出RBF神经网络训练的效果。
五、 结论
本文设计了matlab程序,模拟产生较逼真的输入输出数据样本数据供学生使用,学生可以利用这些数据进行线性与非线性动态系统建模实验。同时也提供了面向动态系统建模的最小二乘法、最大似然估计、BP神经网络、RBF神经网络样例程序供学生学习使用。学生可以利用这些Matlab程序进行各种方法的学习、各种情况下建模效果的对比,以及各种方法的适用场合的对比。学生也可以参照这些程序编制更加复杂的程序以解决实际的系统建模问题。
基金资助:本文系东华大学信息学院教改项目的研究成果。
[参考文献]
[1]刘娣许有熊林健,基于MATLAB的“系统辨识”课程实验教学改革[J].中国电力教育,2013(1):139-140.
[2]王秀峰,卢桂章.系统建模与辨识[M].北京:电子工业出版社,2004.
[3]陈宗海.过程系统建模与仿真[M].合肥:中国科技大学出版社,1997.
(作者单位:东华大学 信息科学与技术学院 上海)