这是我的代码,我在运行时,总是出现
xiaoche_1
索引超出数组元素的数目(5)。
出错 xiaoche_1 (line 47)
u_1=u(k);
有大佬知道怎么解决吗?
clear all;
close all;
e_0=0; %定义起始的误差
e_1=0;
u_0=0;
u_1=0;
y_0=0;
m_0=0;
m_1=0;
y_1=0;
y_2=0;
y_3=0;
Y_0=0;
Y_1=0;
A_0=[1,1,1]';
P_0=10^6*eye(3,3);
c=0.995;%遗忘因子
F_O=0;
for k=1:1:99
time(k)=k;
r(k)=sign(sin(0.01*pi*k));%产生方波信号
y(k)=0.091*y_0+0.91*u_1;%此处有问题
m(k)=2*m_0-m_1+y_0;
x(1,1)=0.44*y(k)-0.5*y_0+0.06*y_1;
x(2,1)=0.44*y_0-0.5*y_1+0.06*y_2;
x(3,1)=0.44*y_1-0.5*y_2+0.06*y_3;
e(k)=r(k)-y(k);
Y(k)=2*Y_0-Y_1+0.1*r(k);%此处有问题
E(k)=Y(k)-m(k);
F(k)=abs(e(k))*e(k)^2; %做过修改,+变*
F(k)=F(k)+F_O; %F_0代表前一时刻的值
F_O=F(k);
if(abs(E(k))<=1)
u(k)=A_0(1)*e(k)+A_0(2)*e_0+A_0(3)*e_1+u_1; %此处A_0代表的为cta
P_1=P_0/c-P_0*x*((c+x'*P_0*x)^(-1))*x'*P_0/c;
v(k)=0.1*u_1-0.1*u_0;
A_1=A_0+P_0*x*((c+x'*P_0*x)^(-1))*(v(k)-(x')*A_0);
A_0=A_1;
P_0=P_1;
end
y_2=y_1;
y_1=y_0;
y_0=y(k);
Y_1=Y_0;
Y_0=Y(k);
u_0=u_1;
u_1=u(k);
e_1=e_0;
e_O=e(k);
end
figure(1);
plot(time,r,'k');
xlabel('time(s)');ylabel('r');
axis([0,100,-5,5]);
figure(2);
plot(time,Y,'k');
xlabel('time(s)');ylabel('Y');
axis([0,100,-5,5]);
figure(3);
plot(time,y,'k');
xlabel('time(s)');ylabel('y');
axis([0,100,-5,5]);
figure(4);
plot(time,m,'k');
xlabel('m');ylabel('m');
axis([0,1,-100,100]);
figure(5);
plot(time,E,'k');
xlabel('time(s)');ylabel('E');
axis([0,100,-5,5]);
A_0,P_1,F(k)