diff --git a/reverse_logistic.cpp b/reverse_logistic.cpp new file mode 100644 index 0000000..aa0fd64 --- /dev/null +++ b/reverse_logistic.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include +using namespace std; + +vector reverse_logistic(vector values, double r, int steps){ + if (steps == 0){ + return values; + } + vector new_values {}; + for (int i=0; i < values.size(); i++){ + double current_value = values[i]; + + if ((r*r-4*r*current_value) >= 0){ + double numerator = r + sqrt(r*r - 4*r*current_value); + double next_value = numerator / (2*r); + if(0 < next_value and 1 > next_value){ + new_values.push_back(next_value); + } + + numerator = r - sqrt(r*r - 4*r*current_value); + next_value = numerator / (2*r); + if(0 < next_value and 1 > next_value){ + new_values.push_back(next_value); + } + } + + } + return reverse_logistic(new_values, r, steps-1); +} + + +int main() { + vector values {0.5}; + double r = 3.9; + int steps = 3; + vector val = reverse_logistic(values, r, steps); + cout << val.size() << endl; + for (int i = 0; i < val.size(); i++){ + cout << std::setprecision (17) << val[i] << ',' << ' '; + } + return 0; +} + + +