Matlab for loop indexing confusion

  • #1
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 dont understand why we wouldnt 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
830
207
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 wouldnt 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.
 

Related Threads on Matlab for loop indexing confusion

Replies
10
Views
11K
Replies
2
Views
4K
  • Last Post
Replies
0
Views
5K
Replies
1
Views
3K
  • Last Post
Replies
1
Views
1K
Replies
4
Views
4K
  • Last Post
Replies
3
Views
22K
  • Last Post
Replies
8
Views
1K
Replies
20
Views
1K
  • Last Post
Replies
22
Views
5K
Top