I have a 3x3 matrix from which I calculate the inverse. The reverse can be written legibly only when some subexpressions are replaced with new characters, because they appear several times. Can I try to find these subexpressions and replace them? I tried the following, without success:
from sympy import *
Ex, Ez, nuxy, nuxz = symbols('E_x E_z nu_xy nu_xz')
compl = Matrix([[1/Ex, -nuxy/Ex, -nuxz/Ez],
[-nuxy/Ex, 1/Ex, -nuxz/Ez],
[-nuxz/Ex, -nuxz/Ex, 1/Ez]])
stiff = compl.inv()
m, e = symbols('m e')
meSubs = {Ex/Ez: e, (1 - nuxy - 2*e*nuxz**2): m}
stiff.applyfunc(lambda x: simplify(x.subs(meSubs)))
print stiff
Using sympy 0.6.7 (I could upgrade if necessary).
EDIT:
I upgraded to 0.7.1- git (cf9c01f8f9b4b749a7f59891f546646e4b38e580, to be precise) and ran (thanks @PreludeAndFugue for the suggestion):
from sympy import *
Ex,Ez,nuxy,nuxz,m=symbols('E_x E_z nu_xy nu_xz m')
compl=Matrix([[1/Ex,-nuxy/Ex,-nuxz/Ez],[-nuxy/Ex,1/Ex,-nuxz/Ez],[-nuxz/Ex,-nuxz/Ex,1/Ez]])
stiff=compl.inv()
stiff.simplify()
stiff.subs({-nuxy-2*nuxz**2+1:m})
stiff.applyfunc(lambda x: together(expand(x)))
pprint(stiff)
getting
β‘ β 2 β β 2β β€
β’ Eββ
βΞ½_xz - 1β -Eββ
β-Ξ½_xy - Ξ½_xz β Eββ
Ξ½_xz β₯
β’ ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββ₯
β’ 2 2 2 2 2 2 2 β₯
β’ Ξ½_xy + 2β
Ξ½_xyβ
Ξ½_xz + 2β
Ξ½_xz - 1 - Ξ½_xy - 2β
Ξ½_xyβ
Ξ½_xz - 2β
Ξ½_xz + 1 -Ξ½_xy - 2β
Ξ½_xz + 1β₯
β’ β₯
β’ β 2β β 2 β β₯
β’ -Eββ
β-Ξ½_xy - Ξ½_xz β Eββ
βΞ½_xz - 1β Eββ
Ξ½_xz β₯
β’ββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββ₯
β’ 2 2 2 2 2 2 2 β₯
β’- Ξ½_xy - 2β
Ξ½_xyβ
Ξ½_xz - 2β
Ξ½_xz + 1 Ξ½_xy + 2β
Ξ½_xyβ
Ξ½_xz + 2β
Ξ½_xz - 1 -Ξ½_xy - 2β
Ξ½_xz + 1β₯
β’ β₯
β’ E_zβ
Ξ½_xz E_zβ
Ξ½_xz E_zβ
(Ξ½_xy - 1) β₯
β’ βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββ β₯
β’ 2 2 2 β₯
β£ -Ξ½_xy - 2β
Ξ½_xz + 1 -Ξ½_xy - 2β
Ξ½_xz + 1 Ξ½_xy + 2β
Ξ½_xz - 1 β¦
Hm, so why can't I replace "-Ξ½_xy-2β
Ξ½_xzΒ² + 1" with m?