# Euler's Method

4 views (last 30 days)
Mikela Petersen on 16 Aug 2020
I'm getting an error that reads "Error in myeuler (line 22)
y(i+1) = y(i) + (dx * f(x(i),y(i)));"
I don't exactly know what I'm doing wrong or even where to look in this line to see what's wrong.
% must call from edrive.m or other
% required input arguments: RHS function of two variables f,
% vector x of length n+1,
% init val c
% computed output argument: y\in\R^{n+1} approximate solution
function y = myeuler(f,x,c)
% approximates sol to y' = f(x,y) over [a,b] with y(a)=c
% via n steps of Euler's method
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = [a:n+1:b];
f = @(x,y) (x.^3);
dx = (x(end)-x(1))/n;
y = [c ; zeros(n,1)];
for i = 1: n
y(i+1) = y(i) + (dx * f(x(i),y(i)));
end
end
##### 2 CommentsShowHide 1 older comment
Mikela Petersen on 16 Aug 2020
the error is the first thing that was listed:
>> myeuler
Index exceeds the number of array elements (1).
Error in myeuler (line 22)
y(i+1) = y(i) + (dx * f(x(i),y(i)));

Walter Roberson on 16 Aug 2020
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = [a:n+1:b];
Consider the first case, n = 10 . Then
a = 0; b = .5; c = .25;
x = [0:10+1:.5]
but 0:11:.5 is going to give you just 0 .
The number in the middle in a a:b:c operation is the increment, not the number of elements to generate. To generate a particular number of elements,
x = linspace(a, b, n+1);

Rafael Hernandez-Walls on 16 Aug 2020
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = linspace(a,b,n);%[a:n+1:b];
f = x.^3;
dx = x(2)-x(1);%(x(end)-x(1))/n;
y = [c ; zeros(n-1,1)];
for i = 1: n-1
y(i+1) = y(i) + dx * f(i);
end
plot(x,y),hold on
end