1#ifndef GM_TO_DIRAC_EVEN_BINF_OPTIMIZATION_PARAMS_H
2#define GM_TO_DIRAC_EVEN_BINF_OPTIMIZATION_PARAMS_H
4#include <gsl/gsl_matrix.h>
5#include <gsl/gsl_vector.h>
10#include "gsl_minimizer.h"
12#include "squared_euclidean_distance_utils.h"
53 squaredEuclideanDistanceUtilLL =
61 if (squaredEuclideanDistanceUtilLL)
delete squaredEuclideanDistanceUtilLL;
77 std::vector<double>
mean(N, 0.00);
78 for (
size_t i = 0;
i < L; ++
i) {
79 const double wXi = wX->data[
i];
80 for (
size_t d = 0;
d < N; ++
d)
mean[
d] +=
wXi *
t->data[
i * N +
d];
83 for (
size_t i = 0;
i < L; ++
i) {
85 for (
size_t d = 0;
d < N; ++
d) {
93 if (!squaredEuclideanDistanceUtilLL)
return;
111 for (
size_t i = 0;
i < L; ++
i)
139 if (!squaredEuclideanDistanceUtilLL)
return 0.00;
140 return squaredEuclideanDistanceUtilLL->getDistance(
i,
j);
base class for implementations calculating squared euclidean distances with just one set of vectors
Definition squared_euclidean_distance_utils.h:64
virtual void calculateDistance(const gsl_matrix *x, const gsl_matrix *y)=0
calculate all squared euclidean distance between vectors contained as columns in x and y
implements a vectorized version of calculating squared euclidean distances store in a vector
Definition squared_euclidean_distance_utils.h:202
Definition dirac_to_dirac_approx_short.h:9
optimization parameters for the bMax-free closed-form even-N Gaussian-to-Dirac approximation
Definition gm_to_dirac_even_binf_optimization_params.h:30
~GMToDiracEvenBinfOptimizationParams()
Destroy the GMToDiracEvenBinfOptimizationParams object.
Definition gm_to_dirac_even_binf_optimization_params.h:60
GMToDiracEvenBinfOptimizationParams(const gsl_vector *wX, size_t N, size_t L)
Construct a new GMToDiracEvenBinfOptimizationParams object.
Definition gm_to_dirac_even_binf_optimization_params.h:39
const double constant
K_k, see lcd_binf_constant()
Definition gm_to_dirac_even_binf_optimization_params.h:145
std::vector< double > cSqrdNorm
c_i = ||s_i||^2, size L
Definition gm_to_dirac_even_binf_optimization_params.h:148
void update(const gsl_vector *t)
project t onto the zero-mean manifold and refresh the caches
Definition gm_to_dirac_even_binf_optimization_params.h:73
std::vector< double > sProjected
s = t - 1 * (w^T t), size L * N
Definition gm_to_dirac_even_binf_optimization_params.h:147
double sample(size_t i, size_t d) const
cached projected sample coordinate s_{i,d}
Definition gm_to_dirac_even_binf_optimization_params.h:123
double distanceSq(size_t i, size_t j) const
cached squared distance T_ij between projected samples i and j
Definition gm_to_dirac_even_binf_optimization_params.h:138
const size_t k
N / 2.
Definition gm_to_dirac_even_binf_optimization_params.h:144
bool hasDegenerateSample() const
true if any projected sample sits exactly on the origin
Definition gm_to_dirac_even_binf_optimization_params.h:110
base struct minimizer needs to be setup with
Definition gsl_minimizer.h:18