[PYTHON] Créez l'environnement de calcul le plus puissant avec Sympy + Jupyter

Créons l'environnement de calcul le plus puissant avec Sympy + Jupyter.

Qu'est-ce que Sympy?

Sympy est une bibliothèque algébrique écrite en Python, pensez-y comme Mathematica ou Maxima. C'est plus facile à utiliser pour les programmeurs car ils peuvent écrire des formules en Python, la page ci-dessous est une excellente introduction à Sympy, si vous ne connaissez pas Sympy, veuillez la lire.

3.2. Sympy: calcul algébrique en Python

Utiliser Sympy de Jupyter

Vous n'avez rien à faire de spécial, mais tapez «magie» pour afficher les formules et les graphiques dans la première cellule de Jupyter.

from sympy import *
init_printing()

Ensuite, tapons la formule.

x = Symbol('x')
y = Symbol('y')
Rational(3 ,2)*pi + exp(I*x) / (x**2 + y)
\frac{3 \pi}{2} + \frac{e{i x}}{x{2} + y}

Si la formule sort, c'est réussi.

Untitled - Google Chrome_021.png

À propos de init_session ()

D'après les informations de @ void99_, il y a quelque chose appelé ʻinit_session qui est plus sophistiqué que ʻinit_printing.

from sympy import *
init_session()

Les variables et fonctions fréquemment utilisées sont prédéfinies, ce qui est pratique.

IPython console for SymPy 1.0 (Python 3.5.2-64-bit) (ground types: python)

These commands were executed:
>>> from __future__ import division
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function)
>>> init_printing()

Documentation can be found at http://docs.sympy.org/1.0/

Paramètres des symboles

Les symboles de formule peuvent être définis avec «Symbole».

x = Symbol('x')
y = Symbol('y')

Plusieurs symboles peuvent être définis à la fois à l'aide de «symboles».

x, y = symbols("x y")

Il peut également être défini en utilisant le module sympy.abc.

from sympy.abc import x, y

Simplification des formules

La fonction la plus pratique lorsque vous la manipulez comme une calculatrice est de simplifier la formule. Si vous pétrissez la formule, vous pouvez créer une formule très longue, mais si vous utilisez Sympy, c'est un seul coup.

Par exemple, supposons que vous ayez la formule suivante: Cette formule est probablement une formule de courbe de Bézier ou quelque chose que j'ai malaxé.

(A-B)*C + B**2 + (-B-A)*C + B**2

Écrit en Sympy, il ressemble à ceci:

from sympy.abc import A, B, C
f = (A-B)*C + B**2 + (-B-A)*C + B**2
2 B^{2} + C \left(- A - B\right) + C \left(A - B\right)

La substitution d'une expression dans Sympy triera les termes pour plus de clarté. Si vous souhaitez simplifier davantage la formule, utilisez simpfly.

simplify(f)
2 B \left(B - C\right)

«A» a disparu et c'est devenu extrêmement simple. Vous pouvez également utiliser ratsimp, qui est souvent utilisé dans Maxima.

ratsimp(f)
2 B^{2} - 2 B C

Il existe de nombreux types de simplifications de formules, voir ci-dessous pour plus de détails.

http://docs.sympy.org/dev/modules/simplify/simplify.html

Résous l'équation

from sympy.abc import A, B, C, D

(A-B)*D + C**2 + (-B-A)*C+B**2
B^{2} + C^{2} + C \left(- A - B\right) + D \left(A - B\right)

Si vous voulez résoudre «A» dans la formule ci-dessus, utilisez «résoudre».

solve((A-B)*D + C**2 + (-B-A)*C+B**2, A)
\left [ \frac{1}{C - D} \left(B^{2} - B C - B D + C^{2}\right)\right ]

Attribuer une valeur à une variable dans une expression

Vous pouvez affecter une valeur à une variable dans une expression avec subs.

f = (A-B)*D + C**2 + (-B-A)*C+B**2

# A,B,Attribuer une valeur à C
f.subs([(A, 10), (B, 20), (C, 30)])
- 10 D + 400

L'argument de subs peut également être passé dans un dictionnaire.

f.subs({A: 10, B: 20, C: 30})
- 10 D + 400

S'il n'y a qu'une seule variable que vous souhaitez affecter, vous pouvez spécifier une variable dans le premier argument et une valeur dans le second argument.

f.subs(A, 10)
B^{2} + C^{2} + C \left(- B - 10\right) + D \left(- B + 10\right)

