数学建模社区-数学中国

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

作者: deven1985    时间: 2011-8-31 11:23
标题: 帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑 4 T3 o- b/ X! Y4 j/ `

8 P  z5 m$ g8 r& Z今天编了一段程序,如下:1 b- k; Y) W2 t5 N
clear all;
9 p1 o9 Y/ _% }, t4 N9 hclose all;$ G* [" b; G9 I. {2 Y& y
a=59.36;b=7.42;m=2374.46;n=296.92;
8 A/ W- |" {, f% p$ Kts=0.001;
" y; ]/ x3 ~% Q9 e# yA1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];2 O' W9 C* C  p% B
B1=[0,0;0,0;m,-n;n,-m];6 M' j0 W2 h+ ^& j' \
C1=[0,1,0,0];  M/ T( \. }0 F) W/ p- [# s
D1=[0,0];4 x3 ^% `' ~' n
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');
! Y( N# E7 c+ M" A2 K, _x=[0;0;0;0];
( t! I3 \2 X$ r4 x+ X; br_1=0;r_2=0;g_1=0;g_2=0;
! [# Y, U9 k- @c=5.0;5 J4 S* Z" }0 r, n" x
eq=5;
8 `0 q/ k8 M- Y# {; tq=30;% f" L. d3 Z! |2 |4 S
Ce=[c,1,1,1];
6 P% F1 q1 G/ P# J+ ffor k=1:1:2000* C  G- K3 g9 q
time(k)=k*ts;8 G+ E5 \0 r5 h; R& F. f, V
   r(k)=1.0;  I+ R& d2 ?( [+ l( o
   g(k)=1.0;
. Q% Z! o- u/ @. R$ ^) p0 ?   
6 Z- @2 d( [. n8 |% d) `& m. {   %Using Waitui method   # H. T( a  B& \/ j, Q/ c6 m
   dr(k)=(r(k)-r_1)/ts;: b- {. H5 Y" P1 Q
   dg(k)=(g(k)-g_1)/ts;4 T/ O; g3 {9 ~+ Y. ]* ?; b
   dr_1=(r_1-r_2)/ts;3 |0 t$ W% C# K7 S) F8 Y
   dg_1=(g_1-g_2)/ts;
( L+ K3 N2 H& v* j: Q   r1(k)=2*r(k)-r_1;5 h7 b9 V# W5 n1 m4 }) k9 Z
   g1(k)=2*g(k)-g_1;
+ C8 J0 w, o0 K4 S" j7 l   dr1(k)=2*dr(k)-dr_1;
# U4 i' S. B# u  E9 C# G& ~   dg1(k)=2*dg(k)-dg_1;
9 ?, \+ X  i2 i9 x' t2 ?2 Y  ( ]' N4 w( h) Z3 V' g/ B5 p: X
   R=[r(k);dr(k);g(k);dg(k)];
; d# u8 `6 V/ w1 ~0 H; ^   R1=[r1(k);dr1(k);g1(k);dg1(k)];5 U& J) f( l$ C9 F& b9 U/ o7 a
   
5 \# r# c( p# F( M   E=R-x;
& t8 H3 I$ P8 o, d& L   e(k)=E(1);
& W2 c& ~$ s1 ~3 K8 `. p4 h9 |   de(k)=E(2);
5 V! ]1 F" ?9 M- c1 l! X2 s2 _   
2 T1 w$ G' @& f  i5 n3 b   s(k)=Ce*E;* `  F5 ^! z# U7 _, H% X
   
1 H& m8 V+ u) u& C. `% i$ h4 u   X1=abs(e(k))+abs(de(k));
, `$ d& I/ ]' \5 M3 O9 Q4 `/ b   
& m9 v; r2 x# K$ p. ?/ }M=3;   / |( N3 |' u0 G) C8 j# m2 o6 V* }7 z
if M==1             %EXP reaching law
! Q/ y1 P. m) V6 \- A( r* `( a3 g   ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);. p0 @! {( \9 h2 `! [/ c
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));3 C9 V8 ]+ L( m7 l
elseif M==2         %Variable rate reachine law, t+ c6 m& q& N" H+ C: d
   ds(k)=-eq*ts*X1*sign(s(k));
+ p$ S/ M1 e  X2 N$ f   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
7 a) b9 U, Y* delseif M==3         %Coposite reaching law0 ]2 i* T  ^2 S8 O
   k0=0.60;- {7 S% T3 e. u) o# J7 u
   if X1>k0          %EXP reachine law
) T& }; b1 e& w- _" ^9 `+ o3 A    ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);' D5 o4 ]) P& S" d& i0 p. P% g
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));  + l; }$ @: `+ D  F/ F) E( ^
elseif X1<=k0     %Variable rate reachine law
3 I5 G) Q; d, s3 ~; b6 q   ds(k)=-eq*ts*X1*sign(s(k));' ]+ I0 N9 u2 d0 v) C0 D( `& N
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
: e1 G8 }- s  @; I. ]4 t6 ~8 f8 y   end6 O# a8 M" W% \3 P
end
& B+ O5 {* O/ }% @; ^$ `" fif u(k)>=10+ t5 a) C1 C" K/ A, s
   u(k)=10;
$ x) B; A" j' A. G, k) x  `0 Cend. Y7 f0 f, |# g0 @6 M; ]' z
if u(k)<=-10
1 Q! v5 Z+ K0 w8 w9 m5 E; p5 Y   u(k)=-10;
9 w, j3 k; V0 N* E5 @. [) [end
" p- a1 q7 h0 U, x, z% Q. Bx=A*x+B*u(k);' e; H: i! V8 }7 U. x- s" `
y(k)=x(1);$ ?) Y3 K8 {) I1 ~( A8 d3 i# o" X0 L
%Update Parameters
" e& h' W6 [! Y* ^7 I0 N3 P1 {" Or_2=r_1;! X/ L! P, M( p% \
r_1=r(k);0 k) u/ X6 w" ?0 o4 q' @3 V
end
9 _; T/ s& l, T, i4 ofigure(1)
7 u6 [1 |# d  s+ [4 N' i4 aplot(time,r,'r',time,y,'b');
+ {4 Z& F! p. r) [* _/ lxlabel('Time(second)');ylabel('Position tracking');5 {% K; p8 K: |# p
figure(2)
% w, r1 ^* D" K/ ~plot(time,s,'r');2 u% D9 U2 k) m* r! S
xlabel('Time(second)');ylabel('Switch function s');
7 C' U3 A; r! m$ F: C$ Xfigure(3)
/ o* l0 Z* J1 m; v" Lplot(e,de,'r',e,-c*e,'b');  a% l3 ?; q5 t# c3 w# X, n
axis([0,0.001,-0.01,0]);
* W; S# O4 w0 E0 ?& `: V' `xlabel('e');ylabel('de');
! H$ E$ d" A  X) afigure(4)- r) S6 Z$ N8 V
plot(time,u,'r');
8 B, k* e# a. Bxlabel('Time(second)');ylabel('u');
6 N, [2 z/ x& m3 x# v
- X, U/ r( [; s7 H4 L运行后系统提示:4 I" O/ K: J3 c1 l7 W7 A9 t

& X4 P4 H' F/ A7 y0 o$ ?, d. f??? Error using ==> inv
4 v; Z4 A' Q0 N* M' E" ]5 D  G0 [( yMatrix must be square.8 ~9 `; B& D& u" w% ]
Error in ==> matlab02 at 56
2 l( x4 z0 }4 e! O, Z    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));' U: h. \- a! w# {" y* N) u

# E8 E( J7 D8 r8 W: t- |(错误行已用红色标出)
" P$ g) A3 s$ X/ p! I- U
9 B3 F: t' H( d" K! q麻烦大家帮我看一下给怎么改,谢谢了!!) ]: i; ~0 o5 h" S. e$ ^0 C$ ?  d

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