资源简介

由BP神经网络完成PID参数自适应,这是其中由M文件编写的S函数

资源截图

代码片段和文件信息

function [sysx0strts]=my_exppidf(txuflag)
switch flag
    case 0
        [sysx0strts]=mdlInitializeSizes;
    case 2
        sys=mdlUpdates(xu);
    case 3
        sys=mdlOutputs(txu);
    case {149}
        sys=[];
    otherwise
        error([‘unhandled flag=‘num2str(flag)]);%异常处理
end
function[sysx0strts]=mdlInitializeSizes
    sizes=simsizes;%用于设置模块参数的结构体用simsizes来生成
    sizes.NumContStates=0;%模块连续状态变量的个数
    sizes.NumDiscStates=3;%模块离散状态变量的个数
    sizes.NumOutputs=4;%模块输出变量的个数
    sizes.NumInputs=7;%模块输入变量的个数
    sizes.DirFeedthrough=1;%模块是否存在直接贯通,1表示存在直接贯通,若为0,则mdlOutputs函数里不能有u
    sizes.NumSampleTimes=1;%模块的采样时间个数至少是一个
    sys=simsizes(sizes);%设置完后赋给sys输出
    x0=zeros(31);%系统状态变量设置
    str=[];
    ts=[0.1 0];%采样周期设为0表示是连续系统,%     ts=[0.001 0];%采样周期设为0表示是连续系统,
    

function sys=mdlUpdates(xu)
        T=0.001;
        x=[u(5);x(2)+u(5)*T;(u(5)-u(4))/T];%3个状态量(偏差、偏差和以及偏差变化量),u(5)是偏差,u(4)是上一次的偏差,x(2)则是之前的偏差和
        sys=[x(1);x(2);x(3)];
function sys=mdlOutputs(txu)
            xite=0.2;
            alfa=0.05;
            IN=3;H=5;OUT=3;
    
            Oh=zeros(51);%产生一个1*5的零矩阵(行矩阵)
            I=Oh;
            xi=[u(1)u(3)u(5)];%神经网络训练的3个输入,期望值、误差以及实际值
            epid=[x(1);x(2);x(3)];%3个状态变量(偏差、偏差和、偏差变化量)(3*1矩阵,列向量)
            I=xi*wi‘;%隐层的输入
       

评论

共有 条评论