imate
C++/CUDA Reference
Loading...
Searching...
No Matches
gaussian_der.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright 2021, Siavash Ameli <sameli@berkeley.edu>
3 * SPDX-License-Identifier: BSD-3-Clause
4 * SPDX-FileType: SOURCE
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the license found in the LICENSE.txt file in the root
8 * directory of this source tree.
9 */
10
11
12// =======
13// Headers
14// =======
15
16// Before including cmath, define _USE_MATH_DEFINES. This is only required to
17// define the math constants like M_PI, etc, in win32 operating system.
18#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && \
19 !defined(__CYGWIN__)
20 #define _USE_MATH_DEFINES
21#endif
22
23#include <cmath> // exp, M_SQRT1_2, M_2_SQRTPI
24#include "./gaussian_der.h"
25
26
27// ============
28// Gaussian Der
29// ============
30
33
34GaussianDer::GaussianDer(double mu_, double sigma_)
35{
36 this->mu = mu_;
37 this->sigma = sigma_;
38}
39
40// =====================
41// Gaussian Der function (float)
42// =====================
43
47
48float GaussianDer::function(const float lambda_) const
49{
50 float mu_ = static_cast<float>(this->mu);
51 float sigma_ = static_cast<float>(this->sigma);
52 float sigma2 = sigma_ * sigma_;
53 float x = (lambda_ - mu_) / sigma_;
54 return -(x * 0.5f * M_SQRT1_2 * M_2_SQRTPI / sigma2) * \
55 std::exp(-0.5 * x * x);
56}
57
58
59// =====================
60// Gaussian Der function (double)
61// =====================
62
66
67double GaussianDer::function(const double lambda_) const
68{
69 double x = (lambda_ - this->mu) / this->sigma;
70 double sigma2 = this->sigma * this->sigma;
71 return -(x * 0.5 * M_SQRT1_2 * M_2_SQRTPI / sigma2) * \
72 std::exp(-0.5 * x * x);
73}
74
75
76// =====================
77// Gaussian Der function (long double)
78// =====================
79
83
84long double GaussianDer::function(const long double lambda_) const
85{
86 long double mu_ = static_cast<long double>(this->mu);
87 long double sigma_ = static_cast<long double>(this->sigma);
88 long double sigma2 = sigma_ * sigma_;
89 long double x = (lambda_ - mu_) / sigma_;
90 return -(x * 0.5l * M_SQRT1_2 * M_2_SQRTPI / sigma2) * \
91 std::exp(-0.5 * x * x);
92}
GaussianDer(double mu_, double sigma_)
Sets the default for the parameter mu to 0.0 and for the parameter sigma to 1.0.
virtual float function(const float lambda_) const