Forward Euler method error

14 views (last 30 days)
ISABELLA CORONADO
ISABELLA CORONADO on 28 Apr 2022
Edited: Torsten on 3 May 2022
I am trying to create a loop to solve a system of differential equations, where x' = -y and y' = x. The initial conditions given are x(0) = r and y(0) = 0, but r can be set as any arbitrary number and it won't change the solution too much. I am getting this error that says "Array indices must be positive integers or logical values", but I am confused because I am nonly trying to set initial conditions. ANY help is greatly appreciated!!!

Accepted Answer

Torsten
Torsten on 28 Apr 2022
Edited: Torsten on 28 Apr 2022
Array indices in MATLAB start at 1, not at 0.
Thus you will have to replace
x(0)=1
y(0)=0
by
x(1)=1
y(1)=0
And you solve the wrong equations. What you solve is
x' = -t
y' = y
Look at how you call dxdt and dydt.
In both cases, the call must be
x(n+1) = x(n) + h*dxdt(x(n),y(n))
y(n+1) = y(n) + h*dydt(x(n),y(n))
Further, by the line
t(n+1) = a+n*h
you overwrite the t-vector you've already created by
t=a:h:b
So you should delete this line.
  4 Comments
ISABELLA CORONADO
ISABELLA CORONADO on 3 May 2022
I see. I was confused by your answer involving t, as manually solving the differential equation does not involve t. I ended up using the code attached, and it worked perfectly. I am not familiar enough with matlab to understand if this is equivalent to your suggestion, so I am not sure if what you suggested would have provided the correct results, but I appreciate your help in my process.
Torsten
Torsten on 3 May 2022
Edited: Torsten on 3 May 2022
As I wrote in my first response, the call to dydt must be
x(n+1) = x(n) + h*dxdt(x(n),y(n))
y(n+1) = y(n) + h*dydt(x(n),y(n))
instead of
x(n+1) = x(n) + h*dxdt(x(n),t(n))
y(n+1) = y(n) + h*dydt(y(n),t(n))
as you first did, and that's what you finally found out by yourself. That's optimal.

Sign in to comment.

More Answers (1)

KSSV
KSSV on 28 Apr 2022
The loop should be taken as:
for i = 1:round(N)
In your present case, it is a fraction and you are getting non integers as the indices and error is pooped.
% Demo
N = 10.2;
for i = 1:N
i
A(i) = rand ; % error, index cannot be fraction
end

Categories

Find more on Mathematics in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!