How do I deal with the following error "??? Subscripted assignment dimension mismatch" occuring in line 32 of the following code..

clc;
clear all;
close all;
to=0;
tf=2;
d=0.01;
n=tf/d;
c=5;
y=zeros(1,n);
r=zeros(1,n);
x=zeros(2,n);
s=zeros(1,n);
t=zeros(1,n);
e=zeros(2,n);
M=0.75;
thr=30; % rest position of the knee
% v(1)=0;
J=.2639; % moment of inertia
Tg=8.57; %gravitational term
A=4.4289; %solid friction parameters
B=0.595; %viscous friction parameters
K=.3382;
K1=.5;
u=zeros(1,n);
u(1,1)=0;
for i=1:n+1
dx1=x(2,i);
dx2=(-Tg*cos(x(1,i)-A*sign(s)*x(2,i)-B*x(2,i)-K*(x(1,i)-thr)+K1+u(1,i))/J);
x(1,(i+1))=x(1,i)+(d*dx1);
x(2,(i+1))=x(2,i)+(d*dx2);
t(1,(i+1))=t(1,i)+d;
xd(1,(i+1))=sin(t(1,i)); %#ok<AGROW>
xd(2,(i+1))=sin(t(1,i)); %#ok<AGROW>
e(1,(i+1))=xd(1,i+1)-x(1,i+1);
e(2,(i+1))=xd(2,i+1)-x(2,i+1);
s(1,(i+1))=c*e(1,1+i)+e(2,1+i);
u(1,i)=J*c*cos(t(1,i))-J*c*x(2,i)+J*cos(t(1,i))+Tg*cos(x(1,i)+A*sign(s)*x(2,i)+B*x(2,i)+K(x(1,i)-thr)-K1);
u(1,i+1)=u(1,i)-M*sign(s(1,i));
y(1,i+1)=x(1,i+1);
end
figure(1)
plot(t(1,:),y(1,:),'r');
xlabel('time(s)');ylabel('Position tracking');
%ylabel('sliding surface');
%xlabel('time(sec)*10^-3');
%hold on;
figure(2)
plot(t(1,:),e(1,:));
xlabel('time(s)');ylabel('Error tracking');
grid;

 채택된 답변

dx2=(-Tg*cos(x(1,i)-A*sign(s)*x(2,i)-B*x(2,i)-K*(x(1,i)-thr)+K1+u(1,i))/J)
dx2 is the same size as sign(s) which in turn is the same size as s, that is a 1 x n vector. Of course, you can't assign a vector to a single value.
Possibly you meant sign(s(1, i)), which is equivalent to sign(s(i))

댓글 수: 1

Thanks for your reply.I have been able to solve it.....now, can you please help me figure out the error appearing in line 39 of the same program??? As you can see, I am quite new to Matlab...

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

It is on this line that you have an error:
x(2,(i+1))=x(2,i)+(d*dx2);
The issue is dx2 is a 1-by-200 double vector. You multiply by a scalar and add to a scalar which is causing a scalar expansion to occur, resulting in a 1-by-200 vector. Now you are trying to assign this to a single element of a matrix. My guess is that you wanted dx2 to be scalar, and the only vector used in the creation of dx2 occurring on line 30 is:
sign(s) % s is a vector of zeros (1-by-200)

댓글 수: 1

Thanks for your reply.I have been able to solve it.....now, can you please help me figure out the error appearing in line 39 of the same program??? As you can see, I am quite new to Matlab...

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Simulink에 대해 자세히 알아보기

질문:

2015년 3월 11일

댓글:

2015년 3월 12일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by