Matrix square root (Error)


which command is for Matrix square root?

it worked before:

julia> X = sqrtm([1.0 -0.9; -0.9 1.0])
2x2 Float64 Array:
  0.847316  -0.531089
 -0.531089   0.847316

But now in Julia 1.1.0

X = sqrtm([1.0 -0.9; -0.9 1.0])
ERROR: UndefVarError: sqrtm not defined


you can use just sqrt :

a = [1.0 -0.9; -0.9 1.0]
2×2 Array{Float64,2}:
  0.847316  -0.531089
 -0.531089   0.847316

I find this post talking about that

sqrt(a) and sqrtm(a) mean not the same, e.g.

>> sqrtm(a)

ans =

   0.5537 + 0.4644i   0.8070 - 0.2124i
   1.2104 - 0.3186i   1.7641 + 0.1458i

>> sqrt(a)

ans =

    1.0000    1.4142
    1.7321    2.0000

then, sqrt(complex(a))?

from the help ?sqrt:


  If A has no negative real eigenvalues, compute the principal matrix square root of A, that is the unique matrix X with eigenvalues having
  positive real part such that X^2 = A. Otherwise, a nonprincipal square root is returned.

  If A is symmetric or Hermitian, its eigendecomposition (eigen) is used to compute the square root. Otherwise, the square root is determined
  by means of the Björck-Hammarling method [^BH83], which computes the complex Schur form (schur) and then the complex square root of the
  triangular factor.

nice, good to know! thanks!

1 Like

This table may help clear up the confusion.

Matlab Julia 0.4 Julia 0.5 Julia 0.6 Julia 0.7 Julia 1.x
sqrtm(a) M M M M M* E
sqrt(a) P P P P* M M
sqrt.(a) E E P P P P


M Matrix square root
P Pointwise square root
* Deprecated
E Error