Take a look at https://github.com/sympy/sympy/pull/7318. I remember that 
this PR didn't work for all matrices (I guess matices including expressions 
with sqrt(2)). If we find a better way to determine the common factor, I'll 
update the PR.

On Saturday, November 28, 2015 at 8:08:52 PM UTC+1, Riccardo Rossi wrote:
>
> Dear Mateusz,
>
> what you suggest is exactly what i was hoping for and could not find by 
> googling
>
> i'll definitely try that out :-)
>
> Dzienkuje Bardzo! (hope spelling is correct and...that i guessed correctly 
> your nationalty)
>
> cheers
> Riccardo
>
> On Saturday, November 28, 2015 at 11:07:20 AM UTC+1, Mateusz Paprocki 
> wrote:
>>
>> Hi, 
>>
>> On 27 November 2015 at 19:34, Riccardo Rossi <roug...@gmail.com> wrote: 
>> > Dear list, 
>> > 
>> > i am a newby to sympy, and i should say that i liked what i found, so 
>> ... 
>> > first of all kudos to the developers. 
>> > 
>> > as of now i can succesfully generate my finite element matrices using 
>> sympy, 
>> > which saves me quite a lot of work. 
>> > 
>> > the point is that now i would like to optimize a bit what i did, and i 
>> would 
>> > like to collect some common factors between the entries of a matrix. 
>> > 
>> > for example imagine that i have (pseudocode and just an example, no 
>> physics 
>> > behind) 
>> > 
>> > a,b = symbols('a b') 
>> > 
>> > A = Matrix(2,1) 
>> > A[0] = a*(exp(a+b)+exp(b^2)) 
>> > A[1] = b*(exp(a+b)+exp(b^2)) 
>> > 
>> > i would like a way to detect that the term 
>> > (exp(a+b)+exp(b^2)) 
>> > 
>> > is common to the different entries and eventually later on do something 
>> of 
>> > the type 
>> > 
>> > aux = (exp(a+b)+exp(b^2)) 
>> > A[0] = a*aux 
>> > A[1] = b*aux 
>> > 
>> > note that later on for me it would be still interesting to do something 
>> > similar on SOME of the entries of the matrix 
>> > 
>> > for example if i had 
>> > 
>> > A = Matrix(3,1) 
>> > A[0] = a*(exp(a+b)+exp(b^2)) 
>> > A[1] = b*(exp(a+b)+exp(b^2)) 
>> > A[2] = a+b 
>> > 
>> > i would still love to have 
>> > 
>> > 
>> > aux = (exp(a+b)+exp(b^2)) 
>> > A[0] = a*aux 
>> > A[1] = b*aux 
>> > A[2] = a+b 
>> > 
>>
>> you could use cse() (common subexpression elimination) for this, e.g.: 
>>
>> In [1]: from sympy import * 
>>
>> In [2]: var('a,b') 
>> Out[2]: (a, b) 
>>
>> In [3]: aux = exp(a + b) + exp(b**2) 
>>
>> In [4]: Matrix([a*aux, b*aux, a + b]) 
>> Out[4]: 
>> Matrix([ 
>> [a*(exp(b**2) + exp(a + b))], 
>> [b*(exp(b**2) + exp(a + b))], 
>> [                     a + b]]) 
>>
>> In [5]: replacements, (M,) = cse(_) 
>>
>> In [6]: M 
>> Out[6]: 
>> Matrix([ 
>> [a*x1], 
>> [b*x1], 
>> [  x0]]) 
>>
>> In [7]: replacements 
>> Out[7]: [(x0, a + b), (x1, exp(b**2) + exp(x0))] 
>>
>> In [8]: M.subs(list(reversed(replacements))) 
>> Out[8]: 
>> Matrix([ 
>> [a*(exp(b**2) + exp(a + b))], 
>> [b*(exp(b**2) + exp(a + b))], 
>> [                     a + b]]) 
>>
>> However, this may not be exactly what you want, because it eliminates 
>> `a + b` as well. 
>>
>> Mateusz 
>>
>> > 
>> > 
>> > thanks in advance for any suggestion. 
>> > 
>> > cheers 
>> > Riccardo 
>> > 
>> > -- 
>> > 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 sympy+un...@googlegroups.com. 
>> > To post to this group, send email to sy...@googlegroups.com. 
>> > 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/a72b7481-c0c8-49a2-9a1f-3e88ae8f5f3d%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 sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
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/f517f999-8cba-4170-b6d7-7c5c1f48829e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to