⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rls_ident.m

📁 控制系统计算机辅助设计——MATLAB语言与应用(源代码)
💻 M
字号:
function [sys,x0,str,ts]=rls_ident(t,x,u,flag,r,m,P0,lam)
switch flag,
   case 0 % 初始化
      [sys,x0,str,ts] = mdlInitializeSizes(r,m,P0);
   case 2  % 离散状态更新
      sys=mdlUpdate(t,x,u,r,m,lam);
   case 3 % 计算输出量,亦即控制率和权值
      sys = mdlOutputs(t,x,u,r+m+1);
   case {1, 4, 9} % 未定义的 flag 值
      sys = [];
   otherwise % 错误处理
      error(['Unhandled flag = ',num2str(flag)]);
end;
%   初始化程序
function [sys,x0,str,ts] = mdlInitializeSizes(r,m,P0)
sizes = simsizes; % 读入系统变量的默认值
sizes.NumContStates = 0; % 没有连续状态
sizes.NumDiscStates = (r+m+1)*(r+m+2); % 参数及 P 矩阵参数
sizes.NumOutputs = r+m+1; % 设置 r+m+1 路输出,即受控对象的待辨识参数
sizes.NumInputs = 12; % 设置 12 路输入,输入、输出信号及其以往值
sizes.DirFeedthrough = 0; % 输入信号直接不在输出中反映出来
sizes.NumSampleTimes = 1; % 单采样速率系统
sys = simsizes(sizes); % 设置系统模型变量
x0 = [zeros(r+m+1,1); P0(:)]; % 初始状态变量,亦即权值,设置成随机数
str = []; ts = [-1 0]; % 继承输入信号的采样周期
%   离散状态更新函数
function sys = mdlUpdate(t,x,u,r,m,lam)
psi=[-u(8:m+7); u(2:2+r)]'; PN=reshape(x(r+m+2:end),r+m+1,r+m+1);
K=PN*psi'/(lam+psi*PN*psi'); PN1=(PN-K*psi*PN)/lam;
sys=[x(1:r+m+1)+K*(u(7)-psi*x(1:r+m+1)); PN1(:)];
%   输出计算函数
function sys = mdlOutputs(t,x,u,M)
sys=x(1:M);   % 输出为前 M=r+m+1 个状态,即系统参数向量

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -