递推最小二乘,遗忘因子递推最小二乘,模糊遗忘因子最小二乘系统辨识的实验分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下是仿真所用代码

%遗忘因子递推最小二乘参数估计(FFRLS)
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为A、B阶次
L=400; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1)/5; %白噪声序列
lambda=[0.99 0.98 0.95 0.9 0.85 0.80 0.75 0.70];
lambda11=[0.99];
lambda2=0.98; %带遗忘因子最小二乘辨识的遗忘因子
for lambda2=lambda11
    close all;
a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
thetae_1=zeros(na+nb+1,1); %带分段遗忘因子最小二乘辨识的thetae初值
thetae_2=zeros(na+nb+1,1); %带遗忘因子最小二乘辨识的thetae初值
thetae_3=zeros(na+nb+1,1); %标准最小二乘辨识的thetae初值
P1=10^6*eye(na+nb+1);  %带遗忘因子最小二乘辨识的P0
P2=10^6*eye(na+nb+1); %带分段遗忘因子最小二乘辨识的P0
P3=10^6*eye(na+nb+1); %标准最小二乘辨识的P0
lambda1=0.98; %带分段遗忘因子最小二乘辨识的遗忘因子
lasr_e=0;
% delat_k=1;
u_kk=0;
for k=1:L
    if k==201
        a=[1 -1 0.4]';b=[1.5 0.2]'; %对象参数突变
    end
    k
    theta(:,k)=[a(2:na+1);b]; %对象参数真值
    
    phi=[-yk;uk(d:d+nb)];
    y(k)=phi'*theta(:,k)+xi(k); %采集输出数据
    
    %遗忘因子递推最小二乘法
    K1=P1*phi/(lambda1+phi'*P1*phi);
    K2=P2*phi/(lambda2+phi'*P2*phi);
    K3=P3*phi/(1+phi'*P3*phi);
    e=y(k)-phi'*thetae_1;
    e_k(:,k)=e;
    dd=e-lasr_e;
    delat_k(:,k)=d; 
    lasr_e=e;
  %  e=y(k)-phi'*thetae_1_n;
    if(abs(e)<0.1)  
        u_kk=0.99;
    end
    if(abs(e)<0.25)  
        u_kk=0.98;
    end
    if(abs(e)<1)
        u_kk=0.98;
    end
    if(abs(e)>1)
        u_kk=0.8;
    end
    if(abs(e)>2)
        u_kk=0.75;
    end
    lambda1=u_kk;
    thetae1(:,k)=thetae_1+K1*(y(k)-phi'*thetae_1);
    thetae2(:,k)=thetae_2+K2*(y(k)-phi'*thetae_2);
    thetae3(:,k)=thetae_3+K3*(y(k)-phi'*thetae_3);
    a2=readfis("Untitled");
    lambda2=evalfis(e,a2);
    P1=(eye(na+nb+1)-K1*phi')*P1/lambda1;
    P2=(eye(na+nb+1)-K2*phi')*P2/lambda2;
    P3=(eye(na+nb+1)-K3*phi')*P3;
    %更新数据
    thetae_1=thetae1(:,k);
    thetae_2=thetae2(:,k);
    thetae_3=thetae3(:,k);
    error_1(:,k)=norm(thetae_1-theta(:,k))/norm(theta(:,k));
    error_2(:,k)=norm(thetae_2-theta(:,k))/norm(theta(:,k));
    error_3(:,k)=norm(thetae_3-theta(:,k))/norm(theta(:,k));
   
    for i=d+nb:-1:2
        uk(i)=uk(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        yk(i)=yk(i-1);
    end
    yk(1)=y(k);
end
figure
subplot(1,2,1)
plot([1:L],thetae1(1:na,:)); hold on; plot([1:L],theta(1:na,:),'k:');
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae1(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),'k:');
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L -0.5 2]);
figure
subplot(1,2,1)
plot([1:L],thetae2(1:na,:)); hold on; plot([1:L],theta(1:na,:),'k:');
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae2(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),'k:');
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L -0.5 2]);

figure
subplot(1,2,1)
plot([1:L],thetae3(1:na,:)); hold on; plot([1:L],theta(1:na,:),'k:');
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae3(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),'k:');
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L -0.5 2]);
figure
hold
plot(error_1')
plot(error_2')
plot(error_3')
end

模糊模块下载:
https://pan.baidu.com/s/1VHV1xGm0XNiSvYdsxVKpPA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章