以下是仿真所用代码
%遗忘因子递推最小二乘参数估计(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