[PYTHON] Spielen Sie mit Poancare-Serien und SymPy

Dieser Beitrag ist ein Artikel für den 11. Dezember 2019 in Adventskalender für numerische Berechnungen 2019, aber es ist fast ein Gedicht ...

Poancare-Serie (lose Definition)

V = \bigoplus_{k = 0}^\infty V_k

Ist ein geordneter Vektorraum ($ \ deg V_k = k $). Zu diesem Zeitpunkt sollte ** Poancare-Reihe ** $ P (V; t) $ von $ V $ die folgende formale Potenzreihe sein. $ P(V; t) := \sum_{k = 0}^\infty (\dim V_k)\ t^k $ Definiert in. Das heißt, eine formale Potenzreihe, in der der Koeffizient jeder Potenz $ k $ von $ t $ gleich der Dimension der zyklischen Komponente $ V_k $ von $ V $ ist.

Beispiel 1. (ein ziemlich einfaches Beispiel)

Sei $ V = \ mathbb {C} [x] $ (komplexer polymorpher polymorpher Ring mit komplexem Koeffizienten) und sei $ V_k, \ (k = 0, 1, 2 ...) $ das gesamte Polypoly der Ordnung der Ordnung Versuchen wir es als Vektorraum. Dann kann $ \ mathbb {C} [x] $ als ein Vektorraum mit Ordnung betrachtet werden, aber da es nur eine Variable gibt, ist das synchrone polymorphe Polymorph $ k $ Grad $ a_k x ^ k (a_k \ in \ mathbb {C}) Es gibt nur eine in Form von) . Mit anderen Worten $ \forall k, \ \ \dim V_k = 1 $$ Es wird sein. Daher ist die Poancare-Reihe $ P (\ mathbb {C} [x]; t) $ von $ \ mathbb {C} [x] $ $ P(\mathbb{C}[x]; t) = \sum_{k = 0}^\infty t^k = 1 + t + t^2 + t^3 + \dots $ Ich finde es. Dies ist die isometrische Zahlenformel $ P(\mathbb{C}[x]; t) = \frac{1}{1 - t} $ Sie können in geschlossener Form schreiben. (Da es sich um eine formale Potenzreihe handelt, schreiben Sie sie so, ohne die Konvergenz zu berücksichtigen.)

Beispiel 2. (Polypolycyclus mit zwei Variablen)

Betrachten Sie nun den polymorphen Ring mit zwei Variablen $ V = \ mathbb {C} [x, y] $. Die $ k $ -Bestellungskomponente $ V_k $ von $ V $ ist der Vektorraum des gesamten $ k $ -Ordnungspolypolys wie oben. In diesem Fall ändert sich $ \ dim V_k $ abhängig vom Wert von $ k $. Blick von der kleineren

\begin{align}
V_0 &= \text{Span}\langle 1 \rangle, \\
V_1 &= \text{Span}\langle x, y\rangle, \\
V_2 &= \text{Span}\langle x^2, xy, y^2\rangle, \\
V_3 &= \text{Span}\langle x^3, x^2y, xy^2, y^3\rangle, \\
&...
\end{align}

Und so weiter können Sie sehen, dass $ \ dim V_k = k + 1 . Deshalb $ P(\mathbb{C}[x, y]; t) = \sum_{k = 0}^\infty (k + 1)t^k $$ ist. Dies kann durch die Verwendung des Begriffs Differenzierung auf gute Weise transformiert werden.

\begin{align}
P(\mathbb{C}[x, y]; t) &= \sum_{k = 0}^\infty \frac{d}{dt}t^{k + 1} \\
&= \frac{d}{dt} \left( t \sum_{k = 0} t^{k} \right) = \frac{d}{dt} \frac{t}{1 - t} = \frac{1}{(1 - t)^2}
\end{align}

Sie können in geschlossener Form schreiben.

Beispiel 3. (3-variabler Polypolycyclus)

Was ist in ähnlicher Weise, wenn $ V = \ mathbb {C} [x, y, z] $, $ V_k $ ein Unterraum ist, der das gesamte Polypoly $ k $ order-order umfasst? $ V_k $ basiert auf einem sequentiellen Ausdruck der Form $ x ^ p y ^ q z ^ r $, $ p + q + r = k $.

\frac{(k + 2)!}{k!2!} = \dbinom{k + 2}{2}

Sie können sehen, dass es verschiedene Typen gibt $ P(\mathbb{C}[x, y, z]; t) = \sum_{k = 0}^\infty \dbinom{k + 2}{2} t^k $ Es wird sein. Kann dies nun in geschlossener Form geschrieben werden? Es scheint, dass Sie es verstehen können, wenn Sie den Begriff Differenzierung noch einmal betrachten, aber dieses Mal werde ich eine etwas andere Methode betrachten. $ \frac{1}{(1 - x)(1 - y)(1 - z)} = \sum_{p = 0}^\infty x^p \sum_{q = 0}^\infty y^q \sum_{r = 0}^\infty z^r = \sum_{p, q, r = 0}^\infty x^p y^q z^r $ In Anbetracht der Reihe erscheint die Basis $ x ^ p y ^ q z ^ r $ von $ \ mathbb {C} [x, y, z] $ genau einmal auf der rechten Seite. $ k $ Der Teil der nächsten Bestellung ist $ x ^ {p_1} y ^ {q_1} z ^ {r_1} + x ^ {p_2} y ^ {q_2} z ^ {r_2} + ... + x ^ {p_N} y ^ {q_N} z ^ {r_N} $ ergibt $ p_i + q_i + r_i = k, \ (i = 1, 2, ..., N, \ \ N = \ dim (V_k)) $ Ich bin. Wenn Sie hier $ x = y = z = t $ einsetzen, hat dies genau die Form von $ (1 + 1 + ... + 1) t ^ k = \ dim (V_k) \ t ^ k $ $ P(\mathbb{C}[x, y, z]; t) = \frac{1}{(1 - t)(1 - t)(1 - t)} = \frac{1}{(1 - t)^3} $ Es stellte sich heraus. Mit anderen Worten $ \frac{1}{(1 - t)^3} = \sum_{k = 0}^\infty \dbinom{k + 2}{2} t^k \ \ \ \ \cdots \ (★) $ ist. (Wie Sie bisher erraten können, gilt für allgemein $ n $ $ P (\ mathbb {C} [x_1, ..., x_n]; t) = \ dfrac {1} {(1-t) ^ n }} Es wird $ sein. )

