Graphing .m file returning blank figure
Show older comments
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 Comments
Adam Danz
on 18 Sep 2019
Have you looked at the output to your euler1() function? It produces a scalar value (1 value, not a vector of values). 't' is a vector so when you try to plot the vector and scalar you just end up with an empty figure.
The for-loop in your euler1() function is overwriting the value on each iteration. If you save that value on each iteration it will return a vector.
Walter Roberson
on 18 Sep 2019
You never pass t to the function. You should be looping passing each t value in turn, as tfinal probably.
Andre Metzger
on 19 Sep 2019
Adam Danz
on 19 Sep 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
Answers (1)
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 Comments
Adam Danz
on 19 Sep 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
on 19 Sep 2019
thanks Adam (y)
Categories
Find more on Line Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!