From 3276bdd1e9796fec71e169e6c41d77da72b3a4fb Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Thu, 25 Feb 2021 15:28:11 +0100 Subject: Many changes. --- p-spin.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'p-spin.hpp') diff --git a/p-spin.hpp b/p-spin.hpp index bd3cacc..f1dc07f 100644 --- a/p-spin.hpp +++ b/p-spin.hpp @@ -2,12 +2,13 @@ #include +#include "types.hpp" #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)); + return z * sqrt((Real)z.size() / (typename Derived::Scalar)(z.transpose() * z)); } template @@ -16,7 +17,7 @@ std::tuple, Matrix> hamGradHess(const Tensor Jzz = Jz * z; Scalar Jzzz = Jzz.transpose() * z; - double pBang = factorial(p); + Real pBang = factorial(p); Matrix hessian = ((p - 1) * p / pBang) * Jz; Vector gradient = (p / pBang) * Jzz; @@ -31,18 +32,18 @@ Vector zDot(const Vector& z, const Vector& dH) { } template -std::tuple> WdW(const Tensor& J, const Vector& z) { +std::tuple> WdW(const Tensor& J, const Vector& z) { Vector dH; Matrix ddH; std::tie(std::ignore, dH, ddH) = hamGradHess(J, z); Vector dzdt = zDot(z, dH); - double a = z.squaredNorm(); + Real a = z.squaredNorm(); Scalar A = (Scalar)(z.transpose() * dzdt) / a; Scalar B = dH.dot(z) / a; - double W = dzdt.squaredNorm(); + Real W = dzdt.squaredNorm(); Vector dW = ddH * (dzdt - A * z.conjugate()) + 2 * (conj(A) * B * z).real() - conj(B) * dzdt - conj(A) * dH.conjugate(); -- cgit v1.2.3-54-g00ecf