Here is a short post on how to generate a quick slope field in R and Python.
If you do not know what a slope field is, well I am not the best person to explain it to you since it is a relative new concept for me as well. From what I’ve understood on the subject, a slope field is a graphical way to sort out a first-order differential equation and get a grasp at the solution without having to solve it analytically.
As the Wikipedia’s page says, “it may be used to qualitatively visualize solutions, or to numerically approximate them.”
In general, I feel safe saying that a slope field is some sort of a graphical approach to a differential equation.
Say you have the following differential equation:
drawing the slope field would look something like this:
In Python (without arrows)
and in R (with arrows, x=f and y=h)
Of course these plots are just very quick and can be improved.
Here is the Python code I used to draw them.
import numpy as np | |
from matplotlib import pyplot as plt | |
# Differential equation | |
# diff = y'= y/x (or say x+y) | |
def diff(x,y): | |
return y/x # try also x+y | |
x = np.linspace(-10,10,50) | |
y = np.linspace(-10,10,50) | |
# use x,y | |
for j in x: | |
for k in y: | |
slope = diff(j,k) | |
domain = np.linspace(j-0.07,j+0.07,2) | |
def fun(x1,y1): | |
z = slope*(domain-x1)+y1 | |
return z | |
plt.plot(domain,fun(j,k),solid_capstyle='projecting',solid_joinstyle='bevel') | |
plt.title("Slope field y'") | |
plt.grid(True) | |
plt.show() | |
print("End of the program") |
And the R code
# Our differential equation | |
diff <- function(x,y) | |
{ | |
return(x/y) #Try also x+y | |
} | |
# Line function | |
TheLine <- function(x1,y1,slp,d) | |
{ | |
z = slope*(d-x1)+y1 | |
return(z) | |
} | |
# Domains | |
x = seq(-20,20,0.5) | |
y = seq(-20,20,0.5) | |
# Points to draw our graph | |
f = c(-5,5) | |
h = c(-5,5) | |
plot(f,h,main="Slope field") | |
# Let's generate the slope field | |
for(j in x) | |
{ | |
for(k in y) | |
{ | |
slope = diff(j,k) | |
domain = seq(j-0.07,j+0.07,0.14) | |
z = TheLine(j,k,slope,domain) | |
arrows(domain[1],z[1],domain[2],z[2],length=0.08) | |
} | |
} |
Here is a beautiful slope field for the following differential equation:
If you need a quick tool for drawing slope fields, this online resource is good, click here.
Hope this was interesting.
I think it should be "return y/x" for diff definition .
ReplyDeleteHi Kim! Thanks for spotting and reporting the mistake! Fixed!
DeleteIt should be corrected for "R" program also.
DeleteIs there a built in function in python that one can import from a module that gives us the slope field?
ReplyDeleteThanks for the article. Very helpfull. Obrigado
ReplyDelete