diff --git a/miscmaths.cc b/miscmaths.cc
index 5e9cf87d9ab44769be5bb7ced4ddee558de37818..d61739506d7a22bfa60831199e11f75c7ab87cf7 100644
--- a/miscmaths.cc
+++ b/miscmaths.cc
@@ -1368,6 +1368,16 @@ ReturnMatrix sqrt(const Matrix& mat)
   return res;
 }
 
+ReturnMatrix sqrtm(const Matrix& mat)
+{
+	Matrix res, tmpU, tmpV;
+	DiagonalMatrix tmpD;
+	SVD(mat, tmpD, tmpU, tmpV);
+	res = tmpU*sqrt(tmpD)*tmpV.t();
+	res.Release();
+	return res;
+}
+
 ReturnMatrix log(const Matrix& mat)
 {
   Matrix res = mat;
diff --git a/miscmaths.h b/miscmaths.h
index 197ae442aceade7d3f599460b34610301a2b7b03..bd1a994f8172b382e10d1e0c793e121f0b5018f8 100644
--- a/miscmaths.h
+++ b/miscmaths.h
@@ -214,6 +214,7 @@ namespace MISCMATHS {
   ReturnMatrix dist2(const Matrix& mat1, const Matrix& mat2);
   ReturnMatrix abs(const Matrix& mat);
   ReturnMatrix sqrt(const Matrix& mat);
+  ReturnMatrix sqrtm(const Matrix& mat);
   ReturnMatrix log(const Matrix& mat);
   ReturnMatrix exp(const Matrix& mat);
   ReturnMatrix tanh(const Matrix& mat);