数学建模社区-数学中国

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

作者: deven1985    时间: 2011-8-31 11:23
标题: 帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑
' e7 ?4 R5 r" U' I. x; x8 X$ x* @" h, n3 Y- R  L$ Q+ j
今天编了一段程序,如下:
+ s  a1 M" ~9 ^3 N  p+ _clear all;8 \, a% C; h' V! K
close all;
& X' ~/ J2 s# t9 e; I& X' F$ |6 Ma=59.36;b=7.42;m=2374.46;n=296.92;: Z$ Z- @+ l7 t( D% K" C
ts=0.001;
; ~9 U8 O9 t: M9 Z" Q# @A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];1 t/ S* M5 M/ X% J6 V
B1=[0,0;0,0;m,-n;n,-m];
: H6 a+ {5 D+ h1 ^$ cC1=[0,1,0,0];1 S& }+ o( W% C
D1=[0,0];5 b* c+ M0 x. V* t* P
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');  q8 }4 v+ d1 G; [; \+ f
x=[0;0;0;0];6 E/ B& y! Z) T; s7 [
r_1=0;r_2=0;g_1=0;g_2=0;
. u/ e; }7 `5 R, L7 K7 A% S9 n$ ]: uc=5.0;
! }9 B9 L/ H4 S7 ?eq=5;4 Z6 r  S% n1 h
q=30;" P: z3 e. x6 h: n
Ce=[c,1,1,1];9 _0 Q- \& m) w  X, V1 g
for k=1:1:2000: C, s  A* C7 m5 f
time(k)=k*ts;; V: M3 o; A) I5 A7 ^$ l3 q# J
   r(k)=1.0;
  E- \+ l/ A/ w3 a5 w5 w) i   g(k)=1.0;
- q! a  E; t' e0 r1 W   ! N4 t! l* q+ X0 [9 W9 B
   %Using Waitui method   1 V' k( C# [9 Q
   dr(k)=(r(k)-r_1)/ts;8 i; K5 n+ t/ E( e
   dg(k)=(g(k)-g_1)/ts;
* ^9 u$ |7 H7 g; S   dr_1=(r_1-r_2)/ts;
0 U! ^% T* F% L+ n& _4 n* x9 F% d   dg_1=(g_1-g_2)/ts;
, y) x  P) F$ {1 `   r1(k)=2*r(k)-r_1;
6 M: k$ @1 v8 X- e; r2 Q   g1(k)=2*g(k)-g_1;
9 f6 N5 c0 e7 w2 l   dr1(k)=2*dr(k)-dr_1;
* `7 j2 ^) n6 u$ _; H( v6 r) S   dg1(k)=2*dg(k)-dg_1;: E6 N, f1 s# H0 `9 t0 [
  
/ w" n) z: g2 p9 X2 Y( u3 S# }   R=[r(k);dr(k);g(k);dg(k)];' o8 s. K+ \+ J! c9 x4 e
   R1=[r1(k);dr1(k);g1(k);dg1(k)];
4 I  N3 N% ~. K$ p   6 S  ?' J0 e5 U9 c% y
   E=R-x;
4 \& M7 X" ^5 b! o; s   e(k)=E(1);
% N6 \8 c1 |3 b  {' p! h   de(k)=E(2);1 b: c9 ]- S, y1 D0 E
   
: Y" z* Z" Z6 \2 ^2 E+ l" G   s(k)=Ce*E;% b  x, |' n9 {. p6 u0 r, j
   
% U7 u& l/ N9 U' \   X1=abs(e(k))+abs(de(k));3 n$ }0 C+ b1 M% u+ L* _( A
   
2 l- C4 [2 H& N3 o; U1 bM=3;   
  y2 ^$ L* i# i& ]if M==1             %EXP reaching law* j9 T, ]! G4 Y* I# l
   ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);9 y7 t. U" |8 @. I# d9 F
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));& \2 `7 @+ ^: o* {% B+ o- K
elseif M==2         %Variable rate reachine law2 x4 L8 r  O. X& X- ^
   ds(k)=-eq*ts*X1*sign(s(k));
! q) M  E$ |) M6 r0 X' a   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
/ d% n3 Q' n. }; X$ I+ i: f8 Velseif M==3         %Coposite reaching law
1 b: O; _/ P6 o" r0 X   k0=0.60;
+ _6 `2 l, D( Z: T+ \1 u7 u9 h% E7 |" u   if X1>k0          %EXP reachine law
8 H. \, e( o; |    ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);' p+ R3 x1 s. y9 S$ L
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));  
; I4 v: u1 e4 w, Y5 d8 _0 T elseif X1<=k0     %Variable rate reachine law
+ \3 J2 K6 L6 [& _   ds(k)=-eq*ts*X1*sign(s(k));
& l4 r" b% T) j" h   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));4 e- G# Q# d! Z! S: @; N, O
   end! |8 v8 ]" S6 Y( D0 r0 X3 b
