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] 
> <javascript:>> 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] <javascript:>.
>> To post to this group, send email to [email protected] <javascript:>
>> .
>> 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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to