El método de Euler no proporciona la salida correcta.
Estoy tratando de escribir un código de MATLAB para el método de Euler hacia adelante, pero no creo que la salida sea completamente correcta.
Este es mi código:
function [t ,u] = Euler(f,tspan ,u0,n)
T = [tspan(1) :n: tspan(2)];
u = zeros(1,n);
u(n) = u0;
h = (tspan(2) - tspan(1))/n;
for i= 1: n
u(i+1) = u(i) + h*f(T(i),u(i));
t = [u(i+1) T(i)];
u = [u(i+1)];
end
end
davy.ai
Hay un par de problemas con el código que pueden estar causando una salida incorrecta:
t = [u(i+1)*T(i)];
debe ser en cambiot(i+1) = T(i+1);
. Esto se debe a que queremos almacenar los valores de tiempo en el arreglot
, no un producto entre el valor de tiempo y el valor correspondiente deu
.La línea
u = [u(i+1)];
debe ser en cambiou(i+1) = u(i+1);
. Esto se debe a que queremos agregar el nuevo valor deu
al final del arreglou
, no sobrescribir todo el arreglo con solo el último valor.Aquí está el código corregido:
Cambios realizados:
– Se eliminó la línea
u(n) = u0;
ya queu(1)
se inicializa comou0
.– Se reemplazó
T
port
, ya que no hay necesidad de crear una variable separada para el tiempo.– Se utilizó
linspace
para crear el arreglo de tiempot
.– Se cambió el ciclo para que se ejecute desde 1 hasta
n
, en lugar de 1 hastan-1
.– Se reemplazó el cálculo de
t
yu
dentro del ciclo con declaraciones de asignación simples para agregar los nuevos valores a los arreglos.¡Espero que esto ayude!