end
; U+ {" R& Q. p0 O5 L7 F* ^: yif u(k)>=10
" R3 z: A* f$ F. K8 v4 A   u(k)=10;
& U4 A9 Y- M; q- ?# d0 S$ g7 iend' m: |, O  d: G4 Y# p" b5 z0 w3 e
if u(k)<=-105 \, f2 n. G. D5 a: s8 j
   u(k)=-10;
3 G3 I& f5 }) I; X6 send
( a; k# B; I$ Qx=A*x+B*u(k);) y' y1 o; o% s$ ?+ b: s0 [! c0 q/ O
y(k)=x(1);& [/ A( t  O. t, i* J+ X, n9 Z4 }" |
%Update Parameters$ b3 ^" ]  ?- q% Y2 u
r_2=r_1;9 l) j& h3 v+ u
r_1=r(k);
5 d3 X& T- ^% b- Q% C. Fend; g0 l( }* V' C/ m# W
figure(1)* G7 V8 F/ x) R" T( p/ o8 ~6 |
plot(time,r,'r',time,y,'b');
5 D% {) c' Y2 ?+ z+ T6 s' t# Yxlabel('Time(second)');ylabel('Position tracking');; q2 p4 `1 I$ H& y/ ^" O" `& Y2 U. i" d
figure(2)2 v! E2 f: N% B: L
plot(time,s,'r');
  q) b+ _1 E/ k) q$ e' cxlabel('Time(second)');ylabel('Switch function s');
; m- W- x1 \" C3 [( qfigure(3)
. w$ u/ U7 r0 V& J) D( Yplot(e,de,'r',e,-c*e,'b');
6 L3 H# Q) `7 _5 C9 s4 C4 @* q3 _axis([0,0.001,-0.01,0]);
* i# N; N3 O' c/ qxlabel('e');ylabel('de');9 J+ b4 W# I4 [2 T( A
figure(4)4 K. d2 b& A/ y9 M1 j; E
plot(time,u,'r');
- I! q  R% P! Z# j! q+ Fxlabel('Time(second)');ylabel('u');3 `/ N0 ?9 ^/ S% t' f
  n; N' g0 j" F+ I. R2 {1 F
运行后系统提示:
9 c# b) |8 w* Z0 M/ G; g" B6 i* W" ], F0 z6 N' F0 s& Y+ E
??? Error using ==> inv
, W0 P1 f" r" nMatrix must be square.
) Z- \& [! o# j0 x; Z/ _7 Q. i* i) p  PError in ==> matlab02 at 56% S" m4 \& `3 N
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
" c* z  E* H) T  U0 d* H* M4 C1 }( s
; _$ r2 l, B" G5 F: U(错误行已用红色标出)& W. @1 m4 t- x7 @1 R  m. [; s
: `! H# N& N6 N" I: c0 ~! ^! p, k) U5 {
麻烦大家帮我看一下给怎么改,谢谢了!!, E+ O  z6 F4 a5 D, H

作者: alair006    时间: 2012-2-7 17:02
囧了,下了无数不知道用哪个有用1340929989866650
作者: mindset    时间: 2013-6-2 16:06
路过,不会,帮顶!!!!
作者: 天十    时间: 2013-6-2 17:59
Matrix must be square 这句话是说你的某个矩阵必须是方阵啊
( `5 \2 A; ]; n其中某个矩阵不是方阵才出现这样的错误的
作者: laprovence    时间: 2013-6-2 21:17
从你写的程序来看,Ce是一个1*4的矩阵,而B求出来则是一个4*2的矩阵,Ce*B应该是一个1*2的矩阵,是不可能求逆矩阵的,只有方阵行数列数相同才能求逆。
作者: 云月星生    时间: 2013-8-6 14:50
新手,来看看




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