数学建模社区-数学中国

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

作者: deven1985    时间: 2011-8-31 11:23
标题: 帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑
3 r- {7 `( n1 y! v" o% ^
$ w4 K( M" _- M. {9 U( ]今天编了一段程序,如下:( ~# P  t4 ~+ B4 @' `! p: h) C
clear all;
8 A3 n( \2 i) o/ t% q( ?. [  dclose all;( _1 s# T# e2 W2 F; A
a=59.36;b=7.42;m=2374.46;n=296.92;
  I! q8 N$ [/ O. G/ V5 mts=0.001;/ V* I0 g7 u; @9 a8 n
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];  M- e& T7 Z/ Y) X8 I% H1 y
B1=[0,0;0,0;m,-n;n,-m];
* p; D  t2 y! |( y7 EC1=[0,1,0,0];! q) b  |# ~7 F0 v% K
D1=[0,0];
4 v% U2 _1 ~0 `" i# B3 [, @$ h[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');* k4 {( D8 y- w
x=[0;0;0;0];
' ?* @6 K6 x: ^8 L4 dr_1=0;r_2=0;g_1=0;g_2=0;
9 x8 ?2 r/ }7 p. U/ Q) Y" dc=5.0;
; u, o) ?" ?3 W9 T1 P, _! \- r+ Feq=5;
! @6 a& D; d$ |& @& B1 Pq=30;
4 y5 b; V4 K  ]( C( wCe=[c,1,1,1];. `  f/ K; V; f! q. E9 y
for k=1:1:20000 \( L4 ~& n. i
time(k)=k*ts;
8 x" e! q; L3 K/ _, u   r(k)=1.0;
# z9 S! a) F7 g! _+ X, V   g(k)=1.0;
$ r; s- n# x+ d   
' e* H2 {( l, P! ], Y   %Using Waitui method   2 @/ ]" y' n0 G( ~+ h* e8 l
   dr(k)=(r(k)-r_1)/ts;0 Y/ r! H, I+ K& @
   dg(k)=(g(k)-g_1)/ts;
) D% O: A) m, ]7 F+ C" o" B   dr_1=(r_1-r_2)/ts;5 q) K1 ]" T+ u# R5 c' [! C8 ]8 x6 T
   dg_1=(g_1-g_2)/ts;
( @& ^( Z$ F; a   r1(k)=2*r(k)-r_1;2 ~& p, T3 O7 Y6 g; C
   g1(k)=2*g(k)-g_1;
. X5 U! b% g8 y/ D; b   dr1(k)=2*dr(k)-dr_1;
" E5 Z6 f8 U9 a% |) m5 E2 N- z   dg1(k)=2*dg(k)-dg_1;
% s* R4 [; [- F9 A  7 f9 C7 p& b# Z! g: s) `
   R=[r(k);dr(k);g(k);dg(k)];' y1 n# z- i2 H4 W2 d( z$ w
   R1=[r1(k);dr1(k);g1(k);dg1(k)];
" W" F& s( z. a   
. V, S% l/ }6 Y3 T3 ]( U& Q   E=R-x;% E% Q% r: W4 h! i* M4 A( h
   e(k)=E(1);
" O* X0 S: a4 T   de(k)=E(2);( R! P: }2 U/ v, G. ^
   ' }8 ^4 C  F" D! w6 A
   s(k)=Ce*E;
% x2 G1 `8 g6 d( A% K   
- F, D2 s; @; n   X1=abs(e(k))+abs(de(k));
% x- {, R* g) s0 A' a! V* D+ P# K   , |# u0 k6 P2 A! A2 x; _4 L: E6 r
M=3;   - d( v: Y0 w$ V# \$ a3 p
if M==1             %EXP reaching law
6 x+ R; H' Q8 S# q" _   ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);  c" _/ l& r( ~' U# H' l' H
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
- J; `; p; c  `elseif M==2         %Variable rate reachine law
; K+ o" a% f5 k! ^& e( b3 N, l   ds(k)=-eq*ts*X1*sign(s(k));
4 z6 z* O/ \2 b/ E0 q+ Y- H   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
8 w6 l& J. \) j  gelseif M==3         %Coposite reaching law$ i4 C" U2 e. a9 v) P) T8 f+ z
   k0=0.60;5 R( f7 s3 h+ Q& W0 e2 F
   if X1>k0          %EXP reachine law
, |& k1 c7 k6 t  u6 R& q6 j    ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);3 Q7 [6 Q1 o( L2 l5 |) h' F5 r
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));  2 D! y2 P) q, ~+ |$ F
elseif X1<=k0     %Variable rate reachine law
3 A* j& R. q+ G( _* J5 L% i   ds(k)=-eq*ts*X1*sign(s(k));
0 z) H! p0 h! g2 B% U0 e2 n   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));* _+ `) P9 t( {  `5 }" Y0 _, ?
   end
% j. W' T9 C- p* b7 h1 h8 q: ^/ u, eend
/ ~" J( V# N( K: r; O  xif u(k)>=10
' W, G# i. ~3 [2 L) E  b6 S9 `   u(k)=10;
8 U8 }" M* z; I* w) X! H* g. R2 aend( o  }4 Y' n6 \7 T7 `! a
if u(k)<=-10( W6 f& j3 f; v4 A8 f
   u(k)=-10;. t* Y& w8 u* L0 y
end6 d% N8 \( S; H9 z) i) ?$ k
x=A*x+B*u(k);. U" l& v0 y9 X- A7 y2 g) l: t
y(k)=x(1);6 W; k) J  |4 ]8 t- L4 ~$ a+ Z
%Update Parameters, W( t" |4 ]8 }* r3 O$ A- a0 w& g
r_2=r_1;
. o% Q( w+ C4 v! a* \% C+ X* xr_1=r(k);
, c: F5 x' d+ Y5 Q5 y4 y6 @4 D1 ]( Bend
4 n7 M1 g/ D) g0 r! W' y7 k. `figure(1)' ?& s: _0 n0 U
plot(time,r,'r',time,y,'b');
1 i3 Y; T1 ^% Ixlabel('Time(second)');ylabel('Position tracking');& F% |4 f5 o8 m# v
figure(2)) M  N! _( o* D
plot(time,s,'r');# K& d6 W) `" m. Z8 m( b
xlabel('Time(second)');ylabel('Switch function s');  J6 P7 m" N% T# M$ f  I
figure(3)- O% k* r: Z6 M& d
plot(e,de,'r',e,-c*e,'b');% y* V# d3 B: `8 W6 D
axis([0,0.001,-0.01,0]);
, p0 e% |+ l' k  }# G3 K0 U8 ~xlabel('e');ylabel('de');
) c- w  b0 ~: n1 ~figure(4)% C5 v4 A; q& ]  `2 o
plot(time,u,'r');! I7 S$ y% k) M4 D
xlabel('Time(second)');ylabel('u');" L3 A" u3 f4 X7 O$ Y3 {
8 J* I3 g" D) r$ D
运行后系统提示:2 h7 k: u. N; P2 Q1 I. f

, Z. i3 p" H2 [??? Error using ==> inv
& N1 w$ j0 D: e2 v2 F7 A/ e* p3 kMatrix must be square.
" ?/ k- O* H; rError in ==> matlab02 at 56, Z( s1 A2 B" }7 a
    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));! O/ s- f$ T9 t6 M* s& a4 O( Z0 x
7 c, S* L( x1 L# U  L! f
(错误行已用红色标出)
$ D' e: y$ H8 ?1 ^
8 x$ \7 P. n: ~麻烦大家帮我看一下给怎么改,谢谢了!!; x0 V3 A6 q  Y$ F

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