基于MATLAB控制系统辨识系列3-梯度矫正参数估计法

目录

一、原理

二、算法步骤:

三、代码实现:


梯度矫正参数估计法-RGC(recursive gradient correction)

一、原理


参数估计结构,与最小二乘法相似:增益矩阵x新息
基本原理为:沿着目标函数的负梯度方向,逐步修正模型参数估计值,直至目标函数达到最小值。递推过程中均为标量运算,计算量少。
优点:简单,实时计算量小
缺点:收敛速度慢

式中

基于MATLAB控制系统辨识系列3-梯度矫正参数估计法_第1张图片

参数估计的任务是根据可测量的输入和输出,na+nb+1确定个参数:
基于MATLAB控制系统辨识系列3-梯度矫正参数估计法_第2张图片
式中,\phi(k)为数据向量,\theta(k) 为待估参数向量,且

基于MATLAB控制系统辨识系列3-梯度矫正参数估计法_第3张图片

二、算法步骤:


已知na、nb和d
step1:设置初值及参数c和\alpha
step2:采样当前输出y(k)和输入u(k);
step3:利用公式2.4.7,计算\theta(k)
step4:k\rightarrow k+1,返回Step2,继续循环。

三、代码实现:

For Example:

控制系统模型为:y(k)-1.5y(k-1)+0.7y(k-2)=u(k-3)+0.5u(k-4)

则代码实现如下:

%确定性系统的递推梯度矫正参数估计(RGC)
clear all;close all;
a=[1 -1.5 0.7]';
b=[1 0.5]';d=3;%对象参数
na=length(a)-1;
nb=length(b)-1;%na,nb.nc分别为A,B,C阶次
L=1000;%仿真长度

uk=zeros(d+nb,1);%输入初值:uk(i)表示u(k-i)
yk=zeros(na,1);%输入采用白噪声序列
u=randn(L,1);
theta=[a(2:na+1);b];%对象参数真值

thetae_1=zeros(na+nb+1,1);%参数估计初值

alpha=0.5;%范围(0-2)

c=0.2;%修正因子

for k=1:L
    
    phi=[-yk;uk(d:d+nb)];
    y(k)=phi'*theta;%采集输出数据
    
    thetae(:,k)=thetae_1+alpha*phi*(y(k)-phi'*thetae_1)/(phi'*phi+c);%递推梯度矫正算法
    
    %更新数据
    tehtae_1=thetae(:,k);
    
    for i=d+nb:-1:2
        uk(i)=u(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        
        yk(i)=y(i-1);
    end
    yk(1)=y(k);
    
end

plot([1:L],thetae);
xlabel('k');ylabel('参数估计 a、b');
legend('a_1','a_2','b_0','b_1');
axis([0 L -2 2]);

参考书籍:系统辨识与自适应控制MATLAB仿真(第3版)-庞中华 崔红著
 

你可能感兴趣的:(算法,matlab)