Clear Filters
Clear Filters

Plot the vector field of a first order ODE

4 views (last 30 days)
Tanja Gesslbauer
Tanja Gesslbauer on 16 Jun 2017
Edited: Loay Gouda on 21 May 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 Comment
Tanja Gesslbauer
Tanja Gesslbauer on 16 Jun 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

Sign in to comment.

Answers (1)

David Goodmanson
David Goodmanson on 17 Jun 2017
Edited: David Goodmanson on 17 Jun 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 Comments
Tanja Gesslbauer
Tanja Gesslbauer on 17 Jun 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 on 21 May 2020
Edited: Loay Gouda on 21 May 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.

Sign in to comment.

Categories

Find more on Programming 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!