数学建模社区-数学中国
标题:
帮忙看下程序的错误怎么改
[打印本页]
作者:
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 h
close 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$ K
ts=0.001;
" y; ]/ x3 ~% Q9 e# y
A1=[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; b
r_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# {; t
q=30;
% f" L. d3 Z! |2 |4 S
Ce=[c,1,1,1];
6 P% F1 q1 G/ P# J+ f
for 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* d
elseif M==3 %Coposite reaching law
0 ]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
end
6 O# a8 M" W% \3 P
end
& B+ O5 {* O/ }% @; ^$ `" f
if u(k)>=10
+ t5 a) C1 C" K/ A, s
u(k)=10;
$ x) B; A" j' A. G, k) x `0 C
end
. 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. B
x=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 {" O
r_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 o
figure(1)
7 u6 [1 |# d s+ [4 N' i4 a
plot(time,r,'r',time,y,'b');
+ {4 Z& F! p. r) [* _/ l
xlabel('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$ X
figure(3)
/ o* l0 Z* J1 m; v" L
plot(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) a
figure(4)
- r) S6 Z$ N8 V
plot(time,u,'r');
8 B, k* e# a. B
xlabel('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 [( y
Matrix 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