Bifurcation Diagram using Python
A Bifurcation Diagram shows that the stability of a system can be highly dependant on the inputs.
It is calculated by looping the folowing equation, for a number of iterations, and every r
in a defined range. Then the results are plotted with each r
on the x-axis, and x
on the y-axis
Then the results are plotted with each r
on the x-axis, and x
on the y-axis, resulting in the following diagram.
The code for it is as follows:
import numpy as np
import matplotlib.pyplot as plt
import numba
@numba.jit(nopython=True, parallel=True)
def calc():
# Parameters
min_r = 2.8
max_r = 3.65
step_r = 0.001
max_iterations = 10000
skip_iterations = 500
max_counter = int((max_iterations - skip_iterations) * (max_r - min_r) / step_r)
# The x and r results will be stored in these two arrays
result_x = np.zeros(max_counter)
result_r = np.zeros(max_counter)
# Start the main loop
i = 0
for r in np.arange(min_r, max_r, step_r):
x = 0.1
for it in range(max_iterations):
x = r * x * (1-x)
if it > skip_iterations:
result_x[i] = x
result_r[i] = r
i += 1
result_x = result_x[result_r != 0].copy()
result_r = result_r[result_r != 0].copy()
return result_x, result_r
result_x, result_r = calc()
# Plot
plt.figure(figsize=(5, 3), dpi=200)
plt.plot(result_r, result_x, ",", color='k')
plt.show()
Notes:
- Remember to
pip install numpy matplotlib numba
numba
is just used to make the calculations faster
Github Gist
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.