永发信息网

MATLAB程序提示:Attempted to access y(:,3); index out of bounds because size(y)=[7,1],该怎么改

答案:2  悬赏:10  手机版
解决时间 2021-01-15 13:22
  • 提问者网友:
  • 2021-01-14 18:15
MATLAB程序提示:Attempted to access y(:,3); index out of bounds because size(y)=[7,1],该怎么改
最佳答案
  • 五星知识达人网友:北城痞子
  • 2021-01-14 19:54
初值设成六个,而不是七个,[0.50 0 0 0 0 0]改为[0.5 0 0 0 0 0 0]
子函数里这一句:u=6.28*k0*r+0.13*r+6.28*k1*y(:,3)+45.45*y(:,3)+6.28*k2*y(:,4);
改为u=6.28*k0*r+0.13*r+6.28*k1*y(3)+45.45*y(3)+6.28*k2*y(4);


main.m
global S
ts=0.001;
TimeSet=[0:ts:60];
b1=1;b2=100;b=50;
Am=[0,1;-b2,-b1];
eig(Am)
Q=[20,10;10,20];
p=lyap(Am',Q);
p12=p(1,2);
p22=p(2,2);
para=[b1,b2,b,p12,p22];
[t,y]=ode45('chap7_4plant',TimeSet,[0.5 0 0 0 0 0 0],[],para);
k0=y(:,5);
k1=y(:,6);
k2=y(:,7);
switch S
    case 1
        r=1.0*sign(sin(0.05*t*2*pi));
    case 2
        r=1.0*sin(1.0*t*2*pi);
end
u=6.28*k0.*r+0.13*r+6.28*k1.*y(:,3)+45.45*y(:,3)+6.28*k2.*y(:,4);
figure(1);
subplot(211);
plot(t,y(:,1),'r',t,y(:,3),'k:','linewidth',2);
xlabel('Time(s)');ylabel('position signal tracking');
subplot(212);
plot(t,y(:,1)-y(:,3),'r','linewidth',2);
xlabel('Time(s)');ylabei('Position tracking error');
figure(2);
plot(t,u,'r','linewidth',2);
xlabel('Time(s)');ylabel('Control input');
figure(3);
subplot(3,1,1);
plot(t,k0,'r','linewidth',2);
xlabel('Time(s)');ylabel('k0');
subplot(3,1,2);
plot(t,k1,'r','linewidth',2);
xlabel('Time(s)');ylabel('k1');
subplot(3,1,3);
plot(t,k2,'r','linewidth',2);
xlabel('Time(s)');ylabel('k2');子函数: chap7_4plant.m
function dy=chap7_4plant(t,y,flag,para)
global S
dy=zeros(7,1);
S=1;
switch S
    case 1
        r=1.0*sign(sin(0.05*t*2*pi));
    case 2
        r=1.0*sin(1.0*t*2*pi);
end
p12=para(4);
p22=para(5);
e=y(1)-y(3);
de=y(2)-y(4);
eF=p12*e+p22*de;
k0=y(5);
k1=y(6);
k2=y(7);
u=6.28*k0*r+0.13*r+6.28*k1*y(3)+45.45*y(3)+6.28*k2*y(4);
b1=para(1);b2=para(2);b=para(3);
dy(1)=y(2);
dy(2)=b*r-b1*y(2)-b2*y(1);
a1=20;a2=25;a=133;
dy(3)=y(4);
dy(4)=a2*y(3)-a1*y(4)+a*u;
dy(5)=200*eF*r;
dy(6)=200*eF*y(3);
dy(7)=200*eF*y(4);运行结果:

全部回答
  • 1楼网友:等灯
  • 2021-01-14 20:27
你的y没有定义吧,或者大小弄错了吧
y(:,5);
是非法取值
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