Replacing a subexpression with a character?

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')

# compliance matrix for cross-anisotropic material
compl = Matrix([[1/Ex, -nuxy/Ex, -nuxz/Ez],
                [-nuxy/Ex, 1/Ex, -nuxz/Ez],
                [-nuxz/Ex, -nuxz/Ex, 1/Ez]])

# stiffness matrix
stiff = compl.inv()

# symbols I want to introduce 
m, e = symbols('m e')  

meSubs = {Ex/Ez: e, (1 - nuxy - 2*e*nuxz**2): m}  # instead of these subexpressions

# stiff.simplify() returns None, is that a bug? that why I apply simplify together with subs here:
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})    # tried other rearrangements of the equality, as well, same result.
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?

+5
source share
2 answers

, 0.6.7 - , 0.7.1.

stiff, , meSubs . stiff, :

stiff.simplify()
stiff = stiff.subs({2*nuxz**2: 1 - nuxy - m})
stiff = stiff.applyfunc(lambda x: together(expand(x)))
pprint(stiff)

:

[      /     2    \        /             2\                  ]
[  E_x*\nu_xz  - 1/    E_x*\nu_xy + nu_xz /     E_x*nu_xz    ]
[  ----------------    --------------------     ---------    ]
[   m*(-nu_xy - 1)        m*(nu_xy + 1)             m        ]
[                                                            ]
[    /             2\        /     2    \                    ]
[E_x*\nu_xy + nu_xz /    E_x*\nu_xz  - 1/       E_x*nu_xz    ]
[--------------------    ----------------       ---------    ]
[   m*(nu_xy + 1)         m*(-nu_xy - 1)            m        ]
[                                                            ]
[     E_z*nu_xz             E_z*nu_xz        E_z*(-nu_xy + 1)]
[     ---------             ---------        ----------------]
[         m                     m                   m        ]

expand: http://docs.sympy.org/0.7.1/modules/core.html?highlight=expand#sympy.core.function.expand

: http://docs.sympy.org/0.7.1/modules/polys/reference.html?highlight=together#sympy.polys.rationaltools.together

0

, subs . applyfunc , .

In [10]: pprint(stiff.subs({-nuxy-2*nuxz**2+1:m}))
⎑               βŽ›     2    ⎞                            βŽ›              2⎞                            ⎀
⎒            Eβ‚“β‹…βŽnu_xz  - 1⎠                        -Eβ‚“β‹…βŽ-nu_xy - nu_xz ⎠                Eβ‚“β‹…nu_xz    βŽ₯
⎒ ──────────────────────────────────────   ────────────────────────────────────────      ────────    βŽ₯
⎒      2                2          2              2                2          2             m        βŽ₯
⎒ nu_xy  + 2β‹…nu_xyβ‹…nu_xz  + 2β‹…nu_xz  - 1   - nu_xy  - 2β‹…nu_xyβ‹…nu_xz  - 2β‹…nu_xz  + 1                  βŽ₯
⎒                                                                                                    βŽ₯
⎒             βŽ›              2⎞                           βŽ›     2    ⎞                               βŽ₯
⎒         -Eβ‚“β‹…βŽ-nu_xy - nu_xz ⎠                        Eβ‚“β‹…βŽnu_xz  - 1⎠                   Eβ‚“β‹…nu_xz    βŽ₯
βŽ’β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   ──────────────────────────────────────       ────────    βŽ₯
⎒       2                2          2            2                2          2              m        βŽ₯
⎒- nu_xy  - 2β‹…nu_xyβ‹…nu_xz  - 2β‹…nu_xz  + 1   nu_xy  + 2β‹…nu_xyβ‹…nu_xz  + 2β‹…nu_xz  - 1                   βŽ₯
⎒                                                                                                    βŽ₯
⎒               E_zβ‹…nu_xz                                 E_zβ‹…nu_xz                  -E_zβ‹…(nu_xy - 1)βŽ₯
⎒               ─────────                                 ─────────                  ────────────────βŽ₯
⎣                   m                                         m                             m        ⎦

Matrix , MutableMatrix . . https://code.google.com/p/sympy/issues/detail?id=3410. .

0

All Articles