Borrar filtros
Borrar filtros

Plot the vector field of a first order ODE

4 visualizaciones (últimos 30 días)
Tanja Gesslbauer
Tanja Gesslbauer el 16 de Jun. de 2017
Editada: Loay Gouda el 21 de Mayo de 2020
Good evening,
I have to solve the following problem via MatLab, and I'm stuck a little:
x' = x(r-e^x)
The goal is to plot the all the different vector field of this differential equation with varying r.
if true
[T, X] = meshgrid(0:0.1:5, -5:0.1:5);
dX = X*(r-exp(X));
dT = ones(size(dX));
quiver(T, X, dT, dX);
end
I tried it with meshgrid, but somehow it does not seem to work. I know how to plot equations in MatLab, and I know how to solve differential equations, but both, I don't know.
Do I need to define r as a vector? or do I just have to plot the differential equation?
I would be grateful for some help here :-)
Greetings, Tanja
  1 comentario
Tanja Gesslbauer
Tanja Gesslbauer el 16 de Jun. de 2017
Update: I tried it again differently
if true
[T, Y]=meshgrid(-5:0.1:5,-5:0.1:5);
dY=Y*(r-exp(x));
dT=ones(size(dY));
L=sqrt(1+dY.^2);
quiver(T, Y, dT./L, dY./L, 0.5)
axis tight
end
and even if I replace r with 1, 0 and -1 (just for trying out reasons) it doesn't work. So I'm guessing I need to define r differently?
Greetings

Iniciar sesión para comentar.

Respuestas (1)

David Goodmanson
David Goodmanson el 17 de Jun. de 2017
Editada: David Goodmanson el 17 de Jun. de 2017
Hi Tanja, Since the exponetial function creates such a wide range of values, I like your idea in the second code of plotting unit vectors. In that code, try
dY=Y.*(r-exp(Y));
It has exp(Y), which is what you meant instead of exp(x), but also
.* in place of *
  2 comentarios
Tanja Gesslbauer
Tanja Gesslbauer el 17 de Jun. de 2017
Thank's a lot! This was such a stupid mistake, something that's not supposed to happen!
Now it works fine, I can try different values for r and it shows me different outcomes. Now I'm curious: is there a possibility in MatLab to get a visualisation in which is r runs from e.g. [-10, 10]?
Greetings, Tanja :-)
Loay Gouda
Loay Gouda el 21 de Mayo de 2020
Editada: Loay Gouda el 21 de Mayo de 2020
Hello Tanja, So this is a bit late but to answer your question you can put the whole thing in a for loop for r = -10:10 And before you end the loop add after quiver ==> drawnow, pause("the time difference you want")
This will show a series of plots for different values of r that is updated on the same plot.
I hope you did find your answer back then and that this reply didn't help at all.

Iniciar sesión para comentar.

Categorías

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

Community Treasure Hunt

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

Start Hunting!

Translated by