[PYTHON] Illustration graphique dynamique (interactive) (Jupyter + ipywidgets interagissent)

Dans de nombreux cas, les illustrations sont efficaces pour résoudre le problème de la programmation concurrentielle. À ce stade, il est souvent plus efficace de modifier la valeur d'entrée. Les interfaces suivantes peuvent être réalisées immédiatement en utilisant jupyter. gif3.gif

Matière

Educational Codeforces Round 80 A.Deadline https://codeforces.com/contest/1288/problem/A Lorsque N, d, x sont des entiers positifs supérieurs ou égaux à 1 et $ d \ leq x , cherchez s'il existe un x qui satisfait ce qui suit. $ n \ geq \ left \ lceil \ frac {d} {x + 1} \ right \ rceil + x $$ où $ \ lceil a \ rceil $ est le plus petit entier supérieur ou égal à a (pas la fonction gaussienne) Oui (par exemple 3,1 pour 4, 3 pour 3)

Illustration statique

Des exemples de NON et OUI dans l'exemple de problème sont présentés respectivement à gauche et à droite. Cela peut être fait immédiatement en utilisant simplement la fonction matplotlib. image.png Le bleu est la ligne de $ y = n $, le jaune est $ y = \ left \ lceil \ frac {d} {x + 1} \ right \ rceil + x $ et le vert est le tracé avant d'appliquer la fonction de plafond.

En montrant de cette manière, on peut voir que OUI / NON est déterminé par l'existence de l'intersection de la ligne bleue et de la ligne jaune. (Bien sûr, cela s'explique par lui-même car c'est une inégalité ...)

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

Illustration dynamique

En utilisant interact, vous pouvez créer un curseur qui déplace n et d de manière variable.

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

Illustration graphique dynamique (interactive) (Jupyter + ipywidgets interagissent)
[PyTorch] Exemple ⑨ ~ Graphique dynamique ~