我试图简化一个矩阵来反转它,但是同情并没有将它分解,它会导致不必要的复杂表达。鉴于我正在使用大方程,我需要它们尽可能地简化,如果不是iPython只是崩溃。
这是我的代码:
from sympy import *
from sympy.diffgeom import *
from __future__ import division
x, y, z, t = symbols('x y z t')
r, theta, phi = symbols('r \\theta \phi')
init_printing(use_latex=True)
m = Manifold('name', 4)
p = Patch('origin', m)
cart = CoordSystem('GP', p, ['t', 'x', 'y', 'z'])
t, x, y, z = cart.coord_functions()
dt, dx, dy, dz = cart.base_oneforms()
Rs, R = symbols('Rs R')
TP = TensorProduct
metric = (1-Rs/sqrt(x**2+y**2+z**2))*TP(dt,dt)-(1+x**2/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1)*TP(dx,dx)-(1+y**2/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1)*TP(dy,dy)-(1+z**2/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1+(x**2+y**2)/(x**2+y**2+z**2))*TP(dz,dz)-x*y/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1*(TP(dx,dy)+TP(dy,dx))-x*z/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1*(TP(dx,dz)+TP(dz,dx))-y*z/(x**2+y**2+z**2)*(1-sqrt(x**2+y**2+z**2)/Rs)**-1*(TP(dy,dz)+TP(dz,dy))
A = factor(twoform_to_matrix(metric)).subs({sqrt(x**2+y**2+z**2) : R, x**2+y**2+z**2 : R**2})
A
在这一点上,可以在A.col(1)[1]找到一个错误的例子:(-R*x**2 - R*y**2 - R*z**2)
将不会在-R*(x**2+y**2+z**2)
中被分解,我可以依次用R**2
替换它。
我尝试了Sympy的所有内置简化方法,但没有一个能够解决问题。
在此先感谢您的帮助 :)
您发布的A的原始操作数是157.在以下之后,它下降到117:
>>> factor_terms(A).replace(lambda x: x.is_Add, lambda x: collect(x, (R, Rs)))
>>> _.count_ops()
117
这不是问题的解决方案,只是OP代码的输出。我希望这有助于某人回答这个问题。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mo>[</mo>
<mtable rowspacing="4pt" columnspacing="1em">
<mtr>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mn>1</mn>
<mi>R</mi>
</mfrac>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mn>1</mn>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>2</mn>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>)</mo>
</mrow>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mn>1</mn>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>2</mn>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>)</mo>
</mrow>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mrow>
<mi>R</mi>
<mi>s</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
</mrow>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
</mtd>
<mtd>
<mo>−<!-- − --></mo>
<mfrac>
<mn>1</mn>
<mrow>
<msup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mi>R</mi>
<mo>+</mo>
<mi>R</mi>
<mi>s</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mrow>
<mo>(</mo>
<mo>−<!-- − --></mo>
<mn>2</mn>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mn>2</mn>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mi>R</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>2</mn>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">x</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>2</mn>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">y</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>2</mn>
<mi>R</mi>
<mi>s</mi>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="bold">z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>)</mo>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</math>