Azzera filtri
Azzera filtri

Plot the vector field of a first order ODE

4 visualizzazioni (ultimi 30 giorni)
Tanja Gesslbauer
Tanja Gesslbauer il 16 Giu 2017
Modificato: Loay Gouda il 21 Mag 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 Commento
Tanja Gesslbauer
Tanja Gesslbauer il 16 Giu 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

Accedi per commentare.

Risposte (1)

David Goodmanson
David Goodmanson il 17 Giu 2017
Modificato: David Goodmanson il 17 Giu 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 Commenti
Tanja Gesslbauer
Tanja Gesslbauer il 17 Giu 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 il 21 Mag 2020
Modificato: Loay Gouda il 21 Mag 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.

Accedi per commentare.

Categorie

Scopri di più su Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by