# Matrix square root (Error)

Hi,

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
``````

Best

you can use just `sqrt` :

``````a = [1.0 -0.9; -0.9 1.0]
sqrt(a)
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`:

``````  sqrt(A::AbstractMatrix)

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.
``````
2 Likes

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

where

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