帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑今天编了一段程序,如下:
clear all;
close all;
a=59.36;b=7.42;m=2374.46;n=296.92;
ts=0.001;
A1=;
B1=;
C1=;
D1=;
=c2dm(A1,B1,C1,D1,ts,'z');
x=;
r_1=0;r_2=0;g_1=0;g_2=0;
c=5.0;
eq=5;
q=30;
Ce=;
for k=1:1:2000
time(k)=k*ts;
r(k)=1.0;
g(k)=1.0;
%Using Waitui method
dr(k)=(r(k)-r_1)/ts;
dg(k)=(g(k)-g_1)/ts;
dr_1=(r_1-r_2)/ts;
dg_1=(g_1-g_2)/ts;
r1(k)=2*r(k)-r_1;
g1(k)=2*g(k)-g_1;
dr1(k)=2*dr(k)-dr_1;
dg1(k)=2*dg(k)-dg_1;
R=;
R1=;
E=R-x;
e(k)=E(1);
de(k)=E(2);
s(k)=Ce*E;
X1=abs(e(k))+abs(de(k));
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();
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));
(错误行已用红色标出)
麻烦大家帮我看一下给怎么改,谢谢了!!
路过,不会,帮顶!!!! Matrix must be square 这句话是说你的某个矩阵必须是方阵啊
其中某个矩阵不是方阵才出现这样的错误的 从你写的程序来看,Ce是一个1*4的矩阵,而B求出来则是一个4*2的矩阵,Ce*B应该是一个1*2的矩阵,是不可能求逆矩阵的,只有方阵行数列数相同才能求逆。 新手,来看看
页:
[1]