From 71bafff64d65c233b1138aa3110989c0764a295c Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 16 Jan 2021 22:43:22 +0300 Subject: [PATCH] Implement matrix Frobenius (L2) norm --- libs/geom/include/psemek/geom/matrix.hpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/geom/include/psemek/geom/matrix.hpp b/libs/geom/include/psemek/geom/matrix.hpp index 2d99fb70..235d9709 100644 --- a/libs/geom/include/psemek/geom/matrix.hpp +++ b/libs/geom/include/psemek/geom/matrix.hpp @@ -2,6 +2,7 @@ #include #include +#include #include @@ -39,7 +40,6 @@ namespace psemek::geom static matrix scalar(T const & s); }; - template matrix matrix::zero() { @@ -269,6 +269,22 @@ namespace psemek::geom return result; } + template + T frobenius_norm_sqr(matrix const & m) + { + T r{0}; + for (std::size_t i = 0; i < R; ++i) + for (std::size_t j = 0; j < C; ++j) + r += sqr(m[i][j]); + return r; + } + + template + T frobenius_norm(matrix const & m) + { + return std::sqrt(frobenius_norm_sqr(m)); + } + template Stream & operator << (Stream & os, matrix const & m) {