神经网络非线性系统辨识与模型参考自适应控制器设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

试论述神经网络系统建模的几种基本方法。利用BP网络对以下非线性系统进行辨识。非线性系统22()(2(1)1)(1)()1()(1)ykykykukykyk1)首先利用u(k)=sin(2*pi*k/3)+1/3*sin(2*pi*k/6),产生样本点500,输入到上述系统,产生y(k),用于训练BP网络;2)网络测试,利用u(k)=sin(2*pi*k/4)+1/5*sin(2*pi*k/7),产生测试点200,输入到上述系统,产生y(k),检验BP/RBF网络建模效果。3)利用模型参考自适应方法,设计NNMARC控制器,并对周期为50,幅值为+/-0.5的方波给定,进行闭环系统跟踪控制仿真,检验控制效果(要求超调5%)。要求给出源程序和神经网络结构示意图,计算结果(权值矩阵),动态过程仿真图。1、系统辨识题目中的非线性系统可以写成下式:22()(2(1)1)(1)()();()1()(1)ykykykfukfykyk使用BP网络对非线性部分()f进行辨识,网络结构如图1.1所示,各层神经元个数分别为2-8-1,输入数据为y(k-1)和y(k-2),输出数据为y(k)。图1.1辨识非线性系统的BP网络结构使用500组样本进行训练,最终达到设定的0.0001的误差,训练过程如图1.2所示图1.2网络训练过程使用200个新的测试点进行测试,得到测试网络输出和误差结果分别如下图1.3,1.4所示。从图中可以看出,相对训练数据而言,测试数据的辨识误差稍微变大,在±0.06范围内,拟合效果还算不错。图1.3使用BP网络辨识的测试结果图1.4使用BP网络辨识的测试误差情况clearall;closeall;%%产生训练数据和测试数据U=0;Y=0;T=0;u_1(1)=0;y_1(1)=0;y_2(1)=0;fork=1:1:500%使用500个样本点训练数据U(k)=sin(2*pi/3*k)+1/3*sin(2*pi/6*k);T(k)=y_1(k)*(2*y_2(k)+1)/(1+y_1(k)^2+y_2(k)^2);%对应目标值Y(k)=u_1(k)+T(k);%非线性系统输出,用于更新y_1ifk500u_1(k+1)=U(k);y_2(k+1)=y_1(k);y_1(k+1)=Y(k);endendy_1(1)=0.0001;y_1(2)=0;y_2(1)=0;y_2(2)=0.0001;y_2(3)=0;%为避免组合后出现零向量,加上一个很小的数X=[y_1;y_2];save('traindata','X','T');clearvars-exceptXT;%清除其余变量U=0;Y=0;Tc=0;u_1(1)=0;y_1(1)=0;y_2(1)=0;fork=1:1:200%使用500个样本点训练数据U(k)=sin(2*pi/4*k)+1/5*sin(2*pi/7*k);%新的测试函数Y(k)=u_1(k)+y_1(k)*(2*y_2(k)+1)/(1+y_1(k)^2+y_2(k)^2);ifk200u_1(k+1)=U(k);y_2(k+1)=y_1(k);y_1(k+1)=Y(k);endendTc=Y;Uc=u_1;y_1(1)=0.0001;y_1(2)=0;y_2(1)=0;y_2(2)=0.0001;y_2(3)=0;%为避免组合后出现零向量,加上一个很小的数Xc=[y_1;y_2];save('testdata','Xc','Tc','Uc');%保存测试数据clearvars-exceptXcTcUc;%清除其余变量,loadtraindata;loadtestdata;%加载训练数据和测试数据%%网络建立与训练[R,Q]=size(X);[S,~]=size(T);[Sc,Qc]=size(Tc);Hid_num=8;%隐含层选取8个神经元较合适val_iw=rands(Hid_num,R);%隐含层神经元的初始权值val_b1=rands(Hid_num,1);%隐含层神经元的初始偏置val_lw=rands(S,Hid_num);%输出层神经元的初始权值val_b2=rands(S,1);%输出层神经元的初始偏置net=newff(X,T,Hid_num);%建立BP神经网络,使用默认参数net.trainParam.epochs=400;%设置训练次数net.trainParam.max_fail=50;net.trainParam.goal=0.0001;%设置meansquareerror,均方误差,net.trainParam.lr=0.05;%设置学习速率net.iw{1,1}=val_iw;%初始权值和偏置net.lw{2,1}=val_lw;net.b{1}=val_b1;net.b{2}=val_b2;[net,tr]=train(net,X,T);%训练网络save('aaa','net');%将训练好的网络保存下来%%网络测试A=sim(net,X);%测试网络E=T-A;%测试误差error=sumsqr(E)/(S*Q)%测试结果的的MSEA1=sim(net,Xc);%测试网络Yc=A1+Uc;E1=Tc-Yc;%测试误差error_c=sumsqr(E1)/(Sc*Qc)%测试结果的的MSEfigure(1);plot(Tc,'r');holdon;plot(Yc,'b');legend('exp','act');xlabel('testsmaple');ylabel('output')figure(2);plot(E1);xlabel('testsample');ylabel('error')2、MRAC控制器被控对象为非线性系统:22()(2(1)1)(1)()();()1()(1)ykykykfukfykyk由第一部分对()f的辨识结果,可知该非线性系统的辨识模型为:(1)[(),(1)]()IpykNykykuk可知u(k)可以表示为(1)pyk和(),(1)ykyk的函数,因此可使用系统的逆模型进行控制器设计。选取参考模型为低阶线性模型:(1)0.3()0.2(1)()mmmykykykrk;因此神经网络控制器CN为:()[(),(1)]0.3()0.2(1)()IukNykykykykrk根据上述原理,设计控制器相应程序如下:%%MRAC控制器load('-mat','aaa');v1=0.3;v2=0.2;ym_2=0;ym_1=0;y_2=0;y_1=0;u_1=0;r_1=0;%系统初始输入输出fork=1:1:500time(k)=k;rin(k)=0.5*sign(sin(2*pi*k/50));%周期50,幅值0.5的阶跃信号ym(k)=v1*ym_1+v2*ym_2+r_1;%参考系统模型,根据要求的性能指标进行选择yout(k)=u_1+y_1*(2*y_2+1)/(1+y_1^2+y_2^2);%非线性系统e_c(k)=ym_1-yout(k);%当前误差,这里ym和yout差了一步,故应用ym_1减去ym_2=ym_1;ym_1=ym(k);y_2=y_1;y_1=yout(k);X=[y_1;y_2];fn=sim(net,X);%网络对非线性部分的预测输出u(k)=-fn+v1*y_1+v2*y_2+r_1;u_1=u(k);r_1=rin(k);endfigure(1);plot(time,rin,'g',time,ym,'r',time,yout,'b');xlabel('time(s)');ylabel('ym,y');figure(2);plot(time,u);xlabel('time(s)');ylabel('Controlinput');figure(3);plot(time,e_c,'r');xlabel('time(s)');ylabel('error');对于周期为50,幅值为+/-0.5的方波给定,仿真结果分别如图2.1-2.3所示。图2.1控制器对方波信号的跟踪性能图2.2控制器对方波信号的跟踪误差图2.3控制器的控制量输出情况由上图可以看出,所示的神经网络控制器对于给定方波信号,能够准确跟踪,稳态误差几乎为0,超调量在10%左右,要满足设计指标要求还需进一步调试。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功