Graphing .m file returning blank figure

2 visualizaciones (últimos 30 días)
Andre Metzger
Andre Metzger el 18 de Sept. de 2019
Comentada: Ankit el 19 de Sept. de 2019
I have a .m file that gives a euler approximation ,
function yout=euler1(t0,y0,tfinal,h,f)
y=y0;
yout=y;
for n=t0:0.01:tfinal-h;
y=y+(h.*f(n,y));
end
yout=y;
end
I am trying to graph the approximated y values over t (attempt is below) , but running it, I always get a blank figure.
t=-3:0.01:4;
t0=-3;
y0=2.5;
tfinal=4;
h=0.01;
f=@(t,y)t.*(y-2).*(log(abs(y))-1);
figure;hold on
plot(t,euler1(t0,y0,tfinal,h,f))
Is there a way to make such a graph where the y values that are approximated by the .m file are plotted to their corresponding t values?
  4 comentarios
Andre Metzger
Andre Metzger el 19 de Sept. de 2019
Adam, how would you save the value on wach iteration to get the vector?
Adam Danz
Adam Danz el 19 de Sept. de 2019
I'm not sure what your eurler1 function is supposed to be doing. 'y' changes on each iteration and I'm not sure how that's supposed to produce your output vector.
This is generally how you save variables within a loop but it's very likely you need additional changes in that function.
function yout=euler1(. . .)
n = t0:0.01:tfinal-h;
yout = zeros(size(n));
for i = 1:numel(n)
yout(i)= . . .;
end
end

Iniciar sesión para comentar.

Respuestas (1)

Ankit
Ankit el 19 de Sept. de 2019
Editada: Ankit el 19 de Sept. de 2019
Hello Andre,
There is problem in your code. You are not storing y values.
function yout=euler1(t0,y0,tfinal,h,f)
y=y0;
yout(1)=y;
i = 1;
for n=t0:0.01:tfinal-h
y=y+(h.*f(n,y));
yout(i+1)=y;
i=i+1;
end
end
t=-3:0.01:4;
t0=-3;
y0=2.5;
tfinal=4;
h=0.01;
f=@(t,y)t.*(y-2).*(log(abs(y))-1);
figure;hold on
plot(t,euler1(t0,y0,tfinal,h,f))
Are you expecting similar curve?
Regards
Ankit
  2 comentarios
Adam Danz
Adam Danz el 19 de Sept. de 2019
Don't forget to pre-allocate the loop variables. The i=i+1 iteration is unnecessary in a for-loop.
function yout=euler1(t0,y0,tfinal,h,f)
y=y0;
n=t0:0.01:tfinal-h;
yout = [y,zeros(size(n))];
for i = 1:numel(n)
y=y+(h.*f(n(i),y));
yout(i+1)=y;
end
end
Ankit
Ankit el 19 de Sept. de 2019
thanks Adam (y)

Iniciar sesión para comentar.

Categorías

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

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by