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

发布时间 : 星期五 文章神经网络非线性系统辨识与模型参考自适应控制器设计 - 图文更新完毕开始阅读

试论述神经网络系统建模的几种基本方法。利用BP网络对以下非线性系统进行辨识。

非线性系统

y(k?1)?y(k)(2y(k?1)?1)?u(k) 221?y(k)?y(k?1)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、系统辨识

题目中的非线性系统可以写成下式:

y(k?1)?f(?)?u(k);f(?)?y(k)(2y(k?1)?1) 221?y(k)?y(k?1)使用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所示。从图中可以看出,相对训练数据而言,测试数据的辨识误差稍微变大,在 范围内,拟合效果还算不错。

图1.3 使用BP网络辨识的测试结果

图1.4 使用BP网络辨识的测试误差情况

clear all; close all;

%% 产生训练数据和测试数据 U=0; Y=0; T=0;

u_1(1)=0; y_1(1)=0; y_2(1)=0;

for k=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_1 if k<500

u_1(k+1) = U(k); y_2(k+1) = y_1(k); y_1(k+1) = Y(k); end end

y_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 -except X T ; %清除其余变量 U=0; Y=0; Tc=0;

u_1(1)=0; y_1(1)=0; y_2(1)=0;

for k=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); if k<200

u_1(k+1) = U(k); y_2(k+1) = y_1(k); y_1(k+1) = Y(k); end end

Tc=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 -except Xc Tc Uc ; %清除其余变量,

load traindata; load testdata; %加载训练数据和测试数据

%% 网络建立与训练

[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; %设置mean square error, 均方误差, 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) %测试结果的的MSE A1=sim(net,Xc); %测试网络 Yc= A1 + Uc;

E1=Tc-Yc; %测试误差

error_c = sumsqr(E1)/(Sc*Qc) %测试结果的的MSE

figure(1); plot(Tc,'r'); hold on; plot(Yc,'b');

legend('exp','act'); xlabel('test smaple'); ylabel('output') figure(2); plot(E1);

xlabel('test sample'); ylabel('error')

2、MRAC控制器

被控对象为非线性系统:

y(k?1)?f(?)?u(k);f(?)?y(k)(2y(k?1)?1) 221?y(k)?y(k?1)由第一部分对f(?)的辨识结果,可知该非线性系统的辨识模型为:

yp(k?1)?NI[y(k),y(k?1)]?u(k)

可知u(k)可以表示为yp(k?1)和y(k),y(k?1)的函数,因此可使用系统的逆模型进行控制器设计。选取参考模型为低阶线性模型:

ym(k?1)?0.3ym(k)?0.2ym(k?1)?r(k);因此神经网络控制器NC为:

u(k)??NI[y(k),y(k?1)]?0.3y(k)?0.2y(k?1)?r(k)

根据上述原理,设计控制器相应程序如下: %% MRAC控制器 load('-mat','aaa');

联系合同范文客服:xxxxx#qq.com(#替换为@)