Hi,
On 3 November 2015 at 21:47, Hugh <[email protected]> wrote:
> import sympy
> sympy.init_session()
>
>
> x11, x12, x13, x21, x22, x23, x31, x32, x33 = symbols('x_1:4(1:4)')
>
> A = Matrix(3,3,symbols('x_1:4(1:4)'))
> expr1 = A.det()
>
> expr2 = x11*(x22*x33 - x23*x32) - x12*(x21*x33 -x23*x31) + x13*(x21*x32 -
> x22*x31)
>
> # How to get expr2 from expr1?
In [1]: from sympy import *
In [2]: var('x_1:4(1:4)')
Out[2]: (x_11, x_12, x_13, x_21, x_22, x_23, x_31, x_32, x_33)
In [3]: A = Matrix(3, 3, _)
In [4]: expr1 = A.det()
In [5]: expr1
Out[5]: x_11*x_22*x_33 - x_11*x_23*x_32 - x_12*x_21*x_33 +
x_12*x_23*x_31 + x_13*x_21*x_32 - x_13*x_22*x_31
In [6]: from sympy.utilities.iterables import multiset_partitions
In [7]: min([ sum([ factor(sum(f)) for f in l ]) for l in
multiset_partitions(expr1.args) ], key=lambda e: e.count_ops())
Out[7]: x_11*(x_22*x_33 - x_23*x_32) - x_12*(x_21*x_33 - x_23*x_31) +
x_13*(x_21*x_32 - x_22*x_31)
> I would like to use sympy to rewrite expressions just like how people would
> commonly do when writing proofs or doing homework. What are the
> documentation that I must read so that I can be proficient at this?
>
> I've read the tutorial and some of the modules in the module reference but
> feel that I have just barely touched the surface of sympy's capabilities.
> For example, in the above code snippet, I don't know how to manipulate expr1
> to get expr2. I thought expr1.factor() would work but it didn't.
At this point SymPy doesn't have any built-in function that would do
out of the box what's requested here. factor() can't help (at least
directly), because it gives a complete factorization (it works over
entire expression). What you are looking for would be called, e.g.,
factorsum() (as in Maxima). Such functionality can be implemented in
SymPy as shown in _7, just it's very inefficient due to a large number
of partitions.
Mateusz
> Please advise.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/9cbb1995-3987-44f1-8c72-6de11e6a4013%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/CAGBZUCarw_f-UbLkcCuOjxWPPM3_W7kWTVaVG4zPAobh6obzUA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.