Lorsque vous dessinez un graphique à partir d'une fonction, vous souhaiterez peut-être voir à quoi ressemble le graphique en modifiant les paramètres. A titre d'exemple, la comparaison entre la solution analytique et la solution numérique des coordonnées de la balle lorsque la balle est lancée verticalement dans le document suivant peut être confirmée en modifiant les paramètres.
Méthode de calcul numérique de la dynamique des fluides apprise avec Python
Ici, le graphique à v0 = 10, 30, 100 est dessiné.
Largeur de temps: Δt, vitesse initiale: v0, hauteur initiale: h0, accélération de gravité: g peut être modifiée avec le curseur. Après avoir changé la variable avec le curseur, dessinez le graphique avec le bouton Soumettre et supprimez le graphique avec le bouton Effacer.
import numpy as np
from matplotlib import pyplot as plt
import PySimpleGUI as sg
layout = [
[
sg.Text(
'delta t',
size=(13, 1)
),
sg.Slider(
(0.01, 1),
0.1,
0.01,
orientation='h',
size=(15, 15),
key='-DELTA T-',
enable_events=True
)
],
[
sg.Text(
'v0',
size=(13, 1)
),
sg.Slider(
(0.01, 100),
10,
0.1,
orientation='h',
size=(15, 15),
key='-V0-',
enable_events=True
)
],
[
sg.Text(
'h0',
size=(13, 1)
),
sg.Slider(
(0, 100),
0,
1,
orientation='h',
size=(15, 15),
key='-H0-',
enable_events=True
)
],
[
sg.Text(
'gravity',
size=(13, 1)
),
sg.Slider(
(0.1, 100),
9.8,
0.1,
orientation='h',
size=(15, 15),
key='-G-',
enable_events=True
)
],
[
sg.Button(
'Submit',
size=(10, 1)
),
sg.Button(
'Clear',
size=(10, 1)
)
]
]
window = sg.Window('Trajectory of ball', layout, location=(0, 0))
Affichez le graphique avec matplotlib. Après avoir créé la zone graphique avec plt.figure et fig.add_subplot (), tournez la boucle principale. Je surveille les événements de l'interface graphique et lorsque j'appuie sur le bouton d'envoi, je lis la valeur du curseur et j'affiche le graphique. De plus, en utilisant plt.pause (), un graphique modifiable est affiché.
fig = plt.figure(figsize=(7, 7), dpi=100)
ax = fig.add_subplot(111)
while True:
event, values = window.read(timeout=0)
if event == "__TIMEOUT__":
continue
#Quitter lorsque le bouton Quitter est enfoncé ou lorsque le bouton de fermeture de fenêtre est enfoncé
elif event in ('Exit', sg.WIN_CLOSED, None):
break
elif event == 'Submit':
dt = values['-DELTA T-']
v0 = values['-V0-']
g = values['-G-']
h0 = values['-H0-']
t1 = ((v0 ** 2 + 2 * g * h0) ** 0.5 + v0) / g
t = np.linspace(0, t1, 100)
h = -0.5 * g * t ** 2 + v0 * t + h0
la, = plt.plot(t, h, color='blue')
# ##########################################################
t = 0
h = h0
# h =Passer à la représentation jusqu'à 0
while h >= 0:
ln = plt.scatter(t, h, marker='o', c='black')
h += (-g * t + v0) * dt
t += dt
#Représentation du graphique
ax.set_xlabel('Time')
ax.set_ylabel('Height')
ax.grid(color='black', linestyle='dashed', linewidth=0.5)
ax.legend(handles=[la, ln], labels=['Analytical', 'Numerical'])
plt.pause(0.1)
# ##########################################################
elif event == 'Clear':
plt.clf()
ax = fig.add_subplot(111)
plt.pause(0.1)
Recommended Posts