diff --git a/kernels/Logistic.cpp b/kernels/Logistic.cpp deleted file mode 100644 index 5e3ab2f..0000000 --- a/kernels/Logistic.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// -// $filename -// $projectname -// -// Created by Joshua moerman on $TODAY. -// Copyright 2010 Joshua Moerman. All rights reserved. -// - -#include "Logistic.hpp" -#include - - -#pragma mark - -#pragma mark ctors - -Logistic::Logistic(): - AttractorKernel(3, 3) { - init(); -} - -Logistic::Logistic(const unsigned int dimension): - AttractorKernel(dimension, dimension) { - init(); -} - -void Logistic::init() { - // setting some starting values - std::fill_n(vectorOld, dimension, 0.5); - std::fill_n(vectorNew, dimension, 0.5); -} - - -#pragma mark - -#pragma mark attractor - -void Logistic::operator()() { - std::swap(vectorNew, vectorOld); - - for(unsigned int i = 0; i < dimension; i++) { - vectorNew[i] = parameters[i]*vectorOld[i]*(1.0 - vectorOld[i]); - } -} - diff --git a/kernels/Logistic.hpp b/kernels/Logistic.hpp index 2c48c65..75939cc 100644 --- a/kernels/Logistic.hpp +++ b/kernels/Logistic.hpp @@ -3,24 +3,42 @@ #include "../AttractorKernel.hpp" +#include + + class Logistic : public AttractorKernel { private: - - void init(); + void init() { + // setting some starting values + std::fill_n(vectorOld, dimension, 0.5); + std::fill_n(vectorNew, dimension, 0.5); + } public: + Logistic(): + AttractorKernel(3, 3) { + init(); + } - Logistic(); - Logistic(const unsigned int dimension); - - virtual void operator()(); + Logistic(const unsigned int dimension): + AttractorKernel(dimension, dimension) { + init(); + } - virtual void generate_random_parameters(){ - for(unsigned int i = 0; i < numberOfParameters; ++i){ + virtual void generate_random_parameters() { + for(unsigned int i = 0; i < numberOfParameters; ++i) { parameters[i] = rand() / double(RAND_MAX) + 3.0; } + init(); } + virtual void operator()() { + std::swap(vectorNew, vectorOld); + + for(unsigned int i = 0; i < dimension; i++) { + vectorNew[i] = parameters[i]*vectorOld[i]*(1.0 - vectorOld[i]); + } + } }; #endif // LOGISTIC_HPP diff --git a/kernels/Lorenz3D.cpp b/kernels/Lorenz3D.cpp deleted file mode 100644 index 1c5031d..0000000 --- a/kernels/Lorenz3D.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "Lorenz3D.hpp" -#include - - -#pragma mark - -#pragma mark ctors - -Lorenz3D::Lorenz3D(): - AttractorKernel(3, 4) { - init(); -} - -void Lorenz3D::init() { - // setting some starting values - std::fill_n(vectorOld, dimension, 1.0); - std::fill_n(vectorNew, dimension, 1.0); -} - - -#pragma mark - -#pragma mark attractor - -void Lorenz3D::operator()() { - std::swap(vectorNew, vectorOld); - - vectorNew[0] = vectorOld[0] + parameters[0] * parameters[1] * (vectorOld[1] - vectorOld[0]); - vectorNew[1] = vectorOld[1] + parameters[0] * (vectorOld[0] * (parameters[2] - vectorOld[2]) - vectorOld[1]); - vectorNew[2] = vectorOld[2] + parameters[0] * (vectorOld[0] * vectorOld[1] - parameters[3] * vectorOld[2]); -} - -/* -4D: - new_point[0] = point[0] + param[0] * param[1] * (point[1] - point[0]); - new_point[1] = point[1] + param[0] * (point[0] * (param[2] - point[2]) - point[1] + point[3]); - new_point[2] = point[2] + param[0] * (point[0] * point[1] - param[3] * point[2]); - new_point[3] = point[3] - param[0] * param[4] * point[0]; - break; -*/ - diff --git a/kernels/Lorenz3D.hpp b/kernels/Lorenz3D.hpp index f6befa9..73f6954 100644 --- a/kernels/Lorenz3D.hpp +++ b/kernels/Lorenz3D.hpp @@ -5,20 +5,31 @@ class Lorenz3D : public AttractorKernel { private: - - void init(); + void init() { + std::fill_n(vectorOld, dimension, 1.0); + std::fill_n(vectorNew, dimension, 1.0); + } public: + Lorenz3D(): + AttractorKernel(3, 4) { + init(); + } - Lorenz3D(); - - virtual void operator()(); - - virtual void generate_random_parameters(){ + virtual void generate_random_parameters() { parameters[0] = rand() / double(RAND_MAX) * 0.01; parameters[1] = rand() / double(RAND_MAX) * 10.0 + 23.0; parameters[2] = rand() / double(RAND_MAX) * 4.0 + 8.0; parameters[3] = rand() / double(RAND_MAX) * 1.5 + 2.0; + init(); + } + + virtual void operator()() { + std::swap(vectorNew, vectorOld); + + vectorNew[0] = vectorOld[0] + parameters[0] * parameters[1] * (vectorOld[1] - vectorOld[0]); + vectorNew[1] = vectorOld[1] + parameters[0] * (vectorOld[0] * (parameters[2] - vectorOld[2]) - vectorOld[1]); + vectorNew[2] = vectorOld[2] + parameters[0] * (vectorOld[0] * vectorOld[1] - parameters[3] * vectorOld[2]); } }; diff --git a/kernels/Polynomial.cpp b/kernels/Polynomial.cpp deleted file mode 100644 index e961a60..0000000 --- a/kernels/Polynomial.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// $filename -// $projectname -// -// Created by Joshua moerman on $TODAY. -// Copyright 2010 Joshua Moerman. All rights reserved. -// - -#include "Polynomial.hpp" -#include - - -unsigned int calculateNumberOfParameters(const unsigned int dimension, const unsigned int orde) { - double n_coef = orde + 1; - for(unsigned int i = 2; i <= dimension; i++) { - n_coef = n_coef*(orde + i)/(i - 1); - } - - const unsigned int output = (unsigned int) n_coef; - return output; -} - - -#pragma mark - -#pragma mark ctors - -Polynomial::Polynomial(): - AttractorKernel(3, calculateNumberOfParameters(3, 2)), orde(2) {} - -Polynomial::Polynomial(const unsigned int dimension, const unsigned int orde): - AttractorKernel(dimension, calculateNumberOfParameters(dimension, orde)), orde(orde) {} - - -#pragma mark - -#pragma mark attractor - -void Polynomial::operator()() { - std::swap(vectorNew, vectorOld); - - unsigned int m = 0; - for(unsigned int i = 0; i < dimension; i++) { - - vectorNew[i] = parameters[m]; - m++; - recur(i, 0, 1, m); - } -} - -void Polynomial::recur(unsigned int curr_dimension, unsigned int prev_i, unsigned int n, unsigned int& m, double prev_product) { - double product; - for(unsigned int i = prev_i; i < dimension; i++) { - - product = prev_product * vectorOld[i]; - vectorNew[curr_dimension] += parameters[m] * product; - m++; - if(n < orde) { - recur(curr_dimension, i, n+1, m, product); - } - } -} - - - - - - diff --git a/kernels/Polynomial.hpp b/kernels/Polynomial.hpp index 94335a8..fd90553 100644 --- a/kernels/Polynomial.hpp +++ b/kernels/Polynomial.hpp @@ -3,20 +3,52 @@ #include "../AttractorKernel.hpp" +unsigned int calculateNumberOfParameters(const unsigned int dimension, const unsigned int orde) { + double n_coef = orde + 1; + for(unsigned int i = 2; i <= dimension; i++) { + n_coef = n_coef*(orde + i)/(i - 1); + } + + const unsigned int output = (unsigned int) n_coef; + return output; +} + + class Polynomial : public AttractorKernel { private: - unsigned int orde; - void recur(unsigned int curr_dimension, unsigned int prev_i, unsigned int n, unsigned int& m, double prev_product=1.0); + void recur(unsigned int curr_dimension, unsigned int prev_i, unsigned int n, unsigned int& m, double prev_product=1.0) { + double product; + for(unsigned int i = prev_i; i < dimension; i++) { + + product = prev_product * vectorOld[i]; + vectorNew[curr_dimension] += parameters[m] * product; + m++; + if(n < orde) { + recur(curr_dimension, i, n+1, m, product); + } + } + } public: + Polynomial(): + AttractorKernel(3, calculateNumberOfParameters(3, 2)), orde(2) {} + + Polynomial(const unsigned int dimensions, const unsigned int orde): + AttractorKernel(dimension, calculateNumberOfParameters(dimension, orde)), orde(orde) {} - Polynomial(); - Polynomial(const unsigned int dimensions, const unsigned int orde); + virtual void operator()() { + std::swap(vectorNew, vectorOld); - virtual void operator()(); + unsigned int m = 0; + for(unsigned int i = 0; i < dimension; i++) { + vectorNew[i] = parameters[m]; + m++; + recur(i, 0, 1, m); + } + } }; #endif // POLYNOMIAL_HPP diff --git a/kernels/PolynomialA3D.cpp b/kernels/PolynomialA3D.cpp deleted file mode 100644 index 71485cd..0000000 --- a/kernels/PolynomialA3D.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// $filename -// $projectname -// -// Created by Joshua moerman on $TODAY. -// Copyright 2010 Joshua Moerman. All rights reserved. -// - -#include "PolynomialA3D.hpp" -#include - - -#pragma mark - -#pragma mark ctors - -PolynomialA3D::PolynomialA3D(): - AttractorKernel(3, 3) {} - - -#pragma mark - -#pragma mark attractor - -void PolynomialA3D::operator()() { - std::swap(vectorNew, vectorOld); - - vectorNew[0] = parameters[0] + vectorOld[1] - vectorOld[1]*vectorOld[2]; - vectorNew[1] = parameters[1] + vectorOld[2] - vectorOld[2]*vectorOld[0]; - vectorNew[2] = parameters[2] + vectorOld[0] - vectorOld[0]*vectorOld[1]; -} - -/* -N dimensional: - for ( unsigned int i = 0; i < dim; i++ ) { - new_point[i] = param[i] + point[(i+1) % dim] - point[(i+1) % dim]*point[(i+2) % dim]; - } -*/ diff --git a/kernels/PolynomialA3D.hpp b/kernels/PolynomialA3D.hpp index 6f5c3ff..76aeb43 100644 --- a/kernels/PolynomialA3D.hpp +++ b/kernels/PolynomialA3D.hpp @@ -4,14 +4,17 @@ #include "../AttractorKernel.hpp" class PolynomialA3D : public AttractorKernel { -private: - public: + PolynomialA3D(): + AttractorKernel(3, 3) {} - PolynomialA3D(); - - virtual void operator()(); + virtual void operator()() { + std::swap(vectorNew, vectorOld); + vectorNew[0] = parameters[0] + vectorOld[1] - vectorOld[1]*vectorOld[2]; + vectorNew[1] = parameters[1] + vectorOld[2] - vectorOld[2]*vectorOld[0]; + vectorNew[2] = parameters[2] + vectorOld[0] - vectorOld[0]*vectorOld[1]; + } }; #endif // POLYNOMIALA3D_HPP diff --git a/kernels/Unravel3D.cpp b/kernels/Unravel3D.cpp deleted file mode 100644 index cea3482..0000000 --- a/kernels/Unravel3D.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "Unravel3D.hpp" -#include -#include - - -#pragma mark - -#pragma mark ctors - -Unravel3D::Unravel3D(): - AttractorKernel(3, 7) {} - - -#pragma mark - -#pragma mark attractor - -void Unravel3D::operator()() { - std::swap(vectorNew, vectorOld); - - vectorNew[0] = parameters[0]*(vectorOld[2] + parameters[1]); - vectorNew[1] = parameters[2]*(vectorOld[0] + parameters[3]); - vectorNew[2] = parameters[4]*(vectorOld[1] + parameters[5]); - - const double dist = vectorNew[0]*vectorNew[0] + vectorNew[1]*vectorNew[1] + vectorNew[2]*vectorNew[2]; - - if(dist > parameters[6]*parameters[6]) { - const double sqrtDist = std::sqrt(dist); - const double p = 1.0 - parameters[6] * (static_cast(sqrtDist / parameters[6]) + 1.0) / sqrtDist; - vectorNew[0] *= p; - vectorNew[1] *= p; - vectorNew[2] *= p; - } -} - diff --git a/kernels/Unravel3D.hpp b/kernels/Unravel3D.hpp index a9106f6..69f9b74 100644 --- a/kernels/Unravel3D.hpp +++ b/kernels/Unravel3D.hpp @@ -3,13 +3,30 @@ #include "../AttractorKernel.hpp" +#include + class Unravel3D : public AttractorKernel { public: + Unravel3D(): + AttractorKernel(3, 7) {} + + virtual void operator()() { + std::swap(vectorNew, vectorOld); + + vectorNew[0] = parameters[0]*(vectorOld[2] + parameters[1]); + vectorNew[1] = parameters[2]*(vectorOld[0] + parameters[3]); + vectorNew[2] = parameters[4]*(vectorOld[1] + parameters[5]); - Unravel3D(); - Unravel3D(const unsigned int dimensions); + const double dist = vectorNew[0]*vectorNew[0] + vectorNew[1]*vectorNew[1] + vectorNew[2]*vectorNew[2]; - virtual void operator()(); + if(dist > parameters[6]*parameters[6]) { + const double sqrtDist = std::sqrt(dist); + const double p = 1.0 - parameters[6] * (static_cast(sqrtDist / parameters[6]) + 1.0) / sqrtDist; + vectorNew[0] *= p; + vectorNew[1] *= p; + vectorNew[2] *= p; + } + } };