Index exceeds the number of array elements. Index must not exceed 1

2 Ansichten (letzte 30 Tage)
x_exact = @(t) 1./3.*2.*exp(-3.*t).*(2.*exp(6.*t) + 1) + 1./3.*2.*exp(-3.*t).*(exp(6.*t) - 1) % x exact solution
y_exact = @(t) 2./3.*2.*exp(-3.*t).*(exp(6.*t) - 1) + 1./3.*2.*exp(-3.*t).*(exp(6.*t) + 2) % y exact solution
h = 0.1 % step
t0 = 0 % first time value
ts = 4 % last time value
t=t0:h:ts
for i = 1:length(t)
if (t(i) == t0)
x_ex(i) = x_exact(t(i))
x_iEm(i) = x_exact(t(i))
else
x_ex(i) = x_exact(t(i))
x_past = x_iEm(i-1)
y = y_exact(t(i))
x_iEm(i) - h*x_iEm(i) == x_past + h*2*y % error occur in this line code
end
end
hi guy , so i'm trying to solve the ODE systems , and calculate x_ex ( exactly solution ) and x_iEm ( implicit Euler method) , and i get the error " Index exceeds the number of array elements. Index must not exceed 1 " , does anyone know the way to fix it ???
it seem like the error occurs when i = 2 -> t(i) = 0.1 , in the line code i comment

Akzeptierte Antwort

Alan Stevens
Alan Stevens am 29 Nov. 2022
What are yoy trying to do with
x_iEm(i) - h*x_iEm(i) == x_past + h*2*y;
when i = 2, there is, as yet, no value assigned to x_iEm(i), so you sem to be testing for logical equality with values on the left that don't exist.
  2 Kommentare
BAO HOANG
BAO HOANG am 29 Nov. 2022
i just want to calculate the x_iEm(i) when i = 2 , when we have the RHS , do you know how to do it??? ( sorry , just the firts or second day i learn matlab , so don't know much about this things )
Alan Stevens
Alan Stevens am 29 Nov. 2022
The == test for equality. To assign something to a variable just use =.
If you intended to obtain x_iEm(i) from x_iEm(i) - h*x_iEm(i) == x_past + h*2*y;then you need
x_iEm(i) = (x_past + h*2*y)/(1-h);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by