Numerische Berechnung (?)

Nun möchte ich durch die Berechnung des ersten numerischen Terms der Potenzreihe bestätigen, dass diese (★) Formel wirklich zu gelten scheint. Was soll ich tun?

In diesem Artikel werde ich versuchen, durch Programmieren mit Python zu berechnen.

Zunächst sollten Sie den Binomialkoeffizienten auf der rechten Seite berechnen. Die Python-Bibliothek SciPy hat eine Funktion "Kamm", die Binomialkoeffizienten berechnet. Wenn Sie dies verwenden, um bis zu den ersten 10 Begriffen zu berechnen,

from scipy.special import comb
combinations = [comb(k + 2, k, exact=True) for k in range(10)]
print(combinations)

Alles was Sie tun müssen, ist das Programm auszuführen. Ergebnis ist

[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

ist geworden.

Was ist nun mit der linken Seite?

Allgemeiner Ausdruck für die Taylor-Expansion um $ t = 0 $

f(t) = f(0) + f'(0)t + \frac{1}{2!}f''(0)t^2 + \frac{1}{3!}f'''(0)t^3 + ... = \sum_{k=0}^\infty \frac{1}{k!} \frac{d^kf(0)}{dt^k}t^k

Unter Hinweis darauf ist der Koeffizient der Differenzkoeffizient der Ordnung $ k $ bei $ t = 0 $ auf der linken Seite geteilt durch $ k! $. Berechnen wir dies durch Programmieren mit Python. Solche mathematischen Berechnungen können mit einer Bibliothek namens SymPy durchgeführt werden. Wenn Sie sich entscheiden, bis zu den ersten 10 Termen zu berechnen, müssen Sie das Differential 10. Ordnung (!) ** berechnen, was durch manuelle Berechnung sehr kompliziert ist, aber Sie können es leicht finden, indem Sie ein Programm schreiben. Ich werde. Das eigentliche Programm ist wie folgt. (Ich habe "scipy" verwendet, um den Multiplikator zu berechnen.)

from sympy import *
from scipy.special import factorial
t = Symbol('t')
P = 1 / (1 - t) ** 3
coeffs = []
for k in range(10):
    dk = diff(P, t, k).subs([(t, 0)])
    coeff = dk / factorial(k, exact=True)
    coeffs.append(coeff)

print(coeffs)

Das Ausführungsergebnis ist noch

[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

Es wurde bestätigt, dass die Koeffizienten auf der linken und rechten Seite mit den ersten 10 Termen der Potenzreihenerweiterung übereinstimmen.


Impressionen

Ich dachte vage, dass ich eine solche Kombinationstheorie mit einem Computer berechnen wollte, also schrieb ich sie, obwohl sie sehr einfach ist.

Verweise

Recommended Posts

Spielen Sie mit Poancare-Serien und SymPy
Mehrfachintegration mit Python und Sympy
Fraktal zum Erstellen und Spielen mit Python
Spielen Sie mit PDBBind von MoleculeNet und RDKitGridFeaturizer von DeepChem
Laden Sie csv mit Pandas und spielen Sie mit Index
Spiel mit dem Propheten
Spiele mit PyTorch
Spielen Sie mit 2016-Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
Verstehe Gitterpunkte und spiele mit Konturlinien.
Spiel mit Othello (Reversi)
Lösen Sie simultane normale Differentialgleichungen mit Python und SymPy.
So schleifen und spielen Sie ein GIF-Video mit openCV ab
Überlagern Sie Diagramme mit Sympy
Mit und ohne WSGI
Mach dir mit Sympy keine Sorgen
[How to!] Lerne und spiele Super Mario mit Tensorflow !!
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
BASIC und C sowie Assembler-Geschwindigkeitsvergleich und -optimierung spielen mit IchigoJam
Spielen Sie mit Mastodons Archiv in Python 2 Count Antworten und Favoriten
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Bei mir cp und Subprocess
[Python] Löse Gleichungen mit Sympy
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Spielen wir mit der 4. Dimension der 4. Dimension
Spielen wir mit Amedas Daten - Teil 1
Arbeiten Sie mit tkinter und Maus
Python und Hardware-Verwenden von RS232C mit Python-
Spielen Sie mit Push-Benachrichtigungen mit imap4lib
Spielen Sie mit Linux-Partitionen herum
Bewegungsgleichung mit Sympy
Spielen wir mit Amedas Daten - Teil 4
Spielen Sie mit Jupyter Notebook (IPython Notebook)
[Python] Spielen Sie mit Discords Webhook.
Super Auflösung mit SRGAN und ESRGAN
Group_by mit sqlalchemy und sum
Spielen wir mit Amedas Daten - Teil 3
Python mit Pyenv und Venv
Spielen wir mit Amedas Daten - Teil 2
Spielen Sie mit dem MD-Modul von ASE
Mit mir, NER und Flair
Funktioniert mit Python und R.
Spielen Sie mit A3RT (Textvorschlag)
Spielen Sie mit statistischer Modellierung: Quantifizieren Sie die Stärke von J-League-Teams mit Stan und Python