数学建模社区-数学中国

标题: 帮忙看下程序的错误 [打印本页]

作者: deven1985    时间: 2011-8-31 11:27
标题: 帮忙看下程序的错误
今天编了一段程序,如下:
clear all;
close all;
a=59.36;b=7.42;m=2374.46;n=296.92;
ts=0.001;
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];
B1=[0,0;0,0;m,-n;n,-m];
C1=[0,1,0,0];
D1=[0,0];
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');
x=[0;0;0;0];
r_1=0;r_2=0;g_1=0;g_2=0;
c=5.0;
eq=5;
q=30;
Ce=[c,1,1,1];
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=[r(k);dr(k);g(k);dg(k)];
   R1=[r1(k);dr1(k);g1(k);dg1(k)];
   
   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([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));

(错误行已用红色标出)

麻烦大家帮我看一下给怎么改,谢谢了!!

作者: 水木年华zzu    时间: 2011-9-3 11:13
本帖最后由 水木年华zzu 于 2011-9-3 11:14 编辑

这个错误已经是很明显的了,要求矩阵的逆矩阵,这个矩阵必须是方阵
检查下面的公式计算出来为什么不是方阵就就行了
(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k)
作者: alair006    时间: 2012-2-7 17:02
恩,参考一下。。5790429752658510




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5