数学建模社区-数学中国
标题:
帮忙看下程序的错误怎么改
[打印本页]
作者:
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( ?. [ d
close 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 m
ts=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 E
C1=[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 d
r_1=0;r_2=0;g_1=0;g_2=0;
9 x8 ?2 r/ }7 p. U/ Q) Y" d
c=5.0;
; u, o) ?" ?3 W9 T1 P, _! \- r+ F
eq=5;
! @6 a& D; d$ |& @& B1 P
q=30;
4 y5 b; V4 K ]( C( w
Ce=[c,1,1,1];
. ` f/ K; V; f! q. E9 y
for k=1:1:2000
0 \( 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 g
elseif 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, e
end
/ ~" J( V# N( K: r; O x
if 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 a
end
( 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
end
6 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* x
r_1=r(k);
, c: F5 x' d+ Y5 Q5 y4 y6 @4 D1 ]( B
end
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 ^% I
xlabel('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 k
Matrix must be square.
" ?/ k- O* H; r
Error 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