遞推最小二乘,遺忘因子遞推最小二乘,模糊遺忘因子最小二乘系統辨識的實驗分析

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
以下是仿真所用代碼

%遺忘因子遞推最小二乘參數估計(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

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