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);