Множество примеров кода для вычисления функции карты c
используют массивы. Например,
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
def logistic(r, x):
return r * x * (1 - x)
n = 1000
r = np.linspace(2.5, 4., n)
iterations = 1000
last = 900
x = 1e-5 * np.ones(n)
fig, ax1 = plt.subplots(figsize=(8, 8))
for i in range(iterations):
x = logistic(r, x)
if i >= (iterations - last):
ax1.plot(r, x, ',k', alpha=.25)
ax1.set_xlim(2.5, 4)
ax1.set_title("Bifurcation diagram")
Это результат:
Однако я пытаюсь построить график функции в реальном времени , Моя попытка приводит к тому, что многие значения пропускаются.
import ipywidgets as widgets
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
def logistic(r, s):
return r * s * (1 - s)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion()
fig.show()
fig.canvas.draw()
#j goes from 2.5 to 4
for j in [float(j) / 100 for j in range(250, 400, 1)]:
x=0.2
# for a given value of j, iterate the logistic function 1000x
for i in range(1000):
y=logistic(j, x)
x=y
#plot the iterated logistic function for a given value of j
ax.plot(j,y,'ko',markersize=1)
fig.canvas.draw()
Это выглядит очень плохо.
Кажется, половина данных отсутствуют и точки данных для больших значений r выглядят разреженными. Как я могу перебрать функцию logisti c, чтобы получить все значения для данного r?