Euler's Method

3 visualizaciones (últimos 30 días)
Mikela Petersen
Mikela Petersen el 16 de Ag. de 2020
Respondida: Rafael Hernandez-Walls el 16 de Ag. de 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 comentarios
Image Analyst
Image Analyst el 16 de Ag. de 2020
You forgot to give us the actual error. That means ALL the red text, not just a small snippet of it. By the way, your f does not seem to use y at all:
f = @(x,y) (x.^3);
You can see that it just returns x cubed. The y value is ignored.
Mikela Petersen
Mikela Petersen el 16 de Ag. de 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)));

Iniciar sesión para comentar.

Respuestas (2)

Walter Roberson
Walter Roberson el 16 de Ag. de 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
Rafael Hernandez-Walls el 16 de Ag. de 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

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by