"Array indices must be positive integers or logical values" for i=2 in loop

2 views (last 30 days)
Hi all,
Could anybody help me with following script? For some reason it gives me an error in iteration in line 38 when i=2 (in k12II = Fxy2II(xII(i),yII(i),fiII(i)); expression)
Thanks!
%Całkowanie równania 2go rzędu metodą Eulera.
%belka obciazona trzema silami skupionymi w a, 2a i 3a
clear; clc;
h=0.05; %krok całkowania
a=1;
E=1;
I=1;
p=1;
xmaxI=1; numI=xmaxI/h;
xI(1)=0;yI(1)=0;fiI(1)=0; %warunki brzegowe (belka utwierdzona)
%------------------------
Fxy1I=@(xxI,yyI,ffiI) ffiI;
Fxy2I=@(xxI,yyI,ffiI) -3*p*a/(E*I);
%------------------------
for i=1:numI+1
k11I = Fxy1I(xI(i),yI(i),fiI(i));
k12I = Fxy2I(xI(i),yI(i),fiI(i));
%------------------------
yI(i+1)=yI(i)+h*k11I;
fiI(i+1)=fiI(i)+h*k12I;
xI(i+1)=xI(i)+h;
%------------------------
end
xmaxII=1; numII=xmaxII/h;
xII(1)=2;yII(1)=yI(numI+1);fiII(1)=fiI(numI+1); %warunki zszycia
%------------------------
Fxy1II=@(xxII,yyII,ffiII) ffiII;
Fxy2II=@(xxII,yyII,ffiII) 1/E*I*(-3*p*a-p(xxII-a));
%------------------------
for i=1:numII
k11II = Fxy1II(xII(i),yII(i),fiII(i));
k12II = Fxy2II(xII(i),yII(i),fiII(i));
%------------------------
yII(i+1)=yII(i)+h*k11II;
fiII(i+1)=fiII(i)+h*k12II;
xII(i+1)=xII(i)+h;
%------------------------
end
xmaxIII=1; numII=xmaxIII/h;
xIII(2)=3;yIII(2)=yIII(numII+1);fiIII(1)=fiII(numII+1); %warunki zszycia
%------------------------
Fxy1III=@(xxIII,yyIII,ffiIII) ffiIII;
Fxy2III=@(xxIII,yyIII,ffiIII) 1/E*I*(-3*p*a-p*(xxIII-a)-p*(xxIII-a));
%------------------------
for i=1:numIII
k11III = Fxy1III(xIII(i),yIII(i),fiIII(i));
k12III = Fxy2III(xIII(i),yIII(i),fiIII(i));
%------------------------
yIII(i+1)=yIII(i)+h*k11III;
fiIII(i+1)=fiIII(i)+h*k12III;
xIII(i+1)=xIII(i)+h;
%------------------------
end
%
y_scisleI=1/E*I*(-3/2*p*a*xI^2);
y_scisleII=1/E*I*((-3/2*p*a*xII^2)+(p*(xII-a)^3)/6);
y_scisleIII=1/E*I*((-3/2*p*a*xIII^2)+(p*(xIII-a)^3)/6+(p*(xIII-2*a)^3)/6);
%
plot(xI,-yI,'-ro',xI,-y_scisleI,'b-',xII,-yII,'-ro',xII,-y_scisleII,'b-',xIII,-yIII,'-ro',xIII,-y_scisleIII,'b-');
legend('Wynik całkowania','Rozwiązanie ścisłe');
title('Całkowanie metodą Eulera');
xlabel('zmienna x');
ylabel('funkcja y(x)');
grid on;
axis([0,3,-20,1]); axis square;
%
  1 Comment
DGM
DGM on 12 Jun 2021
Since
xII =
2.0000 2.0500
the index
xII(2)-a
ans =
1.0500
There is no 1.05th element of p. Is xII supposed to be integer-valued? Can you use round(), ceil(), or floor() on the computed index?

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 12 Jun 2021
The error that throws when I run it in the online Run feature has to do with:
Fxy2II=@(xxII,yyII,ffiII) 1/E*I*(-3*p*a-p(xxII-a));
that is correctec by adding a multiplication operator:
Fxy2II=@(xxII,yyII,ffiII) 1/E*I*(-3*p*a-p*(xxII-a));
With that fixed, the next error relates to ‘yIII’ not being defined here:
xIII(2)=3;yIII(2)=yIII(numII+1);fiIII(1)=fiII(numII+1); %warunki zszycia
I must defer to you to decide how to correct that.
.

More Answers (1)

Image Analyst
Image Analyst on 12 Jun 2021

Community Treasure Hunt

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

Start Hunting!