Pertubationstheorie in Sagemath
Ich habe die Dokumentation zum Abschneiden von Polynomen mit Salbei gesehen, bin aber nicht sicher, wie ich dies in meiner Arbeit tatsächlich anwenden kann ...
Ich versuche gerade, den ... sagen Ricci-Tensor für einen gestörten metrischen Tensor zu finden. Das Hinzufügen der kleinen Menge an freien Skalaren (in diesem Fall 2) erhöht die Rechenzeit um ein Vielfaches, da Sage derzeit versucht, die Lösung GENAU zu berechnen. Das Problem ist, ich brauche keine genaue Lösung, nur eine Lösung erster Ordnung. Wenn Sie diese Berechnungen von Hand durchführen, ist es einfach, nicht benötigte Begriffe wegzuwerfen, da sie quadratisch oder höher sind, aber ich möchte dies mit Salbei tun können ... Grundsätzlich möchte ich wissen, ob ich kann Weisen Sie den Weisen an, während der Berechnung Terme höherer Ordnung wegzuwerfen, damit die Rechenzeit abnimmt.
PS: Ich habe versucht, symbolische Ringe zu verwenden $\mathcal{O}$ Notation und dies funktioniert perfekt für Funktionen, aber dies funktioniert nicht, wenn versucht wird, dies mit einer Lorentzschen Metrik zusammenzuführen.
Zum Beispiel, wenn meine Störungen sind $\psi$ und $\zeta$ Ich möchte nicht, dass der Weise Begriffe berücksichtigt, die insgesamt sind $\zeta$$\ psi $ oder $ \ zeta ^ 2 $ oder $ \ psi ^ 2 $ usw.
Antworten
Sie können dies erreichen, indem Sie einen kleinen Parameter einführen $\epsilon$und mit set_calc_order. Hier ist ein Beispiel für die Berechnung des Ricci-Skalars für eine gestörte Schwartzchild-Metrik$\mathcal{O}(\epsilon^2)$.
Stellen Sie zuerst den Verteiler in Salbei auf:
%display latex
M = Manifold(4, 'M', latex_name=r'\mathcal{M}', structure='Lorentzian')
chart.<t,r,th,ph> = M.chart(r"t r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
m = var('m')
assume(m > 0)
Führen Sie einen symbolischen infinitesimalen Parameter ein:
eps = var('epsilon')
Definieren Sie die Metrik (oder das Skalarfeld oder was auch immer Sie wollen) mit eps:
g = M.metric()
g[0,0] = -(1-2*m/r) + eps
g[1,1] = 1/(1-2*m/r) + eps
g[2,2] = r^2
g[3,3] = (r*sin(th))^2
g.display()
$$\newcommand{\Bold}[1]{\mathbf{#1}}g = \left( \epsilon + \frac{2 \, m}{r} - 1 \right) \mathrm{d} t\otimes \mathrm{d} t + \left( \epsilon - \frac{1}{\frac{2 \, m}{r} - 1} \right) \mathrm{d} r\otimes \mathrm{d} r + r^{2} \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + r^{2} \sin\left({\theta}\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$$
Der vollständige Ricci-Skalar ohne Kürzung lautet:
ricci = g.ricci_scalar()
ricci.expr().factor()
$$\newcommand{\Bold}[1]{\mathbf{#1}}\frac{2 \, {\left(4 \, \epsilon^{3} m^{2} r^{2} - 4 \, \epsilon^{3} m r^{3} + \epsilon^{3} r^{4} + 16 \, \epsilon^{2} m^{3} r - 28 \, \epsilon^{2} m^{2} r^{2} + 12 \, \epsilon^{2} m r^{3} - \epsilon^{2} r^{4} + 16 \, \epsilon m^{4} - 48 \, \epsilon m^{3} r + 32 \, \epsilon m^{2} r^{2} - 4 \, \epsilon m r^{3} - \epsilon r^{4} - 12 \, m^{4} + 12 \, m^{3} r + 2 \, m^{2} r^{2} - 4 \, m r^{3} + r^{4}\right)} \epsilon}{{\left(2 \, \epsilon m - \epsilon r - r\right)}^{2} {\left(\epsilon r + 2 \, m - r\right)}^{2} r^{2}}$$
Legen Sie die Reihenfolge von fest $\epsilon$mit set_calc_order. Jetzt werden Berechnungen auf abgeschnitten$\mathcal O(\epsilon^2)$ automatisch:
g.set_calc_order(eps, 2)
ricci = g.ricci_scalar()
ricci.expr().factor()
$$\newcommand{\Bold}[1]{\mathbf{#1}}-\frac{2 \, {\left(96 \, \epsilon m^{6} - 224 \, \epsilon m^{5} r + 192 \, \epsilon m^{4} r^{2} - 64 \, \epsilon m^{3} r^{3} + 6 \, \epsilon m r^{5} - \epsilon r^{6} + 24 \, m^{5} r - 36 \, m^{4} r^{2} + 8 \, m^{3} r^{3} + 10 \, m^{2} r^{4} - 6 \, m r^{5} + r^{6}\right)} \epsilon}{{\left(2 \, m - r\right)}^{3} r^{5}}$$