# fractional-order,Index exceeds the number of array elements (1)

1 view (last 30 days)
Farshid R on 22 Dec 2020
Commented: Farshid R on 23 Dec 2020
Hi
Good time
I wrote this code but it gives an error
thank you
%%
n=100;
u1=[0,0]';
X1=[-4,-2,0]';
a=0.9;
h=0.9;
cp1=1;cp2=1;cp3=1;
for j=1:n
c1(j)=(1-(1+a)/j)*cp1;
c2(j)=(1-(1+a)/j)*cp2;
c3(j)=(1-(1+a)/j)*cp3;
cp1=c1(j); cp2=c2(j); cp3=c3(j);
end
% initial conditions setting:
v1(1)=u1(1);
w1(1)=u1(2);
x1(1)=X1(1); y1(1)=X1(2); z1(1)=X1(3);
% calculation of phase portraits /numerical solution/:
for i=2:n
x1(i)=h*cos(z1(i-1))*v1(i-1) - memo(x1, c1, i);
y1(i)=h*sin(z1(i-1))*v1(i-1)-memo(y1, c2, i);
z1(i)=h*w1(i-1)-memo(z1, c3, i) ;
end
%%
function [yo] = memo(r, c, k)
%
temp = 0;
for j=1:k-1
temp = temp + c(j)*r(k-j);
end
yo = temp;
%
%%%%% error
Index exceeds the number of array elements (1).
Error in exocstrstateFcnCT1 (line 28)
x1(i)=h*cos(z1(i-1))*v1(i-1) - memo(x1, c1, i);

Walter Roberson on 23 Dec 2020
You only initialize
v1(1)=u1(1);
and you do not assign to any other entry in v1, so when i becomes 3, v1(i-1) becomes v1(2) which does not exist.
Farshid R on 23 Dec 2020
function z=myStateFunction1(x,u,X2G,X3G,k)
a=0.9;h=0.9;
cp1=1;cp2=1;cp3=1;
c1= nchoosek(a,k);
c2=nchoosek(a,k);
c3=nchoosek(a,k);
cp1=c1; cp2=c2; cp3=c3;
z(1)=x(1); z(2)=x(2); z(3)=x(3);
z(1)=h*cos(x(3))*u(1) - memo(z(1), c1, k);
z(2)=h*sin(x(3))*u(1)-memo(z(2), c2, k);
z(3)=h*u(2)-memo(z(3), c3, k) ;
%%
function [x0] = memo1(r, c, k)
temp = 0;
for j=1:k-1
temp = temp + c(j)*r(k-j);
end
x0 = temp;
Start of Error Report
------------------------------------------------------
Array indices must be positive integers or logical values.

### Categories

Find more on Data Types in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!