(no commit message)
[pom.git] / normal_law.cc
1
2 //////////////////////////////////////////////////////////////////////////////////
3 // This program is free software: you can redistribute it and/or modify         //
4 // it under the terms of the version 3 of the GNU General Public License        //
5 // as published by the Free Software Foundation.                                //
6 //                                                                              //
7 // This program is distributed in the hope that it will be useful, but          //
8 // WITHOUT ANY WARRANTY; without even the implied warranty of                   //
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU             //
10 // General Public License for more details.                                     //
11 //                                                                              //
12 // You should have received a copy of the GNU General Public License            //
13 // along with this program. If not, see <http://www.gnu.org/licenses/>.         //
14 //                                                                              //
15 // Written by Francois Fleuret                                                  //
16 // (C) Ecole Polytechnique Federale de Lausanne                                 //
17 // Contact <pom@epfl.ch> for comments & bug reports                             //
18 //////////////////////////////////////////////////////////////////////////////////
19
20 #include "normal_law.h"
21 #include <cmath>
22
23 NormalLaw::~NormalLaw() { }
24
25 scalar_t NormalLaw::log_proba(scalar_t x) {
26   return normalizer - sq(x - expectation)/(2*variance);
27 }
28
29 scalar_t NormalLaw::proba(scalar_t x) {
30   return exp(normalizer - sq(x - expectation)/(2*variance));
31 }
32
33 void NormalLaw::set(scalar_t e, scalar_t v) {
34   expectation = e;
35   variance = v;
36   normalizer = - 0.5 * log(variance * 2 * M_PI);
37 }