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

2 visualizzazioni (ultimi 30 giorni)
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 Commento
DGM
DGM il 12 Giu 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?

Accedi per commentare.

Risposta accettata

Star Strider
Star Strider il 12 Giu 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.
.

Più risposte (1)

Image Analyst
Image Analyst il 12 Giu 2021

Community Treasure Hunt

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

Start Hunting!

Translated by