📄 rlsidentmompv.m
字号:
%变遗忘因子的实时算法
%di'=[-y(i),-y(i+1),...,-y(i+n-1),u(i),...u(i+n-1)]
%系数向量o'=[an,...a1,bn,...b1]
%p代表遗忘因子
%打开数据
%load('c:\\MATLAB701\\work\\data.mat'); %打开数据
data;
%标量的输入
fprintf(1,'\n');%换行
n=input('input the system order of n :'); %变量数为2n
O1=zeros(2*n,1); %系数向量,下标1表示为迭代的第k次
P1=1000*eye(2*n);
N=200-n; %可用数据总数
p=1-1/N; %遗忘因子
z=2*n; %z代表信息量的总和,先验误差的加权平方和
%初值取2*n*噪声方差,这里方差为1
j=0; %计算残差平方和,舍去前2*n项
for i=1:N
u1=u(i:n+i-1);
%y1=y(1:2*n)
y1=-y(i:n+i-1);
d1=[y1;u1]; %测量数据
e=y(n+i)-d1'*O1; %预测偏差
K=P1*d1/(d1'*P1*d1+1); %增益向量
O2=O1+K*e; %系数向量
%P2=(1-K*d1')*P1; %递推矩阵,这个语句导致严重错误,不是1而是单位阵
%P2很快就不再是方阵,但不会提示错误
p=1-(1-d1'*K)*e^2/ z;
if p<=0.95
p=0.95;
end
P2=(eye(2*n)-K*d1')*P1/p;
%P2=P1-K*d1'*P1;
O1=O2;
P1=P2;
if i>2*n
j=j+e^2;
end
end
O1
j
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -