To take the sqrt of each element in B, use B.applyfunc(sqrt). On Monday, November 24, 2014 5:30:48 PM UTC-6, Yuxiang Wang wrote: > > Hi Aaron, > > Thank you for the response! > > I tried to use numpy.ndarray because I got other orders of tensors, so I > wanted to be consistent. But it seems that Matrix object can be > higher-order too, so I'll try to use them. Thanks for the tip! > > Shawn > > On Monday, November 24, 2014 3:22:34 PM UTC-5, Aaron Meurer wrote: >> >> It seems sqrt(Matrix) (where sqrt is sympy.sqrt) is unevaluated, but >> if you do Matrix(B)**(S(1)/2) it tries to evaluate it (but it hangs). >> >> You shouldn't use NumPy if you are dealing with symbolic matrices. >> There is no advantage to using NumPy at that point, vs. sympy.Matrix. >> >> Aaron Meurer >> >> On Mon, Nov 24, 2014 at 12:23 PM, Yuxiang Wang >> <[email protected]> wrote: >> > Hi Tim, >> > >> > Thank you for your response! >> > >> > And thanks for letting me know that symbolic square root matrix routine >> was >> > not implemented. >> > >> > I will try to do the following: >> > >> > 1) Get eigenvectors first; >> > 2) Take square root of the eigenvalues; >> > 3) Re-construct the square root matrix from the original eigenvectors >> and >> > the sqrt of eigenvalues. >> > >> > Thanks again! >> > >> > Shawn >> > >> > >> > On Monday, November 24, 2014 2:17:08 PM UTC-5, Tim Lahey wrote: >> >> >> >> Hi, >> >> >> >> mpmath is for multi-precision math, not symbolic math. It's expecting >> >> numbers, not symbols. I don't think there's a square root routine for >> >> symbolic matrices implemented. >> >> >> >> Cheers, >> >> >> >> Tim. >> >> >> >> On 24 Nov 2014, at 14:05, Yuxiang Wang wrote: >> >> >> >> > Dear all, >> >> > >> >> > I have the following code to extract the square root of a symmetric >> >> > second-order tensor. >> >> > >> >> > from sympy import symbols, Matrix, mpmathimport numpy as np >> >> > >> >> > F11, F12, F13, F21, F22, F23, F31, F32, F33 = symbols('F11, F12, >> F13, >> >> > F21, F22, F23, F31, F32, F33', real=True) >> >> > F = np.array([[F11, F12, F13], [F21, F22, F23], [F31, F32, F33]]) >> >> > B = F.dot(F.T) >> >> > mpmath.sqrtm(Matrix(B)) >> >> > >> >> > However, it gave me the error: >> >> > >> >> > TypeError Traceback (most recent >> call >> >> > last)<ipython-input-14-439fed475a57> in <module>() >> >> > 5 F = np.array([[F11, F12, F13], [F21, F22, F23], [F31, F32, >> F33]]) >> >> > 6 B = F.dot(F.T)----> 7 mpmath.sqrtm(Matrix(B)) >> >> > >> >> > >> >> > >> X:\WinPython3\python-3.4.2.amd64\lib\site-packages\sympy\mpmath\matrices\calculus.py >> >> >> >> > in sqrtm(ctx, A, _may_rotate) >> >> > 308 >> >> > 309 """ >> >> > --> 310 A = ctx.matrix(A) >> >> > 311 # Trivial >> >> > 312 if A*0 == A: >> >> > >> >> > >> >> > >> X:\WinPython3\python-3.4.2.amd64\lib\site-packages\sympy\mpmath\matrices\matrices.py >> >> >> >> > in __init__(self, *args, **kwargs) >> >> > 326 A[i,j] = convert(A[i,j]) >> >> > 327 elif hasattr(args[0], 'tolist'): >> >> > --> 328 A = self.ctx.matrix(args[0].tolist()) >> >> > 329 self.__data = A._matrix__data >> >> > 330 self.__rows = A._matrix__rows >> >> > >> >> > >> >> > >> X:\WinPython3\python-3.4.2.amd64\lib\site-packages\sympy\mpmath\matrices\matrices.py >> >> >> >> > in __init__(self, *args, **kwargs) >> >> > 299 for i, row in enumerate(A): >> >> > 300 for j, a in enumerate(row): >> >> > --> 301 self[i, j] = convert(a) >> >> > 302 else: >> >> > 303 # interpret list as row vector >> >> > >> >> > >> >> > >> X:\WinPython3\python-3.4.2.amd64\lib\site-packages\sympy\mpmath\ctx_mp_python.py >> >> >> >> > in convert(ctx, x, strings) >> >> > 660 if hasattr(x, '_mpmath_'): >> >> > 661 return ctx.convert(x._mpmath_(prec, rounding)) >> >> > --> 662 return ctx._convert_fallback(x, strings) >> >> > 663 >> >> > 664 def isnan(ctx, x): >> >> > >> >> > >> >> > >> X:\WinPython3\python-3.4.2.amd64\lib\site-packages\sympy\mpmath\ctx_mp.py >> >> > in _convert_fallback(ctx, x, strings) >> >> > 612 else: >> >> > 613 raise ValueError("can only create mpf from >> >> > zero-width interval") >> >> > --> 614 raise TypeError("cannot create mpf from " + repr(x)) >> >> > 615 >> >> > 616 def mpmathify(ctx, *args, **kwargs): >> >> > >> >> > TypeError: cannot create mpf from F11**2 + F12**2 + F13**2 >> >> > >> >> > May I ask why that is happening? Is this a limitation of sympy or >> that >> >> > I am >> >> > doing something wrong? >> >> > >> >> > Thank you! >> >> > >> >> > 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/228b5b46-c2fe-4d90-83f6-4dd96927eddd%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/79209aad-242d-4e63-9d65-b8c2d581aaf8%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/f0647f97-6309-4fdd-b0fb-32fa069dff74%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
