How can I use the iteration to store variables? It gives error Subscript indices must either be real positive integers or logicals.

1 view (last 30 days)
Yokuna on 17 Jun 2021
Commented: Yokuna on 20 Jun 2021
I wrote the code for 2 agents, but facing problem in storing variables in iteration. As the error shows Subscript indices must either be real positive integers or logicals. I want to rum the loop for 50 iterations.
t0=0;
tf=20;
tspan=[t0:1:tf];
x0=[3;0;0];
u1(1)=3; u2(1)=-3;
E1(1)=2; E2(1)=2;
itt=50;N=4;
y1=zeros
y1(1)=3; y2(1)=-1;
a=[0 -1;-1 0];
% For 1 agent
for i=1:itt
options=odeset('RelTol',1e-3,'AbsTol',1e-6);
[t,x]=ode23(@new,tspan,x0,options)
y1_est(i)=y1(i-1)+E1(i)*(du1(i));
err1(i)=y1(i)-y1_est(i);
if (sign(E1(i))<0)
E1(i)=E1(1);
else
E1(i)=E1(i-1)+(eta*du1(i-1)*err1(i-1))/(mu+du1(i-1)^2)
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function xdot = new(t,x)
x1=x(1);
x2=x(2);
x3=x(3);
X1=[x1;x2;x3];
A=[0.5 0.035 0.025;0.0255 0.6 -0.99;0.75 0.03 0.025];
B=[0.2;0.2;0];
C=[1 0 1];
y1=C*X1;
xdot1 =A*X1+B*u1;
xdot =[xdot1];
end

Geoff Hayes on 17 Jun 2021
Shivanshu - presumably the error is with
for i=1:itt
options=odeset('RelTol',1e-3,'AbsTol',1e-6);
[t,x]=ode23(@new,tspan,x0,options)
y1_est(i)=y1(i-1)+E1(i)*(du1(i));
because on the first iteration of the list, i is 1 yet the code tries to access y1(i-1)...hence the error. I think that you need to reconsider your how you are accessing data from these arrays. I was going to suggest starting from 2 (i.e. for i=2:itt) but I suspect that will lead to other issues.
Yokuna on 20 Jun 2021
Got this. Just putting u(i-1) instead of u in new1 file gives the result.

Categories

Find more on General Applications in Help Center and File Exchange

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by