/* * Normaldistribution.cpp * * Created on: 20.05.2011 * Author: sven */ #include "Normaldistribution.h" #include #include #include Normaldistribution::Normaldistribution() { } Normaldistribution::~Normaldistribution() { } void Normaldistribution::calcRandomVector(const CholeskyMatrix& D, const std::vector& mu , std::vector& y) { std::vector u(nenEndOfCompanies); calcStandardNormalDistributedRandomVector(nenEndOfCompanies,u); for (int i=0;i& u) { double x1,x2; double v1,v2; double u1,u2; double s; int counter = 0; while (counter < size) { do { x1 = ((double) rand()) / (RAND_MAX + 1.0); x2 = ((double) rand()) / (RAND_MAX + 1.0); v1 = (2.0 * x1) - 1.0; v2 = (2.0 * x2) - 1.0; s = (v1*v1) + (v2*v2); } while (s >= 1.0); u1 = v1 * std::sqrt( - (2.0 / s) * std::log(s) ); u2 = v2 * std::sqrt( - (2.0 / s) * std::log(s) ); if (counter < size) { u.at(counter) = u1; counter++; } if (counter < size) { u.at(counter) = u2; counter++; } } }