2017-11-13 3 views
1

私は行列を単純化して後で逆行列にしようとしていますが、sympyはそれを因数分解しないので、複雑な式が不要になります。大規模な方程式を扱っていることを考えれば、iPythonがクラッシュするだけでなく、できるだけ単純化する必要があります。ここでSympyが最大限に分解できません

が私のコードです:この時点で

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)に因数分解されることはありません、どのI私が意図しているとおり、順番にR**2に置き換えることができます。

私は、Sympyの組み込みの簡素化メソッドをすべて試しましたが、そのうちの誰もそのトリックを行いませんでした。あなたの助けを事前に

感謝:)

+0

あなたはRなしで動作するようにしようとしました、つまり、ちょうどx^2 +を最初から入れていますか?また、RとR^2をかなり冗長に見えるものに置き換えると、なぜそれを追加しましたか? – Banana

答えて

0

Aの本来のオペアンプ数次の後、それは157で投稿しているとして、それは117に低下する:

>>> factor_terms(A).replace(lambda x: x.is_Add, lambda x: collect(x, (R, Rs))) 
>>> _.count_ops() 
117 
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>

関連する問題