私は行列を単純化して後で逆行列にしようとしていますが、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の組み込みの簡素化メソッドをすべて試しましたが、そのうちの誰もそのトリックを行いませんでした。あなたの助けを事前に
感謝:)
あなたはRなしで動作するようにしようとしました、つまり、ちょうどx^2 +を最初から入れていますか?また、RとR^2をかなり冗長に見えるものに置き換えると、なぜそれを追加しましたか? – Banana