数学建模社区-数学中国

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

作者: deven1985    时间: 2011-8-31 11:23
标题: 帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑 ! z* T4 t7 X, A+ ~$ Q

! o- B+ V5 w. T' n1 v( \; v! J7 V今天编了一段程序,如下:6 l. t. L$ E. o9 \9 o
clear all;
# Y* |% W1 m$ M, m' ?) ~6 Dclose all;1 ^1 `  k/ q: k2 j  G
a=59.36;b=7.42;m=2374.46;n=296.92;4 E0 w8 s3 w# ?& _) T! n8 q
ts=0.001;, S/ ]+ z1 e. }) u' ^
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];
$ Y( {, X/ \) v5 |B1=[0,0;0,0;m,-n;n,-m];. t3 h* t& F9 p. @# n4 V
C1=[0,1,0,0];. _7 i- ~* V* O/ P* m; k, S8 f
D1=[0,0];
3 ?. w+ C" c& {% B9 ~[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');
. [- Y6 l. T4 |" R! w" B5 Sx=[0;0;0;0];
- x% ^2 M; _: }. V$ f# }9 e) Er_1=0;r_2=0;g_1=0;g_2=0;
- L1 e% e, q8 j) tc=5.0;- Q; W+ ?, U! G! Q" Z! Y
eq=5;
; d/ q7 f4 {7 S* a' Q" O: ^q=30;9 Q$ K: x) S3 ?2 b) a* h
Ce=[c,1,1,1];) g) h) \) g1 g2 I; Q" y/ U9 o
for k=1:1:2000& [3 a; n) K3 I0 i( u
time(k)=k*ts;: y+ p5 V8 R; s9 W/ Q
   r(k)=1.0;# j, {7 H* l% @) g4 n& D/ G
   g(k)=1.0;! B: E+ X* F+ i; U! u
   
2 v3 Z4 |+ x3 U0 N0 |0 \' Q4 m   %Using Waitui method   2 Z$ q) l! m9 X3 G
   dr(k)=(r(k)-r_1)/ts;
; R+ m  i8 H- V7 i; p- p   dg(k)=(g(k)-g_1)/ts;# ~& L# Y, y* z' x1 y
   dr_1=(r_1-r_2)/ts;
' l4 K/ i7 ]. D/ L$ L; a! k   dg_1=(g_1-g_2)/ts;) M" L$ _9 ?; t% M/ v9 L6 z' I
   r1(k)=2*r(k)-r_1;( o* y! z& l8 P. u, `
   g1(k)=2*g(k)-g_1;
7 ?0 K5 w  S; u# |7 o* Q& [   dr1(k)=2*dr(k)-dr_1;- f8 d! X' Z: ~9 R
   dg1(k)=2*dg(k)-dg_1;+ R- I' K, N3 |+ ^( G& U
  
5 O& b7 S; d! I& O- k" O5 t   R=[r(k);dr(k);g(k);dg(k)];
) m1 S  `1 l7 [% m( [! W- b   R1=[r1(k);dr1(k);g1(k);dg1(k)];
9 X* n6 Z* {+ N   
& g) ^3 \' C) ~8 z$ v* p   E=R-x;' k: `$ Y; S5 z7 z: r' S
   e(k)=E(1);$ b5 t! o1 k5 U! H# h9 J
   de(k)=E(2);3 F2 A# [9 ?% e% _; ^: X
   * f% I5 r1 O: l) ~; [
   s(k)=Ce*E;4 B% l, l9 F( h
   
0 h: X: g& r& K, ^0 b   X1=abs(e(k))+abs(de(k));
  r. m9 T% a7 E% B( E" K2 g   
4 K: X! c; b; J6 T+ k  _6 X. VM=3;   
$ S1 q- \, k1 Y1 [5 r5 qif M==1             %EXP reaching law7 K# Q8 d- \. n$ p
   ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);! D' S( `( N* z' c" O# ]
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));' N) E$ I' t0 e4 F0 ^% M) k
elseif M==2         %Variable rate reachine law
/ F* Y) u" p+ r6 u) g* ~5 _1 D  h   ds(k)=-eq*ts*X1*sign(s(k));
# g1 ?8 O* u- Y* j- y   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));0 J( M/ B$ r" b
elseif M==3         %Coposite reaching law% k" ?- a% \0 N6 B  [) @
   k0=0.60;
2 n6 x/ m3 D3 r# J5 p0 Q   if X1>k0          %EXP reachine law. K6 f) C9 Z3 V; }  z0 ~
    ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);, ~$ B' X: Q+ R# G, I4 K6 @" ^  X
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));  
$ Z- G$ K: h5 H elseif X1<=k0     %Variable rate reachine law
' [5 g0 C6 J2 @- `6 ^   ds(k)=-eq*ts*X1*sign(s(k));
; ?  @  ?5 Y% H$ G   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));7 b( _9 u4 ~/ ^& |& L
   end
1 ^! b& a- l+ y* a( s+ Qend4 U" _' [" _) z* U5 h0 o/ Y' H) Y
if u(k)>=10+ b2 O" Q8 h( d) y
   u(k)=10;' L  o: d) r1 p0 D
end; z! n& M+ o8 N
if u(k)<=-10
5 m# ~  ?! Q# e! K' e   u(k)=-10;
6 n- e0 A4 j, ], ~end" G* u1 ?5 p* E) y. O& T! V: h
x=A*x+B*u(k);9 o/ `, V, o' \& o- q. U* ]
y(k)=x(1);% ~+ f+ y7 Q, ]: ?) {7 l  w& D; O
%Update Parameters
4 K2 h8 H2 L; ]: Br_2=r_1;5 z  @2 @" M/ I1 w% X" E
r_1=r(k);
! i, v1 _! x2 u5 f" Kend4 Y0 g- P) D# O! N& w7 b
figure(1)
! I* ]0 I0 h! |. N: D& A3 ^plot(time,r,'r',time,y,'b');
+ Y0 {1 a' \  S$ t5 `  o: M9 k3 pxlabel('Time(second)');ylabel('Position tracking');
/ t' f' w( ?6 |$ j- Q: mfigure(2)4 u. H( G3 I7 k/ y  @! t% }
plot(time,s,'r');
2 F) Y0 @. M! p0 h5 R* Q* Ixlabel('Time(second)');ylabel('Switch function s');
" m, f1 C* O2 [! `4 s3 q! ]figure(3)
$ S1 @. R: ^5 Z6 Vplot(e,de,'r',e,-c*e,'b');- W$ k4 h9 }8 M5 I" e, t% t
axis([0,0.001,-0.01,0]);1 s* a( L- v5 @: `4 ?! T0 z  k
xlabel('e');ylabel('de');
- Z$ [( d; s* M( F) bfigure(4)
8 \9 A0 w3 I# aplot(time,u,'r');
) q0 @( U7 j$ ^& e/ l& z$ y) C! Sxlabel('Time(second)');ylabel('u');7 j. e, o" `) T4 w6 K* l
# p; L& R% v! s0 p2 y) R
运行后系统提示:
/ @0 c* {9 f9 I1 Z3 t4 {# {
! \' ]# g& t+ J6 _6 K6 W1 G??? Error using ==> inv1 |6 U) H5 `" s  p0 O0 ]5 J8 B( _
Matrix must be square.
0 W; E" s$ N7 Y3 s  vError in ==> matlab02 at 568 p$ m* o, C. p/ V
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));+ h2 ^8 X' v0 Y" L3 S
3 Q$ Q1 `; A* V4 f7 Y
(错误行已用红色标出)7 O5 K& A4 S$ ?. @. D& O+ p
) q( a& g; K- z. k" v* `- Q
麻烦大家帮我看一下给怎么改,谢谢了!!7 @2 V+ @1 B! C# u4 f2 y/ }5 ]

作者: alair006    时间: 2012-2-7 17:02
囧了,下了无数不知道用哪个有用1340929989866650
作者: mindset    时间: 2013-6-2 16:06
路过,不会,帮顶!!!!
作者: 天十    时间: 2013-6-2 17:59
Matrix must be square 这句话是说你的某个矩阵必须是方阵啊1 h3 @! q- j5 Z' \: H- O$ T
其中某个矩阵不是方阵才出现这样的错误的
作者: 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