M=3;
if M==1 %EXP reaching law
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
elseif M==2 %Variable rate reachine law
ds(k)=-eq*ts*X1*sign(s(k));
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
elseif M==3 %Coposite reaching law
k0=0.60;
if X1>k0 %EXP reachine law
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k)); elseif X1<=k0 %Variable rate reachine law
ds(k)=-eq*ts*X1*sign(s(k));
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
end
end
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
x=A*x+B*u(k);
y(k)=x(1);
%Update Parameters
r_2=r_1;
r_1=r(k);
end
figure(1)
plot(time,r,'r',time,y,'b');
xlabel('Time(second)');ylabel('Position tracking');
figure(2)
plot(time,s,'r');
xlabel('Time(second)');ylabel('Switch function s');
figure(3)
plot(e,de,'r',e,-c*e,'b');
axis([0,0.001,-0.01,0]);
xlabel('e');ylabel('de');
figure(4)
plot(time,u,'r');
xlabel('Time(second)');ylabel('u');
运行后系统提示:
??? Error using ==> inv
Matrix must be square.
Error in ==> matlab02 at 56
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));