资源简介

内容包括:实例,文档分析,设计过程和MATLAB仿真程序。首先利用BP网络对以下非线性系统进行辨识,然后利用模型参考自适应方法,设计NNMARC控制器

资源截图

代码片段和文件信息

% 2018年11月19日 by zhangyaokun
% BP identification
clear all;
close all;
%% BP网络参数初始化
xite=0.30;  %学习速率
alfa=0.05;  %动量因子

w2=rands(91);  %随机初始化网络权值
w2_1=w2;w2_2=w2_1;  %网络结构,4-9-1
w1=rands(49);
w1_1=w1;w1_2=w1;
dw1=0*w1;

I=[000000000]‘;
Iout=[000000000]‘;
FI=[000000000]‘;

%% 训练网络,对非线性系统进行辨识
for count=1:100
    x=[0000]‘;%网络的初始输入为0
 %   x=[000]‘;%网络的初始输入为0
    u_1=0;y_1=0;y_2=0;
    
    for  k=1:1:500   %使用500个样本点训练数据
        time(k)=k;
        u(k)=sin(2*pi/3*k) + 1/3*sin(2*pi/6*k);
        y(k) = u_1+ y_1 * (2*y_2 + 1) / (1+ y_1^2 + y_2^2);  %非线性系统

        for  j=1:1:9
             I(j)=x‘*w1(:j);  
  %           Iout(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));
             Iout(j)=1/(1+exp(-I(j))); %网络隐含层输出,使用sigmod函数
        end   
        yn(k)=w2‘*Iout;         % 网络的输出层输出
        e(k)=y(k)-yn(k);    % 辨识误差

        %网络权值修正
        w2=w2_1+(xite*e(k))*Iout+alfa*(w2_1-w2_2);  %反向传播,梯度法算输出层权值修正值

        for j=1:1:9
          FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;  %隐含层网络的导数
%             FI(j)=4/((exp(I(j))+exp(-I(j)))^2);
        end
        for i=1:1:4
           for j=1:1:9
              dw1(ij)=xite*e(k)*FI(j)*w2(j)*x(i);
           end
        end
        w1=w1_1+dw1+alfa*(w1_1-w1_2);

        for j=1:1:9
           yu=w2(j)*w1(1j)*FI(j);    %Jacobian
        end
        dyu(k)=yu;

        %各参数更新
        x(1)=u(k);
        x(2)=y(k);
         x(3)=y_1;
         x(4)=y_2;

        w1_2=w1_1;w1_1=w1;
        w2_2=w2_1;w2_1=w2;
        u_1=u(k);
        y_2=y_1;
        y_1=y(k);
    end
end
%% 网络训练情况曲线显示
figure(1);
plot(timey‘r‘timeyn‘b‘);
xlabel(‘times‘);ylabel(‘y and yn‘);
figure(2);
plot(timee‘r‘);
xlabel(‘times‘);ylabel(‘error‘);
figure(3);
plot(timedyu);
xlabel(‘times‘);ylabel(‘dyu‘);

%% 使用新的数据测试网络
x=[0000]‘;  %网络初始输入为0
u_1=0;y_1=0;y_2=0;  %系统初始输出输入重新初始化为0
I=[0000000]‘;
Iout=[0000000]‘;
for k=1:1:200   %使用200个样本点
    time1(k)=k;   
   uc(k)=sin(2*pi/4*k) + 1/5*sin(2*pi/7*k);   %新的测试函数
 %   uc(k)=sin(2*pi/3*k*ts) + 1/3*sin(2*pi/6*k*ts);
    yc(k) = u_1+ y_1 * (2*y_2 + 1) / (1+ y_1^2 + y_2^2);  %非线性系统
    
    for  j=1:1:9   
         I(j)=x‘*w1(:j);   
  %        Iout(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));
         Iout(j)=1/(1+exp(-I(j))); %网络隐含层输出,使用sigmod函数
    end   
    ync(k)=w2‘*Iout;         % 网络的输出层输出
    ec(k)=yc(k)-ync(k);    % 辨识误差
    
    %各参数更新
    x(1)=uc(k);
    x(2)=yc(k);
     x(3)=y_1;
     x(4)=y_2;
    
    u_1=uc(k);
    y_2=y_1;
    y_1=yc(k);
end
figure(4);
plot(time1yc‘r‘time1ync‘b‘);
xlabel(‘times‘);ylabel(‘y and yn‘);
figure(5);
plot(time1ec‘r‘);
xlabel(‘times‘);ylabel(‘error‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-04-25 02:21  BP_identification\
     文件        7563  2018-12-10 21:35  BP_identification\aaa.mat
     文件       41089  2018-12-11 15:40  BP_identification\BP_identification_MRAC.vsdx
     文件       77484  2018-12-10 19:52  BP_identification\error.jpg
     文件        2983  2018-12-10 17:01  BP_identification\Identification_BP.m
     文件        2463  2018-12-11 15:33  BP_identification\Identification_BP_offline.m
     文件       52318  2018-12-11 11:24  BP_identification\MRAC-E.jpg
     文件       26199  2018-12-11 11:52  BP_identification\MRAC-E1.jpg
     文件       53017  2018-12-11 11:24  BP_identification\MRAC-U.jpg
     文件       28280  2018-12-11 11:52  BP_identification\MRAC-U1.jpg
     文件       72799  2018-12-11 11:24  BP_identification\MRAC-Y.jpg
     文件       36841  2018-12-11 11:51  BP_identification\MRAC-Y1.jpg
     文件        2437  2018-12-11 14:34  BP_identification\MRAC_BP_offline.m
     文件      105888  2018-12-10 19:51  BP_identification\output.jpg
     文件        4039  2018-12-10 19:18  BP_identification\testdata.mat
     文件        3891  2018-12-10 19:18  BP_identification\traindata.mat
     文件      448203  2019-03-12 18:58  神经网络非线性系统辨识与模型参考自适应控制器设计.docx

评论

共有 条评论