gusucode.com > 系统辨识中的各种辨识算法matlab源码程序 > code/rlsident.m
%递推最小二乘法 %di'=[-y(i),-y(i+1),...,-y(i+n-1),u(i),...u(i+n-1)] %系数向量o'=[an,...a1,bn,...b1] %打开数据 %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; tic 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很快就不再是方阵,但不会提示错误 P2=(eye(2*n)-K*d1')*P1; %P2=P1-K*d1'*P1; O1=O2; P1=P2; end O1 toc