Code for the logistic equation
I am trying to figure out the following code for a logistic map image, but I am stuck at the point where
ys = [ ]
rs = numpy.linspace(0, 4, 400)
What does it mean rs
? What does it mean i in range()
? I would really appreciate your help!
def f(x, r):
"""Discrete logistic equation with parameter r"""
return r*x*(1-x)
if __name__ == '__main__':
# initial condition for x
ys = []
rs = numpy.linspace(0, 4, 400)
for r in rs:
x = 0.1
for i in range(500):
x = f(x, r)
for i in range(50):
x = f(x, r)
ys.append([r, x])
ys = numpy.array(ys)
pylab.plot(ys[:,0], ys[:,1], '.')
pylab.show()
+3
source to share
3 answers
rs = numpy.linspace(0, 4, 400)
creates a numpy array with 400 values equal to the interval between 0 and 4 (including endpoints).
Here are some smaller examples:
In [17]: import numpy as np
In [18]: np.linspace(0, 4, 5)
Out[18]: array([ 0., 1., 2., 3., 4.])
In [19]: np.linspace(0, 4, 10)
Out[19]:
array([ 0. , 0.44444444, 0.88888889, 1.33333333, 1.77777778,
2.22222222, 2.66666667, 3.11111111, 3.55555556, 4. ])
for i in range(50)
explained in the Python tutorial (sections 4.2 and 4.3).
Here are some comments to help explain the code.
import numpy as np
import matplotlib.pyplot as plt
import pylab
import numpy
def f(x, r):
"""Discrete logistic equation with parameter r"""
return r*x*(1-x)
if __name__ == '__main__':
# initial condition for x
ys = []
rs = numpy.linspace(0, 4, 400)
# Loop through `rs`. `r` is assigned the values in `rs` one at a time.
for r in rs:
x = 0.1
# Repeat this loop 500 times.
# i is just a dummy variable since it is not used inside the for-loop.
for i in range(500):
# Evaluate f at (x, r). The return value is assigned to x.
# x is then fed back into f(x, r).
# This makes x jump around 500 times according to the logistic equation.
# r remains fixed.
x = f(x, r)
# Do this 50 times
for i in range(50):
# Again make the x jump around according to the logistic equation
x = f(x, r)
# Save the point (r, x) in the list ys
ys.append([r, x])
# ys is a list of lists.
# You can also think of ys as a list of [r, x] point.
# This converts the list of lists into a 2D numpy array.
ys = numpy.array(ys)
# ys[:,0] is a 1D array of r values
# ys[:, 1] is a 1D array of x values
# This draws a scatter plot of (r, x) points.
pylab.plot(ys[:,0], ys[:,1], '.')
pylab.show()
+4
source to share