Matlab灰箱辨识函数nlgreyest的使用

以简单的单摆模型为例,进行灰箱辨识。

1.单摆模型

图1 单摆的切线受力图

单摆切线受力图如图1所示,图片来源于网络。

可简单写出切线方向运动方程

ml \ddot{\theta}=-mgsin\theta -kl\dot{\theta}

式中l表示单摆长度,m代表摆球质量,g为重力加速度,\theta表示单摆与固定点垂直轴间的夹角,假定存在一个阻碍运动的摩擦阻力,其阻力大小与速度成正比,摩擦系数为k

取状态变量x_{1}=\thetax_{2}=\dot{\theta},并考虑单摆的力矩T,将力矩看成单摆系统的控制输入,写成状态空间方程形式如下, 

\dot{x_{1}}=x_{2}

\dot{x_{2}}=-\frac{g}{l}sinx_{1}-\frac{k}{m}x_{2}+\frac{1}{ml^{2}}T

2.Matlab辨识函数的用法

此处主要参考matlab官方帮助文档,

2.1 nlgreyest函数的用法:

函数形式

sys= nlgreyest(data,init_sys)
sys= nlgreyest(data,init_sys,options)

描述

sys= nlgreyest(data,init_sys) 利用时域数据(data)估计非线性系统(init_sys)参数;若有额外的估计要求则可以选填(options)选项。

其中非线性系统init_sys的模型需要依靠idnlgrey函数建立。

2.2 idnlgrey函数的用法

函数形式

sys = idnlgrey(FileName,Order,Parameters)
sys = idnlgrey(FileName,Order,Parameters,InitialStates)
sys = idnlgrey(FileName,Order,Parameters,InitialStates,Ts)
sys = idnlgrey(FileName,Order,Parameters,InitialStates,Ts,Name,Value)

描述

idnlgrey函数根据描述的结构、输入输出的数目、阶数、参数、初始状态等创建灰箱模型。

系统的输入输出数据data需要利用iddata函数建立

函数形式

data = iddata(y,u,Ts)

描述

iddata根据时域输出信号y,时域输入信号u,采样时间Ts创建iddata数据对象。

下面直接上手试一下,更为直观。

3.灰箱模型的辨识过程

3.1 系统仿真数据

调用simulink中设置好的模型,进行仿真实验。

%%
%系统仿真及参数设定
% Pendulum model
% Gravity
g = 9.81; % [m/s^2]
% Pendulum mass
m = 1; % [kg]
% Pendulum length
l = 0.5; % [m]
zn=0.1;%阻尼系数
% Measurement noise covariance
R = 1e-2;
% Sampling time
Ts2 = 0.01; % [s]

out=sim('pendulum_line');

3.2 定义单摆的模型函数

按照系统模型定义输出方程与状态方程,系统模型参数用a1、a2、a3替代

function [dx,y]=pendulum(t,x,u,a1,a2,a3,varargin)
y=x(1);%输出方程
dx=[x(2);
    a1*sin(x(1))+a2*x(2)+a3*u];%状态方程
end

3.3 进行灰箱模型的定义

%利用idnlgrey函数进行系统灰箱模型定义
FileName='pendulum';
Order=[1 1 2];%分别表示输入阶数1、输出阶数1、状态阶数2
Parameters=[-10;-1;1/m*l^2];%初始参数
InitialStates=[pi/2;0];%初始状态
Ts=0;%采样时间,0对应于连续系统
Sys=idnlgrey(FileName,Order,Parameters,InitialStates,Ts,...
    'Name','S_Model',...
    'InputName',{'T'},...
    'OutputName',{'theta'});
Sys=setpar(Sys,'Name',{'a1';'a2';'a3'});%把模型的参数名字设定一下
Sys.Parameters(3).Fixed = true;%假设m和l已知,所以此参数固定

3.4 系统参数辨识

%%
%系统参数辨识

%1.读取数据
data=[out.simin.signals.values,out.simout.signals.values];
Z=data(:,2);%系统输出
N=length(Z);%数据长度
u=data(:,1);%系统输入
data2=iddata(Z,u,Ts2);

%2.灰箱模型辨识
Sys=nlgreyest(data2,Sys,nlgreyestOptions('Display','on'));
figure;
compare(data2,Sys);%辨识结果对比

3.5 辨识结果

图2 辨识结果与输入数据对比

图3 辨识值与真实值对比

可见辨识准确度还是可以的,关系参数辨识工具箱的使用目前里面还有很多不太了解的地方,后续再继续进行尝试更新。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值