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] <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/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.