Cet article est un article du 11 décembre 2019 dans Calendrier de l'Avent Calcul Numérique 2019, mais c'est presque un poème ...
Soit un espace vectoriel ordonné ($ \ deg V_k = k $). À ce stade, ** série Poancare ** $ P (V; t) $ de $ V $ devrait être la série de puissance formelle suivante.
Soit $ V = \ mathbb {C} [x] $ (anneau polymorphe à une variable à coefficient complexe), et soit $ V_k, \ (k = 0, 1, 2 ...) $ le polypole d'ordre d'ordre $ k $ entier. Essayons-le comme un espace vectoriel. Alors $ \ mathbb {C} [x] $ peut être considéré comme un espace vectoriel avec ordre, mais comme il n'y a qu'une seule variable, le polymorphe synchrone $ k $ degré est $ a_k x ^ k, (a_k \ in \ mathbb {C} Il n'y en a qu'un sous la forme)
Considérons maintenant l'anneau polymorphe à deux variables $ V = \ mathbb {C} [x, y] $. Le composant d'ordre $ k $ $ V_k $ de $ V $ est l'espace vectoriel du polypole d'ordre $ k $ entier comme ci-dessus. Dans ce cas, $ \ dim V_k $ change en fonction de la valeur de $ k $. À la recherche du plus petit
\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}
Et ainsi de suite, vous pouvez voir que $ \ dim V_k = k + 1
\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}
Vous pouvez écrire sous une forme fermée.
De même, que se passe-t-il si $ V = \ mathbb {C} [x, y, z] $, $ V_k $ est un sous-espace couvrant tout le polypole d'ordre d'ordre $ k $? $ V_k $ est basé sur une expression séquentielle de la forme $ x ^ p y ^ q z ^ r $, $ p + q + r = k $.
\frac{(k + 2)!}{k!2!} = \dbinom{k + 2}{2}
Vous pouvez voir qu'il existe différents types
Maintenant, je voudrais calculer le premier terme numérique de la série de puissance pour confirmer que cette formule (★) semble vraiment tenir. Que dois-je faire?
Dans cet article, je vais essayer de calculer en programmant avec Python.
Tout d'abord, vous devez calculer le coefficient binomial sur le côté droit. La bibliothèque Python SciPy a une fonction comb
qui calcule les coefficients binomiaux.
Si vous décidez de l'utiliser pour calculer les 10 premiers termes,
from scipy.special import comb
combinations = [comb(k + 2, k, exact=True) for k in range(10)]
print(combinations)
Tout ce que vous avez à faire est d'exécuter le programme. Le résultat est
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
est devenu.
Maintenant, qu'en est-il du côté gauche?
Expression générale pour l'expansion de Taylor autour de $ 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
Rappelant que, le coefficient est le coefficient différentiel d'ordre $ k $ à $ t = 0 $ sur le côté gauche divisé par $ k! $. Calculons cela en programmant avec Python. Ces calculs mathématiques peuvent être effectués à l'aide d'une bibliothèque appelée SymPy. De même, si vous décidez de calculer jusqu'aux 10 premiers termes, vous devrez calculer le ** différentiel d'ordre 10 (!) **, ce qui est très compliqué par le calcul manuel, mais vous pouvez facilement le trouver en écrivant un programme. Je vais. Le programme actuel est le suivant. (J'ai utilisé «scipy» pour calculer le multiplicateur.)
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)
Le résultat de l'exécution est toujours
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
Il a été confirmé que les coefficients du côté gauche et du côté droit correspondent aux 10 premiers termes de l'expansion de la série de puissance.
Je pensais vaguement que je voulais calculer une telle théorie de combinaison avec un ordinateur, alors je l'ai écrite bien que ce soit très simple.
Recommended Posts