Array indices must be positive integers or logical values.

1 Ansicht (letzte 30 Tage)
Ali Deniz
Ali Deniz am 16 Okt. 2021
Beantwortet: Image Analyst am 18 Okt. 2021
I am trying to solve an equation by using Runge-Kutta Euler Method. Why do I get "Array indices must be positive integers or logical
values." error?
%Euler Method
%parameters
g=9.81;
rho=1.2;
s=0.00011;
m=0.023;
Cd=0.9;
%Initial Condition
V0=0;
V=0;
%I choose dt as
dt=2;
%time interval
t0=0;
ts=10;
t=0;
i=0;
while dt<ts;
d1=g-0.5.*rho.*V0.^2*(s/m).*Cd;
phiAvg=d1;
V(i)=V0+dt.*phiAvg;
V0=V;
t(i)=t;
i=i+1;
t=t+dt;
end
plot(V,t)

Akzeptierte Antwort

KSSV
KSSV am 16 Okt. 2021
%Euler Method
%parameters
g=9.81;
rho=1.2;
s=0.00011;
m=0.023;
Cd=0.9;
%Initial Condition
V0=0;
V=zeros([],1);
%I choose dt as
dt=0.2;
%time interval
t0=0;
ts=10;
t=0;
i=0;
while t<ts
i=i+1;
d1=g-0.5.*rho.*V0.^2*(s/m).*Cd;
phiAvg=d1;
V(i)=V0+dt.*phiAvg ;
V0=V(i);
% t(i)=t;
t=t+dt;
end
plot(V)
  3 Kommentare
dpb
dpb am 16 Okt. 2021
" I must get V(0)=9.81..."
We can't always get what we want. MATLAB arrays are unalterably and inviolatably 1-based, NOT zero-based.
You must create a secondary variable to plot against to have a zero origin graph.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

dpb
dpb am 16 Okt. 2021
In
...
i=0;
while dt<ts;
d1=g-0.5.*rho.*V0.^2*(s/m).*Cd;
phiAvg=d1;
V(i)=V0+dt.*phiAvg;
V0=V;
t(i)=t;
...
what is i first time through the loop?
Using the debugger is very helpful in such cases...
  1 Kommentar
Ali Deniz
Ali Deniz am 16 Okt. 2021
I want to get a graph so I wanted to store values in V(i). For example V(0)=9.81, V(2)=19.62 ... when t=0, t=2 ....

Melden Sie sich an, um zu kommentieren.


John D'Errico
John D'Errico am 16 Okt. 2021
Bearbeitet: John D'Errico am 16 Okt. 2021
It does not matter that you WANT V(0) to be something. MATLAB does not support zero based indexing. PERIOD.
However, nothing stops you from starting the vector at V(1). And then when you index into the vector, just use V(ind + 1). Now when ind == 0, there is no problem.
If you want to do a plot?
t = 0:1:10; % or whatever it should be
plot(t,V(t+1))

Image Analyst
Image Analyst am 18 Okt. 2021

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by