[PYTHON] Créons facilement un gif mathématique en utilisant Google Colaboratory

Dans cet article, nous allons créer un gif mathématique avec Google Colaboratory. Résolvons l'équation de Coltveg-Doffreys qui décrit une onde non linéaire par calcul numérique et voyons que Soliton apparaît. kdv_pseudo_spec_impl_rc.gif

1. Utilisez Google Colaboratory

Avec Google Colaboratory, vous pouvez travailler avec Python au format notebook sans avoir à installer quoi que ce soit sur votre PC (tant que vous disposez d'une connexion Internet).

Dans l'article précédent [Faisons un gif mathématique facilement en utilisant Python- @ wakabame] [1], il y avait une procédure pour construire un environnement, mais ce n'est plus nécessaire. Le code est également exécuté sur le serveur cloud de Google, vous pouvez donc utiliser gratuitement les ressources informatiques.

Il existe d'autres fonctionnalités, veuillez donc vous référer à la documentation officielle pour plus de détails. https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

2. Calculons la valeur numérique de l'équation de Coltweg-Doffreys

Cette section est basée sur [Calcul numérique de l'équation KdV par méthode pseudo-spectrale - sans essayer de le faire] [2].

Un problème de valeur limite de valeur initiale qui décrit le mouvement de la hauteur des vagues d'eau peu profonde $ u , appelé l'équation de Coltveg-Doffreys. $ \begin{cases} &u_t + \alpha u u_x + \beta u_{xxx} = 0, \quad & t>0, x \in (0, L),\\ &u(t,0) = u(t,L),\quad &t>0,\\ &u(0,x) = u_0(x), \quad &x \in (0,L) \end{cases} $$ Penser à. Où $ L $, $ \ alpha $, $ \ beta $ sont des constantes positives et les paramètres lorsque Zabsky Kurskull découvre une onde isolée $ L = 2.0 $, $ \ alpha = 1.0 $, $ \ beta = Supposons que ce soit 0,022 ^ 2 $ et que la valeur initiale soit donnée par $ u_0 (x) = \ cos (\ pi x) $.

Dans le calcul numérique, $ u_x $ et $ u_ {xxx} $ sont calculés par transformée de Fourier en utilisant diff of scipy.fftpack dans la direction spatiale. D'un autre côté, nous nous disperserons dans le sens du temps et utiliserons la méthode résoudre_ivp de scipy.integrate pour trouver la solution numérique au prochain pas de temps par la méthode implicite Runge-Kutta.

Importer les bibliothèques requises

import numpy as np
from numpy import pi, cos, linspace, arange
from numpy.fft import rfft, irfft
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
from scipy.integrate import solve_ivp
from scipy.fftpack import diff as psdiff

Réglage des paramètres et des valeurs initiales

# Constant in Zabusky & Kruskal (1965)
DELTA = 0.022 ** 2
L = 2.0 # width of line domain

N = 256 # step width for spatial variable
T = 10 # last time
dt = 1.0e-2 # step width for time variable

# initial condition
x = linspace(0.0, L, N, endpoint=False)
u0 = cos(pi*x)

Calcul de $ u_t $ par transformée de Fourier

def kdv(t, u):
    conv = u * psdiff(u, period=L)
    disp = DELTA * psdiff(u, period=L, order=3)
    dv = - conv - disp
    return dv

Calcul des solutions numériques par la méthode implicite Rungekutta

t = np.arange(0, T, dt)
sol = solve_ivp(kdv, [0, T], u0, method='Radau', t_eval=t)

3. Visualisons

Cette section est basée sur [Visualiser la méthode de descente de gradient sur Google Colaboratory- @ yaju] [3].

Préparation de la solution numérique

La solution obtenue «sol.y» est un tableau bidimensionnel disposé dans l'ordre de «[espace] [temps]», donc il doit être transposé en «U [t] [x]».

U = sol.y.T
frames = len(U)

Visualisation avec notebook

Lors de la visualisation dans un cahier, il est facile de voir en vérifiant à partir de HTML de ʻIPython.display`. Cependant, sur Colaboratory, la connexion est coupée lorsqu'une grande quantité de mémoire est consommée dans une cellule (?), Le cadre gif est donc réduit pour tenir dans environ 200. 012258.png

%matplotlib inline
fig = plt.figure()
fig.set_dpi(100)
ax = fig.add_subplot(1,1,1)
def animate(t):
    ax.clear()
    plt.ylim([-1.2, 3.0])
    p, = plt.plot(x, U[5*t])
anim = animation.FuncAnimation(fig, animate, frames=frames//5, interval=100, repeat=False)
HTML(anim.to_jshtml())

Exporter un fichier gif

Lors de l'exportation d'un fichier gif, l'option writer =" oreiller " vous permet de le sortir presque sans aucune modification. Lorsque l'exportation est terminée, ouvrez l'onglet sur la gauche et vous trouverez le fichier gif enregistré sur le lecteur, alors faites un clic droit et téléchargez

012221.png

fig = plt.figure()
fig.set_dpi(100)
ax = fig.add_subplot(1,1,1)
def animate(t):
    ax.clear()
    plt.ylim([-1.2, 3.0])
    p, = plt.plot(x, U[5*t])
anim = animation.FuncAnimation(fig, animate, frames=frames//5, interval=100, repeat=False)
anim.save("kdv_pseudo_spec_impl_rc.gif", writer="pillow")

Ce bloc-notes est disponible à l'adresse kdv.ipynb. Si vous avez des commentaires, n'hésitez pas à nous contacter. [1]:https://qiita.com/wakabame/items/c3648501eb0f2b921ddf [2]:https://iqujack-lequina.hatenablog.com/entry/2018/05/02/%E6%93%AC%E3%82%B9%E3%83%9A%E3%82%AF%E3%83%88%E3%83%AB%E6%B3%95%E3%81%AB%E3%82%88%E3%82%8BKdV%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97 [3]:https://qiita.com/yaju/items/42d43d6d6cf6910e8701

Recommended Posts

Créons facilement un gif mathématique en utilisant Google Colaboratory
Créez un classificateur en cascade avec Google Colaboratory
Faisons un site multilingue en utilisant flask-babel
Faisons un module pour Python en utilisant SWIG
Faisons un robot Discord.
Faire une impression de forage de calcul
Créons un bot LINE en utilisant divers services [ngrok edition]
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Faisons une rumba distante [Matériel]
Faisons une rumba distante [Logiciel]
Faisons une interface graphique avec python.
Faisons un service de vente au comptant 2
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Faisons une rupture de bloc avec wxPython
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Faisons un service de vente au comptant 3
J'ai fait une note du colaboratoire Google qui peut utiliser Spleeter facilement.
Créez facilement un serveur DNS en utilisant Twisted
Faisons un jeu de shiritori avec Python
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Notes de traitement habituelles lors de l'utilisation de Google Colaboratory
Faisons la voix lentement avec Python
Faisons un langage simple avec PLY 1
Utilisation du noyau Jupyter de Java avec Google Colaboratory
Créer une animation GIF avec surveillance des dossiers
Créez un framework Web avec Python! (1)
Faisons une IA à trois yeux avec Pylearn 2
Faisons un calcul de combinaison avec Python
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Faisons un plug-in backend pour Errbot
Collaboratoire Google
Créer un fichier GIF en utilisant Pillow en Python
Écrivons la classe __str__ plus facilement en utilisant lambda!
Créons une API REST en utilisant SpringBoot + MongoDB
Remplaçons UWSC par Python (5) Faisons un robot
[Chat De Tornado] Créez un chat en utilisant WebSocket dans Tornado
J'ai créé un jeu ○ ✕ avec TensorFlow