⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniformpdf.cpp

📁 dysii是一款非常出色的滤波函数库
💻 CPP
字号:
#include "UniformPdf.hpp"#include "Random.hpp"using namespace indii::ml::aux;UniformPdf::UniformPdf() : N(0), p(0.0), lower(0), upper(0), mu(0),    sigma(0), haveMu(false), haveSigma(false) {  //}UniformPdf::UniformPdf(const vector& lower, const vector& upper) :    N(lower.size()), lower(lower), upper(upper), mu(lower.size()),    sigma(lower.size()), haveMu(false), haveSigma(false) {  /* pre-condition */  assert(lower.size() == upper.size());  calculateDensity();}UniformPdf& UniformPdf::operator=(const UniformPdf& o) {  /* pre-condition */  assert (o.N == N);  haveMu = o.haveMu;  haveSigma = o.haveSigma;    p = o.p;  lower = o.lower;  upper = o.upper;  if (haveMu) {    mu = o.mu;  }  if (haveSigma) {    sigma = o.sigma;  }  return *this;}UniformPdf::~UniformPdf() {  //}unsigned int UniformPdf::getDimensions() const {  return N;}void UniformPdf::setDimensions(const unsigned int N, const bool preserve) {  this->N = N;  lower.resize(N, preserve);  upper.resize(N, preserve);  mu.resize(N, preserve);  sigma.resize(N, preserve);    calculateDensity();}const vector& UniformPdf::getExpectation() {  if (!haveMu) {    calculateExpectation();  }  return mu;}const symmetric_matrix& UniformPdf::getCovariance() {  if (!haveSigma) {    calculateCovariance();  }  return sigma;}vector UniformPdf::sample() {  vector s(N);  unsigned int i;  for (i = 0; i < N; i++) {    s(i) = Random::uniform(lower(i), upper(i));  }    return s;}double UniformPdf::densityAt(const vector& x) {  bool inside = true;  unsigned int i;    for (i = 0; i < N && inside; i++) {    inside = inside && lower(i) <= x(i) && x(i) < upper(i);  }  return inside ? p : 0.0;}void UniformPdf::calculateExpectation() {  noalias(mu) = (lower + upper) / 2;  haveMu = true;    /* post-condition */  assert (haveMu);}void UniformPdf::calculateCovariance() {  vector diff(upper - lower);  noalias(sigma) = outer_prod(diff, diff) / 12;  haveSigma = true;    /* post-condition */  assert (haveSigma);}void UniformPdf::calculateDensity() {  double volume = 1.0;  vector::iterator iter, end;  vector diff(upper - lower);    iter = diff.begin();  end = diff.end();  while (iter != end) {    volume *= *iter;    iter++;  }    p = 1.0 / volume;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -