数学建模社区-数学中国

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

作者: deven1985    时间: 2011-8-31 11:23
标题: 帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑
- y3 q) ^  c$ ]8 d6 Q$ b4 k9 P* Y
+ k, i/ H8 z3 Z' y+ \& L0 S1 Y! [& A今天编了一段程序,如下:: f" r4 ^/ z3 l9 G
clear all;/ \' g: \2 g% h* |$ z
close all;
9 R/ B2 L2 }( A. p/ @a=59.36;b=7.42;m=2374.46;n=296.92;8 Z' F* ~1 d, ~% C! T! k, H; K
ts=0.001;+ d6 ^2 M, ]! d  W, O% `+ {! q- j$ l/ k
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];) a' j) b: Y# N) M. j/ x
B1=[0,0;0,0;m,-n;n,-m];& Q# X) g+ C$ O; B5 i
C1=[0,1,0,0];+ a" o/ L9 f, U1 @* }
D1=[0,0];6 Z( n  z4 F: D
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');" {* c6 y9 A) U) t! }5 @; z
x=[0;0;0;0];
" V. w  y4 |( V; Q& k) G0 l1 d: Jr_1=0;r_2=0;g_1=0;g_2=0;
6 L8 q4 b/ Z2 Y* R" u+ \) G1 L* _9 uc=5.0;3 m0 y% g8 p2 v- O
eq=5;
& |, A  z: Z$ p3 @: x% Aq=30;6 G  b. B: F  P
Ce=[c,1,1,1];* {$ _  f+ O# L
for k=1:1:2000& [2 Z6 w+ P$ [* b2 _6 a8 s
time(k)=k*ts;
* E: k2 u, A( q/ C% @   r(k)=1.0;+ V, O4 B; U8 J) u) Z
   g(k)=1.0;1 k! P+ @  z  g! w& a" J
   ' R* i+ K+ g, M3 j/ F% T
   %Using Waitui method   , E8 Q7 N% Y2 J
   dr(k)=(r(k)-r_1)/ts;
: J( B( W% e! c8 Y   dg(k)=(g(k)-g_1)/ts;7 D9 S; ]1 {' e1 e7 k5 ]8 G( C; B. G
   dr_1=(r_1-r_2)/ts;; J! @! k! f; |* w
   dg_1=(g_1-g_2)/ts;
. L/ _! \5 l+ J; G- }% P. @   r1(k)=2*r(k)-r_1;6 y3 Q% q0 H: V# u  C, E
   g1(k)=2*g(k)-g_1;% @# C# b$ w9 X+ x7 K% d
   dr1(k)=2*dr(k)-dr_1;- g5 |$ q6 H: [4 R6 k/ Y
   dg1(k)=2*dg(k)-dg_1;
0 r7 `1 B" C. Y; a  ' y+ l, a: l5 W, G
   R=[r(k);dr(k);g(k);dg(k)];" C1 L! E. [: q, u; W$ N
   R1=[r1(k);dr1(k);g1(k);dg1(k)];
2 g5 C' K6 X; p' ^% M3 _1 a   . k7 }! g- B$ z! T- j) K
   E=R-x;- g# r% d- o" Y) V! G3 }% P
   e(k)=E(1);
% H/ D5 `$ c5 @   de(k)=E(2);# u) k2 f- j3 f- w
   
# f7 d& A3 P+ F4 S   s(k)=Ce*E;. i4 O. D" s( G
   
  ~# k9 f# `+ ~! u   X1=abs(e(k))+abs(de(k));
" D, @  ?# r+ S   3 ~" h9 }3 W4 ^7 ^/ T# |% X7 |( Z4 l+ H
M=3;   
; i  E, F( L) @- Qif M==1             %EXP reaching law
' `0 R. V$ E( Z( n: s   ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);3 r1 {  e8 `: F7 C5 N* ^8 B! t  k
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
- J0 o$ ~( P( A" A9 [" o8 nelseif M==2         %Variable rate reachine law
+ L) t  Z/ ]4 K1 R' I   ds(k)=-eq*ts*X1*sign(s(k));
: d) ^0 @1 @8 O/ v, x# A5 b9 }0 Q   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
1 X7 S; Z& i; k$ c8 ~# X+ Y" Welseif M==3         %Coposite reaching law- a% c, L9 E7 P" G
   k0=0.60;
