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

5 Ansichten (letzte 30 Tage)
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;

Akzeptierte Antwort

Guillaume
Guillaume am 11 Mär. 2015
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 Kommentar
Biswajit Debnath
Biswajit Debnath am 12 Mär. 2015
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...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Brendan Hamm
Brendan Hamm am 11 Mär. 2015
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 Kommentar
Biswajit Debnath
Biswajit Debnath am 12 Mär. 2015
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...

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by