So I have a basic version up right now. I added in a quick "debug" strategy
that prints out before and after for any change. You can track what happens
as the system simplifies the expression. I don't claim that SymPy's
eventual solution should look like what I have now. I do make the claim
that I have now is neat :)

Code is up here
https://github.com/mrocklin/sympy/tree/rr/sympy/rr
https://github.com/mrocklin/sympy/tree/rr/sympy/matrices/expressions

MatAdd and MatMul have been weined off of Add and Mul flatten/simplify and
had the logic replaced with rules.

You'll see some rules that don't have any apparent effect. I'll explain
them briefly here
unpack :: Type(single-arg) -> single-> arg     example -- MatMul(X) -> X
flatten  :: Type(a, b, Type(c)) -> Type(a, b, c)
The others should be obvious.


In [1]: X = MatrixSymbol('X', n, n)

In [2]: Y = MatrixSymbol('Y', n, n)

In [3]: Inverse(X)*X*Y + X + Y + X
Rule: xxinv
In: X^-1*X
Out: I

Rule: unpack
In: I
Out: I

Rule: remove_ids
In: I*Y
Out: Y

Rule: unpack
In: Y
Out: Y

Rule: flatten
In: Y + X + Y
Out: X + Y + Y

Rule: factor_in_front
In: Y*2
Out: 2*Y

Rule: glom_MatAdd
In: X + Y + Y
Out: X + 2*Y

Rule: unpack
In: Y
Out: Y

Rule: factor_in_front
In: Y*2
Out: 2*Y

Rule: flatten
In: X + X + 2*Y
Out: X + X + 2*Y

Rule: unpack
In: Y
Out: Y

Rule: factor_in_front
In: X*2
Out: 2*X

Rule: factor_in_front
In: Y*2
Out: 2*Y

Rule: glom_MatAdd
In: X + X + 2*Y
Out: 2*X + 2*Y

Rule: unpack
In: X
Out: X

Rule: unpack
In: Y
Out: Y

Rule: factor_in_front
In: X*2
Out: 2*X

Rule: factor_in_front
In: Y*2
Out: 2*Y

Out[3]: 2⋅X + 2⋅Y

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to