Différenciation / différenciation partielle

Utilisez diff pour la différenciation / la différenciation partielle.

diff(x**2 + 3*x + 100)
2 x + 3

Pour une différenciation partielle, spécifiez le deuxième argument.

diff(3*x**2 + 3*x*y + y**2, x)
6 x + 3 y

Affacturage / Affacturage Prime

L'affacturage utilise «factor».

factor(x**2-x-6)
\left(x - 3\right) \left(x + 2\right)

Utilisez factor int pour la factorisation des nombres premiers.

factorint(3417)
>>> {3:1,17:1,67:1}

Le dictionnaire est renvoyé, ce qui signifie «3 ^ 1 * 17 ^ 1 * 67 ^ 1 = 3417».

Matrice / vecteur

Utilisez la classe Matrix.

Matrix([[1, 0], [0, 1]])
\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]

Il existe des vecteurs, mais ils sont difficiles à utiliser, ils sont donc traités comme une matrice à une colonne.

θ = Symbol("θ")

P = Matrix([2*cos(θ), 2*sin(θ)])
\left[\begin{matrix}2 \cos{\left (θ \right )}\\2 \sin{\left (θ \right )}\end{matrix}\right]

Si vous voulez calculer un vecteur, utilisez la fonction transpose pour le transposer.

transpose(P) * P
\left[\begin{matrix}4 \sin^{2}{\left (θ \right )} + 4 \cos^{2}{\left (θ \right )}\end{matrix}\right]

Copiez et collez des formules dans Latex

Avec Jupyter et Sympy, vous pouvez facilement copier les formules de sortie dans Qiita. Cliquez avec le bouton droit sur la formule et sélectionnez Afficher les mathématiques comme → Commandes Tex.

メニュー_013.png

Un pop-up comme celui-ci apparaîtra, alors copiez et collez la formule.

MathJax Equation Source - Google Chrome_015.png

Ce Latex est pratique car il peut être collé directement sur Qiita.

Formule de sortie avec AA

Si vous utilisez pprint, est-ce de l'art ASCII? Vous pouvez également générer des formules avec.

pprint(Integral(sqrt(1/x), x), use_unicode=True)
"""
⌠           
⎮     ___   
⎮    ╱ 1    
⎮   ╱  ─  dx
⎮ ╲╱   x    
⌡  
"""

Il est pratique de coller des formules dans le code source.

Ecrire un graphique

Vous pouvez dessiner un graphique avec sympy.plotting.plot. C'est pratique car vous pouvez passer la formule de Sympy telle quelle en argument.

from sympy.plotting import plot

y = -(x+2)*(x+1)*(x-1)

#x est-Tracez un graphique de 4 à 4
plot(y, (x, -4, 4))

ダウンロード (9).png

Démarrez rapidement avec un modèle .ipynb

Jupyter + Sympy est très pratique, mais vous devez taper «magic» à chaque fois dans la première cellule. C'est étonnamment gênant, n'est-ce pas?

Dans mon article, il y a Generate Jupyter notebook ".ipynb" in Python. En utilisant ceci, écrivons un script qui génère ipynb qui a été entré depuis le début.

Coopération entre Jupyter et PyCharm

PyCharm est un environnement de développement intégré (IDE) Python, qui possède des fonctions complémentaires très puissantes et est l'environnement de développement Python le plus puissant. En fait, PyCharm peut être lié à Jupyter, et le pouvoir expressif de Jupyter + la puissante fonction complémentaire de PyCharm est assez confortable.

メニュー_011.png

Cependant, lorsqu'il s'agit de formules mathématiques, la sortie Jupyter de PyCharm est médiocre, il est donc préférable d'utiliser la version navigateur de Jupyter. Donc je n'utilise pas Jupyter de PyCharm, j'utilise plutôt ʻExtranal Tools`.

Créer un script de génération .ipynb

Créez le script suivant à un endroit facile à consulter.

#!/usr/bin/env python3
# coding:utf-8
import sys
import os
import nbformat

output_dir = sys.argv[1]
output_file = input("input ipynb name:")

nb = nbformat.v4.new_notebook()

title = "#Titre"

code = """
%matplotlib inline
from sympy import *
init_session()
"""

nb["cells"] = [
    nbformat.v4.new_markdown_cell(title),
    nbformat.v4.new_code_cell(code)
]

if not output_file.endswith(".ipynb"):
    output_file += ".ipynb"

