расчет logisti c карта в режиме реального времени пропускает много результатов - PullRequest
0 голосов
/ 04 марта 2020

Множество примеров кода для вычисления функции карты c

logistic map function

используют массивы. Например,

%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")

Это результат:

enter image description here

Однако я пытаюсь построить график функции в реальном времени , Моя попытка приводит к тому, что многие значения пропускаются.

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()

Это выглядит очень плохо.

enter image description here

Кажется, половина данных отсутствуют и точки данных для больших значений r выглядят разреженными. Как я могу перебрать функцию logisti c, чтобы получить все значения для данного r?

1 Ответ

0 голосов
/ 04 марта 2020

Я понял это. По сути, карта логистики c «взрывается» и становится хаотичной c только после того, как она будет повторена несколько раз. Итак, я должен несколько раз выполнить итерацию «молча» (чтобы позволить функции сходиться, если она того пожелает), а затем распечатать следующие несколько повторяющихся значений следующим образом.

import ipywidgets as widgets
%matplotlib notebook 
import numpy as np
import matplotlib.pyplot as plt
import time
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
j=2.5
#for j in [float(j) / 500 for j in range(1250, 2000, 1)]:
while j<4:
    x=0.2
    # for a given value of j, iterate the logistic function 1000x
    for i in range(30):
        y=logistic(j, x)
        x=y
    for i in range(50):
        y=logistic(j, x)
        ax.plot(j,y,'ko',markersize=.2)
        x=y
    #plot the iterated logistic function for a given value of j
    fig.canvas.draw()
    j=j+.01

, что дает

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...