Graphing .m file returning blank figure
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Adam Danz
le 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
Réponses (1)
Ankit
le 19 Sep 2019
Modifié(e) : Ankit
le 19 Sep 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 commentaires
Adam Danz
le 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
Voir également
Catégories
En savoir plus sur Line Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!