数学建模社区-数学中国
标题:
帮忙看下程序的错误怎么改
[打印本页]
作者:
deven1985
时间:
2011-8-31 11:23
标题:
帮忙看下程序的错误怎么改
本帖最后由 deven1985 于 2011-8-31 11:25 编辑
' e7 ?4 R5 r" U' I. x; x8 X$ x* @
" h, n3 Y- R L$ Q+ j
今天编了一段程序,如下:
+ s a1 M" ~9 ^3 N p+ _
clear all;
8 \, a% C; h' V! K
close all;
& X' ~/ J2 s# t9 e; I& X' F$ |6 M
a=59.36;b=7.42;m=2374.46;n=296.92;
: Z$ Z- @+ l7 t( D% K" C
ts=0.001;
; ~9 U8 O9 t: M9 Z" Q# @
A1=[0,0,1,0;0,0,0,1;a,-b,0,0;b,-a,0,0];
1 t/ S* M5 M/ X% J6 V
B1=[0,0;0,0;m,-n;n,-m];
: H6 a+ {5 D+ h1 ^$ c
C1=[0,1,0,0];
1 S& }+ o( W% C
D1=[0,0];
5 b* c+ M0 x. V* t* P
[A,B,C,D]=c2dm(A1,B1,C1,D1,ts,'z');
q8 }4 v+ d1 G; [; \+ f
x=[0;0;0;0];
6 E/ B& y! Z) T; s7 [
r_1=0;r_2=0;g_1=0;g_2=0;
. u/ e; }7 `5 R, L7 K7 A% S9 n$ ]: u
c=5.0;
! }9 B9 L/ H4 S7 ?
eq=5;
4 Z6 r S% n1 h
q=30;
" P: z3 e. x6 h: n
Ce=[c,1,1,1];
9 _0 Q- \& m) w X, V1 g
for k=1:1:2000
: C, s A* C7 m5 f
time(k)=k*ts;
; V: M3 o; A) I5 A7 ^$ l3 q# J
r(k)=1.0;
E- \+ l/ A/ w3 a5 w5 w) i
g(k)=1.0;
- q! a E; t' e0 r1 W
! N4 t! l* q+ X0 [9 W9 B
%Using Waitui method
1 V' k( C# [9 Q
dr(k)=(r(k)-r_1)/ts;
8 i; K5 n+ t/ E( e
dg(k)=(g(k)-g_1)/ts;
* ^9 u$ |7 H7 g; S
dr_1=(r_1-r_2)/ts;
0 U! ^% T* F% L+ n& _4 n* x9 F% d
dg_1=(g_1-g_2)/ts;
, y) x P) F$ {1 `
r1(k)=2*r(k)-r_1;
6 M: k$ @1 v8 X- e; r2 Q
g1(k)=2*g(k)-g_1;
9 f6 N5 c0 e7 w2 l
dr1(k)=2*dr(k)-dr_1;
* `7 j2 ^) n6 u$ _; H( v6 r) S
dg1(k)=2*dg(k)-dg_1;
: E6 N, f1 s# H0 `9 t0 [
/ w" n) z: g2 p9 X2 Y( u3 S# }
R=[r(k);dr(k);g(k);dg(k)];
' o8 s. K+ \+ J! c9 x4 e
R1=[r1(k);dr1(k);g1(k);dg1(k)];
4 I N3 N% ~. K$ p
6 S ?' J0 e5 U9 c% y
E=R-x;
4 \& M7 X" ^5 b! o; s
e(k)=E(1);
% N6 \8 c1 |3 b {' p! h
de(k)=E(2);
1 b: c9 ]- S, y1 D0 E
: Y" z* Z" Z6 \2 ^2 E+ l" G
s(k)=Ce*E;
% b x, |' n9 {. p6 u0 r, j
% U7 u& l/ N9 U' \
X1=abs(e(k))+abs(de(k));
3 n$ }0 C+ b1 M% u+ L* _( A
2 l- C4 [2 H& N3 o; U1 b
M=3;
y2 ^$ L* i# i& ]
if M==1 %EXP reaching law
* j9 T, ]! G4 Y* I# l
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
9 y7 t. U" |8 @. I# d9 F
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
& \2 `7 @+ ^: o* {% B+ o- K
elseif M==2 %Variable rate reachine law
2 x4 L8 r O. X& X- ^
ds(k)=-eq*ts*X1*sign(s(k));
! q) M E$ |) M6 r0 X' a
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
/ d% n3 Q' n. }; X$ I+ i: f8 V
elseif M==3 %Coposite reaching law
1 b: O; _/ P6 o" r0 X
k0=0.60;
+ _6 `2 l, D( Z: T+ \1 u7 u9 h% E7 |" u
if X1>k0 %EXP reachine law
8 H. \, e( o; |
ds(k)=-eq*ts*sign(s(k))-q*ts*s(k);
' p+ R3 x1 s. y9 S$ L
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
; I4 v: u1 e4 w, Y5 d8 _0 T
elseif X1<=k0 %Variable rate reachine law
+ \3 J2 K6 L6 [& _
ds(k)=-eq*ts*X1*sign(s(k));
& l4 r" b% T) j" h
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
4 e- G# Q# d! Z! S: @; N, O
end
! |8 v8 ]" S6 Y( D0 r0 X3 b
end
; U+ {" R& Q. p0 O5 L7 F* ^: y
if u(k)>=10
" R3 z: A* f$ F. K8 v4 A
u(k)=10;
& U4 A9 Y- M; q- ?# d0 S$ g7 i
end
' m: |, O d: G4 Y# p" b5 z0 w3 e
if u(k)<=-10
5 \, f2 n. G. D5 a: s8 j
u(k)=-10;
3 G3 I& f5 }) I; X6 s
end
( a; k# B; I$ Q
x=A*x+B*u(k);
) y' y1 o; o% s$ ?+ b: s0 [! c0 q/ O
y(k)=x(1);
& [/ A( t O. t, i* J+ X, n9 Z4 }" |
%Update Parameters
$ b3 ^" ] ?- q% Y2 u
r_2=r_1;
9 l) j& h3 v+ u
r_1=r(k);
5 d3 X& T- ^% b- Q% C. F
end
; g0 l( }* V' C/ m# W
figure(1)
* G7 V8 F/ x) R" T( p/ o8 ~6 |
plot(time,r,'r',time,y,'b');
5 D% {) c' Y2 ?+ z+ T6 s' t# Y
xlabel('Time(second)');ylabel('Position tracking');
; q2 p4 `1 I$ H& y/ ^" O" `& Y2 U. i" d
figure(2)
2 v! E2 f: N% B: L
plot(time,s,'r');
q) b+ _1 E/ k) q$ e' c
xlabel('Time(second)');ylabel('Switch function s');
; m- W- x1 \" C3 [( q
figure(3)
. w$ u/ U7 r0 V& J) D( Y
plot(e,de,'r',e,-c*e,'b');
6 L3 H# Q) `7 _5 C9 s4 C4 @* q3 _
axis([0,0.001,-0.01,0]);
* i# N; N3 O' c/ q
xlabel('e');ylabel('de');
9 J+ b4 W# I4 [2 T( A
figure(4)
4 K. d2 b& A/ y9 M1 j; E
plot(time,u,'r');
- I! q R% P! Z# j! q+ F
xlabel('Time(second)');ylabel('u');
3 `/ N0 ?9 ^/ S% t' f
n; N' g0 j" F+ I. R2 {1 F
运行后系统提示:
9 c# b) |8 w* Z0 M/ G; g
" B6 i* W" ], F0 z6 N' F0 s& Y+ E
??? Error using ==> inv
, W0 P1 f" r" n
Matrix must be square.
) Z- \& [! o# j0 x; Z/ _7 Q. i* i) p P
Error in ==> matlab02 at 56
% S" m4 \& `3 N
u(k)=inv(Ce*B)*(Ce*R1-Ce*A*x-s(k)-ds(k));
" c* z E* H) T U0 d* H* M4 C1 }( s
; _$ r2 l, B" G5 F: U
(错误行已用红色标出)
& W. @1 m4 t- x7 @1 R m. [; s
: `! H# N& N6 N" I: c0 ~! ^! p, k) U5 {
麻烦大家帮我看一下给怎么改,谢谢了!!
, E+ O z6 F4 a5 D, H
作者:
alair006
时间:
2012-2-7 17:02
囧了,下了无数不知道用哪个有用
1340929989866650
作者:
mindset
时间:
2013-6-2 16:06
路过,不会,帮顶!!!!
作者:
天十
时间:
2013-6-2 17:59
Matrix must be square 这句话是说你的某个矩阵必须是方阵啊
( `5 \2 A; ]; n
其中某个矩阵不是方阵才出现这样的错误的
作者:
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