How to solve a system of ODE's by using Forward Euler method?

87 views (last 30 days)
How I can rewrite the following code for a system ODE's y(t)=[y_1 y_2]'. Also, how can I write f( t(i) , y(i)) ,which is equal to f(t,y)=A *y, as a function.
function [y , t ] = forwardEuler (f , t0 ,T , y0 , N )
%Solve dy/dt = f(t,y) , y(t0 )= y0
h = ( T - t0 )/( N -1); % Calulate and store the step - size
t = linspace( t0 ,T , N ); % A vector to store the time values .
y = zeros (1 , N ); % Initialize the Y vector .
y (1) = y0 ; % Start y at the initial value .
for i = 1:( N -1)
y (i +1)= y(i)+ h*f( t(i) , y(i)); % Update approximation y at t+h
end

Answers (1)

Jan
Jan on 15 Apr 2018
Edited: Jan on 15 Apr 2018
Replace
y = zeros (1 , N ); % Initialize the Y vector .
y (1) = y0 ; % Start y at the initial value .
by
y = zeros (numel(y0) , N); % Initialize the Y matrix .
y(:, 1) = y0(:); % Start y at the initial value .
And
y (i +1)= y(i)+ h*f( t(i) , y(i)); % Update approximation y at t+h
by
y(:, i +1) = y(:, i) + h * f(t(i), y(:, i)); % Update approximation y at t+h
Then your f(t,y) is simply:
function dy = f(t, y)
A = ???
dy = A * y;
end
Hint: It improves the readability of code to use a fixed scheme of inserting spaces. Some users prefer: spaces around operators and the equal character. No spaces after parenthesis and before commas.
  2 Comments
Hesham Hendy
Hesham Hendy on 26 Oct 2019
Edited: Hesham Hendy on 26 Oct 2019
I have a question for you !
In your dy = f(t,y) you pass the time instant as input argument but you don't use it !
Should the time instant be used by the calculation or not ? and why ??
Jan
Jan on 4 Nov 2019
@Hesam Hendy: It depends on the function to be integrated if it depends on t or not.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!