数学建模社区-数学中国
标题:
帮忙看下程序的错误怎么改
[打印本页]
作者:
deven1985
时间:
2011-8-31 11:23
标题:
帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑
6 {9 N1 w& m. h2 a. h6 N# b
& u3 X6 T9 w: f3 d
今天编了一段程序,如下:
* ?9 @6 D( k$ X: X
clear all;
* m. m ?7 n) H b% q
close all;
( t3 o! M; q* t& q7 t
a=59.36;b=7.42;m=2374.46;n=296.92;
3 C% G- ^6 z+ x$ s( ]& k3 S
ts=0.001;
* O( `4 D. |2 R s
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];
! j0 W: e0 p0 W" [8 z/ d
B1=[0,0;0,0;m,-n;n,-m];
9 C" E- j5 t1 G/ O0 m* s$ a' @2 e
C1=[0,1,0,0];
1 e7 c2 u* H; \5 n. h1 W" `& l E( x
D1=[0,0];
8 |' g" t% f# b8 g, a
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');
- w, K6 G9 ~2 }1 |
x=[0;0;0;0];
1 D) L" m& p& a* G; w* S* u( h
r_1=0;r_2=0;g_1=0;g_2=0;
0 P8 G) `9 e4 H
c=5.0;
+ Z6 f& n" ~( J! P C7 I- _* E/ X5 K
eq=5;
- C! k" U- d& e0 B% Q5 R* S" h
q=30;
) k: }. t" [! e, j
Ce=[c,1,1,1];
- J# T" V5 U( C! s+ f
for k=1:1:2000
% K8 g9 d$ w+ z5 I" T) x
time(k)=k*ts;
5 b* V; I7 L2 w3 R9 T$ |" y2 Q
r(k)=1.0;
4 R+ n7 {, g( x: V
g(k)=1.0;
& I1 M6 t' T& q2 c1 O/ J+ T
0 M# {& ]( M" g& H3 k A* m7 f+ p
%Using Waitui method
. ?7 b( _# L) B. {; T0 x, o) J
dr(k)=(r(k)-r_1)/ts;
) \. [0 h7 L# h
dg(k)=(g(k)-g_1)/ts;
! q+ N9 x2 G; O* l5 r$ g$ m6 R: ~3 [
dr_1=(r_1-r_2)/ts;
" }% Z5 K7 _! K& _4 M; r5 R
dg_1=(g_1-g_2)/ts;
! b& s# d8 V8 [: V8 ~ R- {! l! a
r1(k)=2*r(k)-r_1;
9 d9 a7 |( J; X8 L9 T( v1 P
g1(k)=2*g(k)-g_1;
, b9 x2 x3 z5 A6 H
dr1(k)=2*dr(k)-dr_1;
9 R6 I$ `8 \5 C
dg1(k)=2*dg(k)-dg_1;
% [! [9 u% r4 l1 i( f' a5 s
5 R; S4 F& `& x$ V# a P' u- o8 F
R=[r(k);dr(k);g(k);dg(k)];
+ ]' O1 S$ ]: K/ E4 ]
R1=[r1(k);dr1(k);g1(k);dg1(k)];
% t1 t8 s% C8 s$ ~- p
# J D6 O/ s: w& q7 v* f4 i! I
E=R-x;
: q) H" `$ e2 ?' U7 C" w8 F
e(k)=E(1);
$ ?% F6 W* I5 d9 L
de(k)=E(2);
; ~3 H' o1 A* m* {/ G/ u& q: R
& B$ Y: \1 v+ \, D$ m/ T5 H, ^% V
s(k)=Ce*E;
. u% \% R, W+ W7 \
; f& G. X9 q3 r
X1=abs(e(k))+abs(de(k));
8 Q* g5 y/ x, Q; j. r) ^! a
* L0 g+ b$ e, E# ]; q3 T2 J7 d
M=3;
$ S$ _* F* r* \; W m p6 r
if M==1 %EXP reaching law
: }0 |! o% p5 \. Z3 \( I
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
+ R/ k- |5 z3 [& N1 Q2 K3 |
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
' t# M5 W* n: z7 Q" ^8 y
elseif M==2 %Variable rate reachine law
0 C7 S8 z! _' A! d9 F* R1 M
ds(k)=-eq*ts*X1*sign(s(k));
$ y- @5 D. j: {1 Z% b" R
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
' V% ~4 g1 Z' i; x- c9 E" Y1 [5 _3 H- w! k
elseif M==3 %Coposite reaching law
* x8 L+ ~* m. |9 n" U$ X. o9 M/ u
k0=0.60;
7 v S4 D. b* h
if X1>k0 %EXP reachine law
. I: F( r4 |3 Z2 C$ I
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
; b6 } M5 h3 R1 x3 h" n% I
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
, c# J# @$ R7 B% s6 `
elseif X1<=k0 %Variable rate reachine law
) o1 u. T# @- v& y) q
ds(k)=-eq*ts*X1*sign(s(k));
" E: U: O# | [7 n2 t, h/ _6 c
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
, f9 R3 O; {1 s4 A- {6 |3 S( W8 d
end
" v3 t$ {! M: H" i
end
9 \) X- |/ l& j% t; e, W
if u(k)>=10
) V. [" k0 s. P, H9 W& b
u(k)=10;
$ i/ B0 l( W6 K8 Y2 M ^
end
& {. _3 w$ b+ ^4 @& `
if u(k)<=-10
7 ^8 S7 b1 z$ a' O! x Z0 P
u(k)=-10;
8 k( `0 E' J* k$ E
end
" Y% t, M) I3 U6 n
x=A*x+B*u(k);
3 ^* U% y \8 L5 z
y(k)=x(1);
- L5 v# C1 e* O4 C3 O- k3 L
%Update Parameters
$ Z, `) |8 o! Q( d$ F+ m& H P
r_2=r_1;
/ f" U& W; v% F; k: G
r_1=r(k);
4 m8 m/ N/ K8 ]: P3 Q Y
end
! w- P2 q7 q: s" S5 S# O
figure(1)
$ O+ g+ b8 w* r8 }2 q/ @
plot(time,r,'r',time,y,'b');
1 i3 X1 k9 A& e. x+ Q( I% E
xlabel('Time(second)');ylabel('Position tracking');
$ Z( e0 L3 z4 B j9 E
figure(2)
2 t- n- a) e& V3 R$ O
plot(time,s,'r');
; C3 {7 O# a0 A- ]
xlabel('Time(second)');ylabel('Switch function s');
, c$ v/ G+ b0 ?2 i; S
figure(3)
- A0 F0 X4 m+ y
plot(e,de,'r',e,-c*e,'b');
& Q, X3 A: B& b2 N
axis([0,0.001,-0.01,0]);
' e, B' I. W: w
xlabel('e');ylabel('de');
2 A8 v# ^$ H0 U% s& \$ _
figure(4)
. L, T8 a- W0 y) \6 B. m0 b0 b
plot(time,u,'r');
2 r8 C' g) x1 r1 H) P2 B; Z+ S+ Y$ \9 ^
xlabel('Time(second)');ylabel('u');
2 o+ [6 K% c' J+ L2 X: ?- W1 [: E
/ [* A3 p6 `# ?1 p8 l7 `! k
运行后系统提示:
( t& b0 f3 r: n: E! m+ r0 D7 Q$ [! ~
6 k" h: b6 w- Q- O" w3 W6 `6 @8 k
??? Error using ==> inv
: R9 c! G' Y9 @1 {0 e5 v1 P
Matrix must be square.
) P- H& ?" Z3 [0 p
Error in ==> matlab02 at 56
, f5 k8 i4 J% J( [6 d7 }
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
' M6 l5 H* W2 W K6 [9 q
O$ k2 J8 A; d+ z: O
(错误行已用红色标出)
8 {; f' V! ^$ j; Q9 q9 v
7 v5 p3 w( W, a; |
麻烦大家帮我看一下给怎么改,谢谢了!!
( O! q1 U# l4 ~5 ]7 k
作者:
alair006
时间:
2012-2-7 17:02
囧了,下了无数不知道用哪个有用
1340929989866650
作者:
mindset
时间:
2013-6-2 16:06
路过,不会,帮顶!!!!
作者:
天十
时间:
2013-6-2 17:59
Matrix must be square 这句话是说你的某个矩阵必须是方阵啊
" k$ @6 H: H5 I8 j' U2 I* t; e
其中某个矩阵不是方阵才出现这样的错误的
作者:
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