"Array indices must be positive integers or logical values" for i=2 in loop
2 views (last 30 days)
Show older comments
Filip Bartyzel
on 12 Jun 2021
Answered: Image Analyst
on 12 Jun 2021
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
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?
Accepted Answer
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.
.
0 Comments
More Answers (1)
See Also
Categories
Find more on Matrix Indexing 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!