all kernels
This commit is contained in:
parent
03078a61ad
commit
12fa75b7f6
5 changed files with 139 additions and 90 deletions
|
@ -26,12 +26,6 @@ Attractor::Attractor():
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Attractor::Attractor(unsigned int dimensions, FormulaChoice formula, unsigned int orde):
|
|
||||||
dim(dimensions), formula(formula), orde(orde), param(NULL), point(NULL), new_point(NULL) {
|
|
||||||
|
|
||||||
init(dimensions, formula, orde);
|
|
||||||
}
|
|
||||||
|
|
||||||
Attractor::Attractor(const char* const filename) {
|
Attractor::Attractor(const char* const filename) {
|
||||||
ifstream file(filename);
|
ifstream file(filename);
|
||||||
|
|
||||||
|
@ -42,6 +36,8 @@ Attractor::Attractor(const char* const filename) {
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO : Use stfu
|
||||||
|
|
||||||
/*
|
/*
|
||||||
file.attr:
|
file.attr:
|
||||||
lorenz
|
lorenz
|
||||||
|
@ -95,46 +91,6 @@ Attractor::Attractor(const char* const filename) {
|
||||||
|
|
||||||
void Attractor::init(unsigned int dim_in, FormulaChoice formula_in, unsigned int orde_in) {
|
void Attractor::init(unsigned int dim_in, FormulaChoice formula_in, unsigned int orde_in) {
|
||||||
|
|
||||||
dim = dim_in;
|
|
||||||
formula = formula_in;
|
|
||||||
orde = orde_in;
|
|
||||||
|
|
||||||
switch (formula) {
|
|
||||||
case LOGISTIC: {
|
|
||||||
par = dim;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
cout << "Formula not recognized" << endl;
|
|
||||||
exit(1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init_vector();
|
|
||||||
init_param();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Attractor::init_vector() {
|
|
||||||
point = new double[dim];
|
|
||||||
new_point = new double[dim];
|
|
||||||
|
|
||||||
assert(point != NULL);
|
|
||||||
assert(new_point != NULL);
|
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < dim; i++ ) {
|
|
||||||
point[i] = new_point[i] = 0.9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Attractor::init_param() {
|
|
||||||
param = new double[par];
|
|
||||||
|
|
||||||
assert(param != NULL);
|
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < dim; i++ ) {
|
|
||||||
param[i] = 0.0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Attractor::init_range() {
|
void Attractor::init_range() {
|
||||||
|
@ -201,46 +157,9 @@ bool Attractor::is_chaos() {
|
||||||
Iteration & Math
|
Iteration & Math
|
||||||
*/
|
*/
|
||||||
void Attractor::iterate() {
|
void Attractor::iterate() {
|
||||||
// pointer swap
|
// attractorKernel->iterate()
|
||||||
double * temp = point;
|
|
||||||
point = new_point;
|
|
||||||
new_point = temp;
|
|
||||||
|
|
||||||
// calculations
|
|
||||||
switch (formula) {
|
|
||||||
|
|
||||||
case LOGISTIC:
|
|
||||||
logistic();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
cout << "Formula not recognized" << endl;
|
|
||||||
exit(1);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HARDDEBUG
|
|
||||||
cout << "Formula " << formula << " is done" << endl;
|
|
||||||
cout << "Old Vector: ";
|
|
||||||
for ( unsigned int i = 0; i < dim; i++ ) {
|
|
||||||
cout << point[i] << " ";
|
|
||||||
}
|
|
||||||
cout << endl << "Fresh Vector: ";
|
|
||||||
for ( unsigned int i = 0; i < dim; i++ ) {
|
|
||||||
cout << new_point[i] << " ";
|
|
||||||
}
|
|
||||||
cout << endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Attractor::logistic() {
|
|
||||||
for ( unsigned int i = 0; i < dim; i++ ) {
|
|
||||||
new_point[i] = param[i]*point[i]*(1.0 - point[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Attractor::plot() {
|
void Attractor::plot() {
|
||||||
for ( vector<Projector *>::iterator it = projectors.begin(); it != projectors.end(); it++ ) {
|
for ( vector<Projector *>::iterator it = projectors.begin(); it != projectors.end(); it++ ) {
|
||||||
(*it)->plot(point);
|
(*it)->plot(point);
|
||||||
|
|
|
@ -32,13 +32,11 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Attractor();
|
Attractor();
|
||||||
Attractor(unsigned int dimensions, FormulaChoice formula, unsigned int orde = 3);
|
|
||||||
Attractor(const char* const filename);
|
Attractor(const char* const filename);
|
||||||
|
|
||||||
void init(unsigned int dimensions, FormulaChoice formula, unsigned int orde);
|
void init(unsigned int dimensions, FormulaChoice formula, unsigned int orde);
|
||||||
|
|
||||||
void init_vector();
|
|
||||||
void init_param();
|
|
||||||
void init_range();
|
void init_range();
|
||||||
|
|
||||||
// TODO : lyapunov exponent uit rekenen
|
// TODO : lyapunov exponent uit rekenen
|
||||||
|
@ -47,9 +45,6 @@ public:
|
||||||
|
|
||||||
// TODO : optimaliseren voor lage graads veeltermen
|
// TODO : optimaliseren voor lage graads veeltermen
|
||||||
void iterate();
|
void iterate();
|
||||||
void poly_A();
|
|
||||||
void poly_2();
|
|
||||||
void logistic();
|
|
||||||
|
|
||||||
void plot();
|
void plot();
|
||||||
void output();
|
void output();
|
||||||
|
|
92
kernels/Logistic.cpp
Normal file
92
kernels/Logistic.cpp
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
//
|
||||||
|
// $filename
|
||||||
|
// $projectname
|
||||||
|
//
|
||||||
|
// Created by Joshua moerman on $TODAY.
|
||||||
|
// Copyright 2010 Joshua Moerman. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Logistic.hpp"
|
||||||
|
|
||||||
|
Logistic::Logistic() {
|
||||||
|
dimension = 3;
|
||||||
|
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
Logistic::Logistic(const unsigned int dimension):
|
||||||
|
dimension(dimension) {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logistic::init() {
|
||||||
|
const unsigned int numberOfParameters = dimension;
|
||||||
|
|
||||||
|
if ( myParameters != NULL ) {
|
||||||
|
delete myParameters;
|
||||||
|
}
|
||||||
|
myParameters = new double[numberOfParameters];
|
||||||
|
|
||||||
|
if ( vectorNew != NULL ) {
|
||||||
|
delete vectorNew;
|
||||||
|
}
|
||||||
|
vectorNew = new double[dimension];
|
||||||
|
|
||||||
|
if ( vectorOld != NULL ) {
|
||||||
|
delete vectorOld;
|
||||||
|
}
|
||||||
|
vectorOld = new double[dimension];
|
||||||
|
|
||||||
|
assert(myParameters != NULL);
|
||||||
|
assert(vectorNew != NULL);
|
||||||
|
assert(vectorOld != NULL);
|
||||||
|
for ( unsigned int i = 0; i < numberOfParameters; i++ ) {
|
||||||
|
myParameters[i] = 0.0;
|
||||||
|
}
|
||||||
|
for ( unsigned int i = 0; i < dimension; i++ ) {
|
||||||
|
vectorNew[i] = vectorOld[i] = 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logistic::iterate() {
|
||||||
|
swap(vectorNew, vectorOld);
|
||||||
|
|
||||||
|
for ( unsigned int i = 0; i < dim; i++ ) {
|
||||||
|
new_point[i] = param[i]*point[i]*(1.0 - point[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// setters, getters, all i/o to other classes/objects
|
||||||
|
void * Logistic::getProperty(const string identifier) {
|
||||||
|
if ( identifier == "dimension" ) {
|
||||||
|
unsigned int * _return = new unsigned int;
|
||||||
|
*_return = dimension;
|
||||||
|
return _return;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logistic::setProperty(const string identifier, const void * _value) {
|
||||||
|
if ( identifier == "dimension" ) {
|
||||||
|
unsigned int * value = (unsigned int*) _value;
|
||||||
|
dimension = *value;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double * & Logistic::parameters() {
|
||||||
|
return myParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
double & Logistic::parameter(const unsigned int index) {
|
||||||
|
return myParameters[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
double * & Logistic::vector() {
|
||||||
|
return vectorNew;
|
||||||
|
}
|
||||||
|
|
||||||
|
double * & Logistic::previousVector() {
|
||||||
|
return vectorOld;
|
||||||
|
}
|
42
kernels/Logistic.hpp
Normal file
42
kernels/Logistic.hpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef LOGISTIC_HPP
|
||||||
|
#define LOGISTIC_HPP
|
||||||
|
|
||||||
|
#include "../AttractorKernel.hpp"
|
||||||
|
|
||||||
|
class Logistic : AttractorKernel {
|
||||||
|
double * myParameters;
|
||||||
|
|
||||||
|
double * vectorNew;
|
||||||
|
double * vectorOld;
|
||||||
|
|
||||||
|
unsigned int dimension;
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Logistic();
|
||||||
|
Logistic(const unsigned int dimension);
|
||||||
|
|
||||||
|
// parameters are stored in a array of doubles
|
||||||
|
// if you want to use other types, use the properties
|
||||||
|
virtual double& parameter(const unsigned int index);
|
||||||
|
virtual double*& parameters();
|
||||||
|
|
||||||
|
// get properties of the attractor
|
||||||
|
// such as the dimension
|
||||||
|
// you should delete the void pointer if you used it
|
||||||
|
virtual void * getProperty(const string identifier);
|
||||||
|
virtual void setProperty(const string identifier, const void * value);
|
||||||
|
|
||||||
|
// iterate his formula
|
||||||
|
// vector pointers will be swapped! so new remains new and old remains old
|
||||||
|
virtual void iterate();
|
||||||
|
|
||||||
|
// getter functions for teh resulta
|
||||||
|
virtual double * & vector();
|
||||||
|
virtual double * & previousVector();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // LOGISTIC_HPP
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
// Copyright 2010 Joshua Moerman. All rights reserved.
|
// Copyright 2010 Joshua Moerman. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include "Polynomial.hpp"
|
||||||
|
|
||||||
Polynomial::Polynomial() {
|
Polynomial::Polynomial() {
|
||||||
dimension = 3;
|
dimension = 3;
|
||||||
|
|
Reference in a new issue