" ?( {! }" z% m, F, g) M   if X1>k0          %EXP reachine law
, N% R$ s& ^7 y' C$ `* M& U    ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
) x% `3 @5 y$ `% D0 t) s    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));  8 [3 o9 C$ g! v" A9 Q4 b9 I
elseif X1<=k0     %Variable rate reachine law
1 f# A0 c5 j) J  ]! n& r8 D   ds(k)=-eq*ts*X1*sign(s(k));: U: L5 i4 {+ T0 t- C2 a9 v3 E
   u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));& [7 \3 r$ S6 k! d( @3 o1 X
   end8 J! v' d$ `" e
end2 s4 p! p7 D# ?7 M' f
if u(k)>=10  r( f$ J2 E2 T  J) D
   u(k)=10;
. ?/ N/ x# Z) T# dend# `, D7 d2 A- R; [* v
if u(k)<=-10
; @) G) x+ F% |2 a% v3 v   u(k)=-10;
2 k9 O" T4 a1 b' Wend
: Q: N: a) g3 k" bx=A*x+B*u(k);+ J5 {- G" ?  N, T. m
y(k)=x(1);
* r- t9 f6 G1 H) R, j/ A! |%Update Parameters
+ z3 I* T* L' O! \r_2=r_1;
; W$ I  s  b* R  ir_1=r(k);" b- |9 G; C0 k6 f3 q; d
end4 t' E6 F/ C+ S! ?0 l6 A0 H, E
figure(1)
1 z1 t0 D- ]! H! Z/ xplot(time,r,'r',time,y,'b');/ y1 g# }, s+ f1 \- \; R7 b) P
xlabel('Time(second)');ylabel('Position tracking');
* b' y. p; n6 {% }; a1 V0 t- K. v% _figure(2)
& ?# D/ H+ f) {plot(time,s,'r');# S  t8 j: r) V/ P" ]4 z5 P
xlabel('Time(second)');ylabel('Switch function s');
1 J  h! F$ _2 R& p$ f3 k: Jfigure(3)1 n8 N' i! j' s$ s: n% d
plot(e,de,'r',e,-c*e,'b');+ i/ @5 g) h* N+ C  b
axis([0,0.001,-0.01,0]);, _5 f8 J" l5 V0 h  i( X
xlabel('e');ylabel('de');& p2 s9 x8 |) j7 ^; Y
figure(4)
* F0 F3 t6 u( c/ d/ e1 G  _6 Fplot(time,u,'r');
$ J8 D% g& l! B# i' ], Xxlabel('Time(second)');ylabel('u');- b. v( ]2 l1 K  X
& R( x2 N, M( ]6 F) C7 v
运行后系统提示:1 A/ `$ G8 `! `% {# ?
3 K- s0 m: c- {2 i, X# M2 m
??? Error using ==> inv
7 R# x" C0 j0 q; P9 B# L; wMatrix must be square.9 Q! w( g1 [' F( y+ C( e; i  A7 E$ Q
Error in ==> matlab02 at 56
. d, l  ^7 }# T7 ^$ @- \: h    u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));- r' J  a( J/ s  x$ c+ ?% {

% V" i2 m2 O& p7 O2 }# T8 i(错误行已用红色标出)
: D6 F/ R* i9 n1 R7 _* D
2 w8 I" K, c& {. ]麻烦大家帮我看一下给怎么改,谢谢了!!
) H+ e' b, O7 K  `1 U
作者: alair006    时间: 2012-2-7 17:02
囧了,下了无数不知道用哪个有用1340929989866650
作者: mindset    时间: 2013-6-2 16:06
路过,不会,帮顶!!!!
作者: 天十    时间: 2013-6-2 17:59
Matrix must be square 这句话是说你的某个矩阵必须是方阵啊
5 B: \0 V6 `8 c* A其中某个矩阵不是方阵才出现这样的错误的
作者: 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