gusucode.com > ​​系统辨识中的各种辨识算法matlab源码程序 > code/lsident.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);

dn=zeros(1,2*n);       %给dn赋初值
fprintf(1,'\n');%换行
%N=input('input the munber of data of N :');
N=200-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];             %新的一组数据
dn=[dn;d1'];            %构造数据矩阵
end

yn=y(n+1:n+i);         
dN=dn(2:i+1,:);        %数据矩阵,去除第一行零元素
o=inv(dN'*dN)*dN'*yn

%模型阶次的检验
%损失函数检验法
j=(yn-dN*o)'*(yn-dN*o)
%AIC准则采用赤池信息准则判断系统的阶,即用基本信息量定界准则
%AIC=(1+2p/N)*J   p=2*n
%当 AIC达到极小时,可以将此时系统的结数作为系统阶的估计值。
AIC=j+2*2*n*j/N