From 12f15f49cd8cc4ab9c809700e8cb88a0efe198d8 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Wed, 17 Feb 2021 16:14:33 +0100 Subject: Rearranged some functions among files, and wrote the normalize function to take generic Eigen expressions. --- p-spin.hpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'p-spin.hpp') diff --git a/p-spin.hpp b/p-spin.hpp index 480b3ca..bd3cacc 100644 --- a/p-spin.hpp +++ b/p-spin.hpp @@ -5,6 +5,11 @@ #include "tensor.hpp" #include "factorial.hpp" +template +Vector normalize(const Eigen::MatrixBase& z) { + return z * sqrt((double)z.size() / (typename Derived::Scalar)(z.transpose() * z)); +} + template std::tuple, Matrix> hamGradHess(const Tensor& J, const Vector& z) { Matrix Jz = contractDown(J, z); // Contracts J into p - 2 copies of z. @@ -21,14 +26,8 @@ std::tuple, Matrix> hamGradHess(const Tensor -Vector normalize(const Vector& z) { - return z * sqrt((double)z.size() / (Scalar)(z.transpose() * z)); -} - -template -Vector project(const Vector& z, const Vector& x) { - Scalar xz = x.transpose() * z; - return x - (xz / z.squaredNorm()) * z.conjugate(); +Vector zDot(const Vector& z, const Vector& dH) { + return -dH.conjugate() + (dH.dot(z) / z.squaredNorm()) * z.conjugate(); } template @@ -37,7 +36,7 @@ std::tuple> WdW(const Tensor& J, const Vector< Matrix ddH; std::tie(std::ignore, dH, ddH) = hamGradHess(J, z); - Vector dzdt = project(z, dH.conjugate().eval()); + Vector dzdt = zDot(z, dH); double a = z.squaredNorm(); Scalar A = (Scalar)(z.transpose() * dzdt) / a; -- cgit v1.2.3-54-g00ecf