Sympy未能将因子分解为最大值

时间:2017-11-13 14:49:59

标签: python sympy

我试图简化一个矩阵,然后将其反转,但是同情心并没有将其分解,这导致了不必要的复杂表达。鉴于我正在使用大方程,我需要尽可能简化它们,如果不是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的所有内置简化方法,但没有一个能够解决这个问题。

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

这不是问题的解决方案,只是OP代码的输出。我希望这有助于某人回答这个问题。



<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <mo>[</mo>
    <mtable rowspacing="4pt" columnspacing="1em">
      <mtr>
        <mtd>
          <mo>&#x2212;<!-- − --></mo>
          <mfrac>
            <mn>1</mn>
            <mi>R</mi>
          </mfrac>
          <mrow>
            <mo>(</mo>
            <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></mo>
          <mfrac>
            <mn>1</mn>
            <mrow>
              <msup>
                <mi>R</mi>
                <mrow class="MJX-TeXAtom-ORD">
                  <mn>2</mn>
                </mrow>
              </msup>
              <mrow>
                <mo>(</mo>
                <mo>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
          <mrow>
            <mo>(</mo>
            <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
        </mtd>
        <mtd>
          <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
        </mtd>
        <mtd>
          <mo>&#x2212;<!-- − --></mo>
          <mfrac>
            <mn>1</mn>
            <mrow>
              <msup>
                <mi>R</mi>
                <mrow class="MJX-TeXAtom-ORD">
                  <mn>2</mn>
                </mrow>
              </msup>
              <mrow>
                <mo>(</mo>
                <mo>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
          <mrow>
            <mo>(</mo>
            <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
        </mtd>
        <mtd>
          <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
        </mtd>
        <mtd>
          <mo>&#x2212;<!-- − --></mo>
          <mfrac>
            <mn>1</mn>
            <mrow>
              <msup>
                <mi>R</mi>
                <mrow class="MJX-TeXAtom-ORD">
                  <mn>2</mn>
                </mrow>
              </msup>
              <mrow>
                <mo>(</mo>
                <mo>&#x2212;<!-- − --></mo>
                <mi>R</mi>
                <mo>+</mo>
                <mi>R</mi>
                <mi>s</mi>
                <mo>)</mo>
              </mrow>
            </mrow>
          </mfrac>
          <mrow>
            <mo>(</mo>
            <mo>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>&#x2212;<!-- − --></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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您发布的A的原始操作数是157.在以下之后,它会降至117:

    /**
     * Create the column definition for a date-time type.
     *
     * @param  \Illuminate\Support\Fluent  $column
     * @return string
     */
    protected function typeDateTime(Fluent $column)
    {
        return $column->precision ? "datetime2($column->precision)" : 'datetime';
    }