Matlab for loop indexing confusion

  • #1
cookiemnstr510510
162
14
Homework Statement:
Code euler method for solving ODE in matlab
Relevant Equations:
test case given: y0=10, f=@(t,y) -0.5*y
The test case for the block of code below is:
y0=10,
f=@(t,y) -0.5*y,
[t,y]=euler_method_attempt(f,0,5,y0,10)

This code below works and is the correct answer, but I am confused on some parts of it. When indexing the for loop it seems as if the first output for "y" would be y(2), not y(1). And as far as the math goes I think y(2)=7.5.
I also don't understand why we wouldn't write something like:
for i=0:length(t)...
So how does MATLAB access the first element of "y"?

Thanks so much!

Matlab:
function [t,y]=euler_method_attempt(f,t0,tf,y0,n)
t=linspace(t0,tf,n+1);
dt=t(2)-t(1);
y=[y0,zeros(1,n)];

for i=1:length(t)-1
    y(i+1) = f(t(i),y(i)).*dt +y(i);
end

end
 

Answers and Replies

  • #2
dRic2
Gold Member
878
234
y(1) is what in the code is called 'y0' (line 4) and it is the boundary condition that you have to supply in order to solve the ODE, so you don't calculate it: it's given.

In MATLAB you access vectors with y(i) with i running from 1 to the total number of elements.
y(0) is not accepted, so
why we wouldn't write something like:
for i=0:length(t)...
is wrong because you have to start from 1.

Moreover in your for loop you are using the variable y(i+1) so you cannot stop at i = length(t) because in the loop you will have y(n+1+1) = y(n+2) which is outside the range of the vector you earlier defined.
 
  • Like
Likes sumairaanwar and hdp12

Suggested for: Matlab for loop indexing confusion

  • Last Post
Replies
5
Views
340
  • Last Post
Replies
3
Views
54
Replies
10
Views
526
  • Last Post
Replies
6
Views
877
  • Last Post
Replies
3
Views
53
  • Last Post
Replies
1
Views
320
  • Last Post
Replies
10
Views
396
  • Last Post
Replies
2
Views
317
Replies
6
Views
543
Replies
59
Views
858
Top