ASKSAGE: Sage Q&A Forum - RSS feedhttps://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Wed, 26 Jun 2019 12:21:03 +0200Compute the square root of a complex matrixhttps://ask.sagemath.org/question/47010/compute-the-square-root-of-a-complex-matrix/Hello,
I can't find how to compute the square root of a complex matrix... I tried `m.sqrt()`, `sqrt(m)` (display only symbolic sqrt), `sqrt(m).n()`... None of them work. What is the regular way to compute the root of a complex matrix? (you can assume the matrix is self-adjoint if needed).
Thanks!
def test():
phi = matrix(CC, [[1/sqrt(2)],[i]])
m = phi * phi.C.T
print("Matrix: {}".format(m))
s = sqrt(m).n() # Does not work: AttributeError: 'ComplexField_class_with_category' object has no attribute 'complex_field'
#s = m^(1/2) # Does not work either, NotImplementedError: non-integral exponents not supported
# s = m.sqrt() # Does not work either, no attribute sqrt
print("Sqrt: {}".format(s))
print("s*s: {}".format(s*s))
if s*s == m:
print("Ok")
else:
print("Nope :(")
EDIT: For now I'm using the numpy backend with manual diagonalisation, but I'd like to know if there is a better way to proceed...
phi = matrix(CDF, [[1/sqrt(2)],[i]])
D, P = m.eigenmatrix_right()
s = P*diagonal_matrix([sqrt(x) for x in D.diagonal()])*P^-1tobiasBoraWed, 26 Jun 2019 12:21:03 +0200https://ask.sagemath.org/question/47010/