想用下列代码实现一个利用递归最小二乘法求误差估计的功能,但代码运行后,为什么得到的估计值A全部为0,代码虽能运行,但结果是错的,想请编程方面的专家给指导以下,是代码错误还是其他什么原因导致的此种结果。
t=xlsread('E:\MATLAB\PLF\时间戳数据.xlsx');%读取时间戳文件
[rownum,colnum]=size(t);%读取文件的行数和列数
rownum_1=mod(rownum,42);
B=zeros(42-rownum_1,1);
t1=cat(1,t,B);%将t补全到可以被42整除
[rownum_2,colnum_2]=size(t1);%读取新t1的行数和列数
x_colnum=floor(rownum_2/42);%将每列变为42个数
delta_t=reshape(t1,42,x_colnum); %将数据重塑为42行,colnum_1列的数
theta_0 = 2 * pi/42;
lambda=1;
%初始化参数估计
sum_delta_t = zeros(42,x_colnum);
omega_bar= zeros(42,x_colnum);
theta = zeros(42,x_colnum);
delta_theta = zeros(42,x_colnum);
delta_theta_bar = zeros(42,x_colnum);
delta_theta_g= zeros(size(delta_t));
delta_theta_g(:,1)=0;
P= zeros(size(delta_t));
P(:,1)=1;
K= zeros(42,x_colnum);
A= zeros(42,1);
for i = 1:42
for k=2:colnum_1
%齿圈误差辨识模型
if i==42
sum_delta_t(i,k) =sum(delta_t(1:i,k));
else
sum_delta_t(i,k) = sum(delta_t(i+1:42,k-1)) + sum(delta_t(1:i,k)) ;
end
omega_bar(i,k) = 2 * pi / sum_delta_t (i,k);%车轮每转一圈的平均角速度
theta(i,k) = omega_bar(i,k) * delta_t(i,k);%每个齿角度测量值
delta_theta(i,k) = theta(i,k)- theta_0 ;%第k圈第i齿的误差测量值
delta_theta_bar(i,k)=delta_theta_g(i,k-1)-delta_theta(i,k); %估计值与测量值间差距
K(i,k) = P(i,k-1)/(P(i,k-1) + lambda); %计算增益矩阵
delta_theta_g(i,k) =delta_theta_g(i,k-1) + K(i,k)*delta_theta_bar(i,k); %更新参数估计
P(i,k) = (P(i,k-1) - K(i,k)*P(i,k-1))/lambda; %更新协方差矩阵
if abs(delta_theta_g(i,k)-delta_theta_g(i,k-1))<1e-6 && sum(delta_theta_g(:,k))==0
A(:,k)=delta_theta_g(:,k);
end
end
end
你把结果发给我看一下吧