[PYTHON] Dynamische (interaktive) Diagrammdarstellung (Jupyter + ipywidgets interagieren)

In vielen Fällen lösen die Abbildungen das Problem der wettbewerbsfähigen Programmierung. Zu diesem Zeitpunkt ist es oft effektiver, den Eingabewert zu ändern. Die folgenden Schnittstellen können mit jupyter sofort realisiert werden. gif3.gif

Gegenstand

Educational Codeforces Round 80 A.Deadline https://codeforces.com/contest/1288/problem/A Wenn N, d, x positive ganze Zahlen größer oder gleich 1 und $ d \ leq x $ sind, finden Sie heraus, ob es ein x gibt, das die folgenden Anforderungen erfüllt. $ n \ geq \ left \ lceil \ frac {d} {x + 1} \ right \ rceil + x $ wobei $ \ lceil a \ rceil $ die kleinste ganze Zahl ist, die größer oder gleich a ist (nicht die Gaußsche Funktion) Ja (zB 3.1 für 4, 3 für 3)

Statische Darstellung

Beispiele für NEIN und JA im Beispielproblem sind links bzw. rechts dargestellt. Dies kann sofort durch einfaches Verwenden der matplotlib-Funktion erfolgen. image.png Blau ist die Linie von $ y = n $, Gelb ist $ y = \ left \ lceil \ frac {d} {x + 1} \ right \ rceil + x $ und Grün ist das Diagramm vor dem Anwenden der Deckenfunktion.

Durch diese Darstellung ist ersichtlich, dass JA / NEIN durch das Vorhandensein des Schnittpunkts der blauen und der gelben Linie bestimmt wird. (Natürlich ist dies selbsterklärend, weil es eine Ungleichung ist ...)

%matplotlib inline
import matplotlib.pyplot as plt
from ipywidgets import interact
import numpy as np

fig, (axL, axR) = plt.subplots(ncols=2, figsize=(10,4))

n,d = 5,11
xaxis = yaxis = 8
x = np.linspace(1, n, num = 100)
y1 = [n] *100
y2 = np.ceil(d / (x + 1) ) + x
y3 = d / (x + 1) + x
axL.plot(x, y1)
axL.plot(x, y2)
axL.plot(x, y3)
axL.set_xlim(0, xaxis)
axL.set_ylim(0, yaxis)
axL.grid(True)

n2,d2 = 5,4
xaxis = yaxis = 8
x2 = np.linspace(1, n2, num = 100)
y21 = [n2] *100
y22 = np.ceil(d2 / (x2 + 1) ) + x2
y23 = d2 / (x2 + 1) + x2
axR.plot(x2, y21)
axR.plot(x2, y22)
axR.plot(x2, y23)
axR.set_xlim(0, xaxis)
axR.set_ylim(0, yaxis)
axR.grid(True)

fig.show()

Dynamische Darstellung

Mit Interact können Sie einen Schieberegler erstellen, der n und d variabel bewegt.

gif2.gif

%matplotlib inline
import matplotlib.pyplot as plt
from ipywidgets import interact
import numpy as np

d = 20
n = 20
import math

xaxis = yaxis = 20
nlimit = 20
dlimit = 100

@interact(n=(1, nlimit), d = (1,dlimit))
def f(n, d):
    x = np.linspace(1, n, num = 100)
    y1 = [n] * 100
    y2 = np.ceil(d / (x + 1) ) + (x)
    y3 = d / (x + 1) + x
    plt.xlabel("x-axis")
    plt.ylabel(" y-axis")
    plt.plot(x, y1)
    plt.plot(x, y2)
    plt.plot(x, y3)
    plt.xlim(0, xaxis)
    plt.ylim(0, yaxis)
    plt.grid(True)
    plt.figure(figsize=(1,1))
    plt.show()

Recommended Posts

Dynamische (interaktive) Diagrammdarstellung (Jupyter + ipywidgets interagieren)
[PyTorch] Beispiel ⑨ ~ Dynamischer Graph ~