with open(os.path.join(output_dir, output_file), "w") as f:
    nbformat.write(nb, f)

print("ok.")

S'inscrire en tant qu'outil externe pour PyCharm

Ouvrez le menu "Fichier (F)" de PyCharm et sélectionnez "Paramètres ...".

メニュー_016.png

Sélectionnez "Outils" -> "Outils externes" dans la boîte de dialogue des paramètres et appuyez sur le bouton "+".

Settings_017.png

La boîte de dialogue de configuration apparaîtra, alors ajoutez les éléments suivants.

article contribution
Name Veuillez saisir un nom approprié
Description Veuillez saisir une explication appropriée
Program Chemin Python où Jupyter est installé
Parameters Le chemin du script antérieur$FileDir$

Edit Tool_018.png

.Ipynb peut maintenant être généré à partir du menu contextuel de PyCharm!

Sélectionnez "External Toos" -> "Registered Tool Name" dans le menu contextuel de PyCharm.

メニュー_019.png

Lorsque vous entrez le nom du fichier dans la console, divers fichiers .ipynb pré-remplis seront générés depuis le début.

python35 - [~-PycharmProjects-python35] - ...-document-document.ipynb - PyCharm Community Edition 2016.3.2_020.png

Si vous avez un moyen plus pratique de l'utiliser, veuillez le poster.

Épilogue

La sortie de .ipynb était plus longue que Sympy, mais Sympy est très utile.

Idéal pour les programmeurs de jeux et ceux qui utilisent des formules. C'est une bibliothèque que les personnes qui ne sont pas douées en mathématiques devraient absolument utiliser.

Recommended Posts

Créez l'environnement de calcul le plus puissant avec Sympy + Jupyter
Créer un environnement avec virtualenv
Changer d'environnement virtuel avec jupyter
Refléter l'environnement virtuel créé par Miniconda dans le notebook Jupyter
Construction d'un environnement Jupyter facile avec Cloud9
Créez un environnement virtuel avec Python!
Préparez l'environnement de développement avec anyenv
Bénéficiez de l'environnement le plus puissant avec VS Code, Remote-Containers et Remote Docker-Daemon
Créez un environnement d'apprentissage automatique arbitraire avec GCP + Docker + Jupyter Lab
Créer un environnement Jupyter Lab (Python) avec Docker
[Python] Créez un environnement virtuel avec Anaconda
Créer un graphique à l'aide du module Sympy
Créer un environnement d'exécution pour Jupyter Lab
Créer un environnement Python + uWSGI + Nginx avec Docker
L'environnement de développement Python le plus puissant Recommandation de PyCharm
L'environnement de développement intégré Python le plus puissant PyCharm
nb_conda_kernels est recommandé si vous souhaitez entrer dans l'environnement virtuel avec jupyter
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
Construire un environnement d'analyse avec Docker (jupyter notebook + PostgreSQL)
Environnement d'exécution sur le Web par "Project Jupyter"
Créez un environnement d'exécution pour chaque langue avec boot2docker
Créer un environnement virtuel avec conda avec Python
Créer un environnement de construction python3 avec Sublime Text3
Essayez d'utiliser l'environnement virtuel conda avec Jupyter Notebook
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Remplissez la largeur du bloc-notes Jupyter pour remplir le navigateur
J'ai essayé de jouer avec la calculatrice avec tkinter
Créez un outil de traduction avec Translate Toolkit
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Comment créer un sous-menu avec le plug-in [Blender]
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Créez un environnement virtuel avec Anaconda installé via Pyenv
Surveiller le modèle d'entraînement avec TensorBord sur Jupyter Notebook
Essayez de créer une application Todo avec le framework Django REST
L'environnement de développement PySide / PyQt le plus puissant est également PyCharm
Créez un environnement de développement python avec vagrant + ansible + fabric
environnement en ligne de serveur de code (2) Créer un réseau virtuel avec Boto3
Un moyen simple de créer un module d'importation avec jupyter
Créez une carte thermique de tweet avec l'API Google Maps
Préparation de l'environnement d'exécution de PyTorch avec Docker Novembre 2019
Créez un environnement Open AI Gym avec Bash sur Windows 10
Installez Ubuntu 20.04 avec GUI et préparez l'environnement de développement
Créer un environnement OCR japonais avec Anaconda (tesseract + pyocr)
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
[Venv non requis] L'environnement de développement Python le plus puissant créé avec des conteneurs distants [VS Code / Docker]
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS avec Anaconda