MATLAB程序中出现一下错误 5
:???InanassignmentA(I)=B,thenumberofelementsinBandImustbethesame.Errorin==>Untitled6a...
:??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Error in ==> Untitled6 at 11
s(k)=C*x;
部分代码如下:
clear all;
close all;
A=[-5,0,0,1,0,0;0,-5,0,0,1,0;0,0,-5,0,0,1;-25,0,0,5,0,0;0,-25,0,0,5,0;0,0,-25,0,0,5];
B=[0,0,0;0,0,0;0,0,0;0.0327,0,0;0,0.4260,0;0,0,0.4260];
x=[0;0;0;0;0;0];
ts=0.001;
for k=1:1:2000
time(k)=k*ts;
q=10;ep=0.5;
C=[5,0,0,1,0,0;0,5,0,0,1,0;0,0,5,0,0,1];
s(k)=C*x;
M=2;
if M==1
u(k)=-inv(C*B)*(C*A*x-(1-q*ts)*s(k)+ep*ts*sign(s(k)));
elseif M==2 %Saturated function
delta=0.005;
kk=1/delta;
if s(k)>delta
sats=1;
elseif abs(s(k))<=delta
sats=kk*s(k);
elseif s(k)<-delta
sats=-1;
end
u(k)=-inv(C*B)*(C*A*x-(1-q*ts)*s(k)+ep*ts*sats);
end
x=A*x+B*u(k);
x1(k)=x(1);
x2(k)=x(2);
end
figure(1);
plot(time,x1,'r',time,x2,'b');
xlabel('time(s)');ylabel('x1,x2');
figure(2);
plot(time,s,'r');
xlabel('time(s)');ylabel('s');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
plot(x1,x2,'r',x1,-c*x1,'b');
xlabel('x1');ylabel('x2') 展开
I must be the same.
Error in ==> Untitled6 at 11
s(k)=C*x;
部分代码如下:
clear all;
close all;
A=[-5,0,0,1,0,0;0,-5,0,0,1,0;0,0,-5,0,0,1;-25,0,0,5,0,0;0,-25,0,0,5,0;0,0,-25,0,0,5];
B=[0,0,0;0,0,0;0,0,0;0.0327,0,0;0,0.4260,0;0,0,0.4260];
x=[0;0;0;0;0;0];
ts=0.001;
for k=1:1:2000
time(k)=k*ts;
q=10;ep=0.5;
C=[5,0,0,1,0,0;0,5,0,0,1,0;0,0,5,0,0,1];
s(k)=C*x;
M=2;
if M==1
u(k)=-inv(C*B)*(C*A*x-(1-q*ts)*s(k)+ep*ts*sign(s(k)));
elseif M==2 %Saturated function
delta=0.005;
kk=1/delta;
if s(k)>delta
sats=1;
elseif abs(s(k))<=delta
sats=kk*s(k);
elseif s(k)<-delta
sats=-1;
end
u(k)=-inv(C*B)*(C*A*x-(1-q*ts)*s(k)+ep*ts*sats);
end
x=A*x+B*u(k);
x1(k)=x(1);
x2(k)=x(2);
end
figure(1);
plot(time,x1,'r',time,x2,'b');
xlabel('time(s)');ylabel('x1,x2');
figure(2);
plot(time,s,'r');
xlabel('time(s)');ylabel('s');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
plot(x1,x2,'r',x1,-c*x1,'b');
xlabel('x1');ylabel('x2') 展开
展开全部
我只能说,你这个程序写的问题不少。最后结果对不对都不能够保证。
首先,对于
s(k)=C*x;
这句来说,
C的维度是3×6,x的维度是6×1,那么结果的维度是3×1,用s(k)这种一维变量不能存储二维变量,因此可以改为
s(:,k)=C*x;
表示s的每一列存储运算的结果,而一共的列数表示迭代的次数。
因此,程序中所有s(k)的地方都要修改。
其次,u(k)的计算也是同样的问题。可以把u(k)改成u(:,k)。
更多追问追答
追问
大神,能qq指导下吗?我照你说的改的,还是有错误
??? Undefined function or variable 'sats'.
Error in ==> Untitled1111 at 25
u(:,k)=-inv(C*B)*(C*A*x-(1-q*ts)*s(:,k)+ep*ts*sats);
追答
现在上不了qq,出现问题的时候,你把相关的变量都检查一下,看看是不是都有效
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询