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 <wangyuxiang....@gmail.com> 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 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/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 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/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 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/CAKgW%3D6%2BhkVcqGZLH_TkBg%2B9oqhUmbaxQctcj%2BGQx%2BkUps1QPWQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.