• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: Matlab
  • 标签: matlab  

资源简介

基于BP神经网络的一级倒立摆PID控制,经检验控制效果理想

资源截图

代码片段和文件信息

%基于BP神经网络的PID控制器设计
clc;
clear;
NI=3;NH=10;NO=3;                          %选取网络结构为:3-10-3             
%输入层到隐层权值初始化
Wih=0.01*rands(NINH);Wih_1=Wih;Wih_2=Wih;
%隐层到输出层权值初始化
Who=0.01*rands(NHNO);Who_1=Who;Who_2=Who;
%变量初始化
u=0;u_1=0;u_2=0;ly=0;err_1=0;err_2=0;
eta=0.5;                                   %给定学习率
a=0.1;                                     %给定动量项因子
ts=0.002;                                  %给定采样时间
%信号源选择:1—阶跃;2—正弦;3—方波;
souce=1;                                   %选择阶跃输入
%开始参数自学习实时控制
for k=1:1000
    t(k)=k*ts;
    %判断信号源
    switch souce
        case 1
            rin(k)=1;
        case 2
            rin(k)=sin(2*pi*t(k));
        case 3
            rin(k)=sign(sin(2*pi*t(k)));
        otherwise
            error(‘信号源错误!‘);         
    end
    %计算被控对象输出
    y(k)=1.2*(1-0.8*exp(-0.1*k))*ly/(1+ly^2)+u_1;    
    err(k)=rin(k)-y(k);                      %计算误差
    %-------------计算BP网络各层输入及输出-------------
    x1=err(k)-err_1; x2=err(k); x3=err(k)-2*err_1+err_2; 
    %输入层输入输出,注意:必要时输入要做归一化
    N1i=[x1x2x3];
    N1o=N1i;
    %隐层输入输出
    N2i=N1o*Wih;
    N2o=tanh(N2i);                          
    %输出层输入输出
    N3i=Who‘*N2o‘;                           
    N3o=1./(1+exp(-N3i));                    %注意:一定是点除!
    Kp(k)=N3o(1); Ki(k)=N3o(2); Kd(k)=N3o(

评论

共有 条评论