You've discovered that SymPy is really bad at dealing with algebraic
expressions.  I would recommend just sticking to what you did the first
time, instead of dealing with sqrt(lambda), just use lambda.

By the way, I don't think simplify() uses the new assumptions. You have to
literally use refine() if you want to simplify things with them.

Aaron Meurer

On Mon, Feb 2, 2015 at 9:52 PM, Yuxiang Wang <[email protected]>
wrote:

> Hi Aaron,
>
> Thank you for your response!
>
> 1) You are right that it is a bug. If I do this:
>
> from sympy import symbols, sqrt, simplify, Matrix, Q
> from sympy.assumptions.assume import global_assumptions
>
> b11, b22, b33, b12, b13, b23 = symbols('b11, b22, b33, b12, b13, b23',
> real=True)
> b = Matrix([[b11, b12, b13], [b12, b22, b23], [b13, b23, b33]])
> lambda1sq, lambda2sq, lambda3sq = b.eigenvals()
>
> Then an error would pop up. Instead, if I do this:
>
> from sympy import symbols, sqrt, simplify, Matrix, Q
> from sympy.assumptions.assume import global_assumptions
>
> b11, b22, b33, b12, b13, b23 = symbols('b11, b22, b33, b12, b13, b23')
> b = Matrix([[b11, b12, b13], [b12, b22, b23], [b13, b23, b33]])
> for elem in b:
>     global_assumptions.add(Q.real(elem))
> lambda1sq, lambda2sq, lambda3sq = b.eigenvals()
>
> It would calculate alright.
>
>
> 2) I still have a problem, as can be viewed more clearly on here:
>
>
> http://nbviewer.ipython.org/github/yw5aj/ipynb/blob/master/SymbolicOgden.ipynb
>
> A brief description is - the sqrt(matrix determinant) is not equal to the
> product of the eigenvalues of matrix**(1/2).
>
> Could you please help a little bit in there...? Would what I am doing even
> be mathematically correct?
>
> Thanks!
>
> Shawn
>
> On Monday, February 2, 2015 at 2:49:19 PM UTC-5, Aaron Meurer wrote:
>>
>>
>>
>> On Mon, Feb 2, 2015 at 1:14 PM, Yuxiang Wang <[email protected]>
>> wrote:
>>
>>> Dear all,
>>>
>>> I am currently trying to do solid mechanics (finite deformation) in
>>> SymPy. There are a lot of matrices that are positive definite, but I do not
>>> know whether there is a way to define this property in SymPy. Any help
>>> would be deeply appreciated!
>>>
>>> Take this code snippet for example:
>>>
>>>
>>> ```
>>> from sympy import symbols, init_printing, sqrt, simplify, Matrix
>>> init_printing()
>>>
>>> # Define a positive-definite real symmetric matrix
>>> b11, b22, b33, b12, b13, b23 = symbols('b11, b22, b33, b12, b13, b23')
>>> b = Matrix([[b11, b12, b13], [b12, b22, b23], [b13, b23, b33]])
>>>
>>> J = sqrt(b.det())
>>> lambda1sq, lambda2sq, lambda3sq = b.eigenvals()
>>> lambda1, lambda2, lambda3 = sqrt(lambda1sq), sqrt(lambda2sq),
>>> sqrt(lambda3sq)
>>>
>>> simplify(lambda1 * lambda2 * lambda3 - J)
>>> ```
>>>
>>> 1) Supposedly, the result of the simplify() should be zero. However it
>>> is not, because we are not sure whether the eigenvalues of the matrix b are
>>> positive! They are because the matrix should be positive definite, but I do
>>> not know how to define that.
>>>
>>
>> Maybe refine(lambda1, Q.positive(lambda1sq)).
>>
>>
>>>
>>> 2) Also, I know that I could've used real=True in where I defined the
>>> symbols of b11, b22, b33.... But I didn't do that. The reason is, if I use
>>> real=True, then I cannot get the eigenvalues any more - it will say
>>>
>>> TypeError: cannot determine truth value of-b11*b22*b33 + b11*b23**2 +
>>> b12**2*b33 - 2*b12*b13*b23 + b13**2*b22 + 2*(-b11 - b22 - b33)**3/27 -
>>> (-b11 - b22 - b33)*(b11*b22 + b11*b33 - b12**2 - b13**2 + b22*b33 -
>>> b23**2)/3 < 0
>>>
>>
>> This error almost always indicates a bug.
>>
>> Aaron Meurer
>>
>>
>>>
>>> Any way to tighten that up as well?
>>>
>>> Thanks,
>>>
>>> Shawn
>>>
>>>
>>>  --
>>> 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/02b195fa-d0ef-4523-95fb-059599803090%40googlegroups.com
>>> <https://groups.google.com/d/msgid/sympy/02b195fa-d0ef-4523-95fb-059599803090%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> 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/182edef1-c430-46f2-b1a1-d92ac343f781%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/182edef1-c430-46f2-b1a1-d92ac343f781%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> 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/CAKgW%3D6Kp9TQ84g%3D42DTX4gjf58HYPSyeRxGNFdemizMZWktRUg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to