aboutsummaryrefslogtreecommitdiffstats
path: root/stratified_sampling.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'stratified_sampling.cpp')
-rw-r--r--stratified_sampling.cpp58
1 files changed, 28 insertions, 30 deletions
diff --git a/stratified_sampling.cpp b/stratified_sampling.cpp
index c03d447..b959776 100644
--- a/stratified_sampling.cpp
+++ b/stratified_sampling.cpp
@@ -13,41 +13,39 @@ std::pair<double, double> mean_var( std::vector<double> r){
p.second -= p.first * p.first;
return p;
}
+
//actualisation du nombre de tirages à faire par strates
template <typename Gen>
void stratified_sampling<Gen>::update(int Nk) {
- int I = p.size();
- //reinitialistation du vecteur M du nombre de tirages par strates
- if (M.empty()) {
- M.resize(I,1);
- }
- else {
- for(int i=0; i<I; i++){
- M[i]=1;
+ int I = p.size();
+ //reinitialistation du vecteur M du nombre de tirages par strates
+ if (M.empty()) {
+ M.resize(I,1);
+ }
+ else {
+ for(int i=0; i<I; i++){
+ M[i]=1;
+ }
}
- }
-
- std::vector<double> m(I, 0); //le vecteur des m_i idéals
- if (sigma.empty()) {
- for (int i=0; i<I; i++) {
- m[i] = (Nk-I)*p[i];
+ std::vector<double> m(I, 0); //le vecteur des m_i idéals
+
+ if (sigma.empty()) {
+ for (int i=0; i<I; i++) {
+ m[i] = (Nk-I)*p[i];
+ }
}
- }
- else {
- double scal = std::inner_product(p.begin(), p.end(), sigma.begin(), (double) 0);
- for (int i=0; i < I; i++) {
- m[i] = (Nk-I)*p[i]*sigma[i]/scal;
- std::cout<<m[i]<<std::endl;
+ else {
+ double scal = std::inner_product(p.begin(), p.end(), sigma.begin(), (double) 0);
+ for (int i=0; i < I; i++) {
+ m[i] = (Nk-I)*p[i]*sigma[i]/scal;
+ std::cout<<m[i]<<std::endl;
+ }
+ }
+ M[0]+=floor(m[0]);
+ double current = m[0];
+ for (int i=1; i<I; i++){
+ M[i] += floor(current+m[i]) - floor(current);
+ current += m[i];
}
- }
- M[0]+=floor(m[0]);
- double current = m[0];
- for (int i=1; i<I; i++){
- M[i] += floor(current+m[i]) - floor(current);
- current += m[i];
- }
-
}
-
-