Joshua
15 years ago
12 changed files with 294 additions and 76 deletions
@ -1,4 +1,4 @@ |
|||
#include "Lorenz.hpp" |
|||
#include "Lorenz3D.hpp" |
|||
|
|||
Lorenz::Lorenz() { |
|||
init(); |
@ -0,0 +1,134 @@ |
|||
//
|
|||
// $filename
|
|||
// $projectname
|
|||
//
|
|||
// Created by Joshua moerman on $TODAY.
|
|||
// Copyright 2010 Joshua Moerman. All rights reserved.
|
|||
//
|
|||
|
|||
|
|||
Polynomial::Polynomial() { |
|||
dimension = 3; |
|||
orde = 2; |
|||
|
|||
init(); |
|||
} |
|||
|
|||
Polynomial::Polynomial(const unsigned int dimension, const unsigned int orde): |
|||
dimension(dimension), orde(orde) { |
|||
init(); |
|||
} |
|||
|
|||
void Polynomial::init(){ |
|||
calculateNumberOfParameters(); |
|||
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.0; |
|||
} |
|||
} |
|||
|
|||
void Polynomial::calculateNumberOfParameters(){ |
|||
double n_coef = orde + 1; |
|||
for (unsigned int i = 2; i <= dim; i++) { |
|||
n_coef = n_coef*(orde + i)/(i - 1); |
|||
} |
|||
|
|||
numberOfParameters = (unsigned int) n_coef; |
|||
} |
|||
|
|||
void Polynomial::iterate() { |
|||
unsigned int m = 0; |
|||
for ( unsigned int i = 0; i < dim; i++ ) { |
|||
|
|||
#ifdef HARDDEBUG |
|||
cout << "Entering new dimension: " << i << " With m = " << m << endl; |
|||
#endif |
|||
|
|||
new_point[i] = param[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 < dim; i++) { |
|||
|
|||
#ifdef HARDDEBUG |
|||
for ( unsigned int j = 0; j < n; j++ ) |
|||
cout << " "; |
|||
cout << "Calculation in dimension: " << i << " With m = " << m << " And depth = " << n << endl; |
|||
#endif |
|||
|
|||
product = prev_product * point[i]; |
|||
new_point[curr_dimension] += param[m] * product; |
|||
m++; |
|||
if (n < orde) { |
|||
recur(curr_dimension, i, n+1, m, product); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
// setters, getters, all i/o to other classes/objects
|
|||
void * Polynomial::getProperty(const string identifier) { |
|||
if ( identifier == "dimension" ) { |
|||
unsigned int * _return = new unsigned int; |
|||
*_return = dimension; |
|||
return _return; |
|||
} else if ( identifier == "orde" ) { |
|||
unsigned int * _return = new unsigned int; |
|||
*_return = orde; |
|||
return _return; |
|||
} |
|||
return NULL; |
|||
} |
|||
|
|||
void Polynomial::setProperty(const string identifier, const void * _value) { |
|||
if ( identifier == "dimension" ) { |
|||
unsigned int * value = (unsigned int*) _value; |
|||
dimension = *value; |
|||
init(); |
|||
} else if ( identifier == "orde" ) { |
|||
unsigned int * value = (unsigned int*) _value; |
|||
orde = *value; |
|||
init(); |
|||
} |
|||
} |
|||
|
|||
double * & Polynomial::parameters() { |
|||
return myParameters; |
|||
} |
|||
|
|||
double & Polynomial::parameter(const unsigned int index) { |
|||
return myParameters[index]; |
|||
} |
|||
|
|||
double * & Polynomial::vector() { |
|||
return vectorNew; |
|||
} |
|||
|
|||
double * & Polynomial::previousVector() { |
|||
return vectorOld; |
|||
} |
@ -0,0 +1,48 @@ |
|||
#ifndef POLYNOMIAL_HPP |
|||
#define POLYNOMIAL_HPP |
|||
|
|||
#include "../AttractorKernel.hpp" |
|||
|
|||
class Polynomial : public AttractorKernel { |
|||
|
|||
double * myParameters; |
|||
|
|||
double * vectorNew; |
|||
double * vectorOld; |
|||
|
|||
unsigned int dimension; |
|||
unsigned int orde; |
|||
unsigned int numberOfParameters; |
|||
|
|||
void init(); |
|||
void calculateNumberOfParameters(); |
|||
void recur(unsigned int curr_dimension, unsigned int prev_i, unsigned int n, unsigned int& m, double prev_product); |
|||
|
|||
public: |
|||
|
|||
Polynomial(); |
|||
Polynomial(const unsigned int dimensions, const unsigned int orde); |
|||
|
|||
// 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 // POLYNOMIAL_HPP
|
|||
|
@ -0,0 +1,60 @@ |
|||
//
|
|||
// $filename
|
|||
// $projectname
|
|||
//
|
|||
// Created by Joshua moerman on $TODAY.
|
|||
// Copyright 2010 Joshua Moerman. All rights reserved.
|
|||
//
|
|||
|
|||
const static unsigned int dimension = 3; |
|||
const static unsigned int numberOfParameters = 3; |
|||
|
|||
PolynomialA3D::PolynomialA3D(){ |
|||
init(); |
|||
} |
|||
|
|||
void PolynomialA3D::init(){ |
|||
myParameters = new double[numberOfParameters]; |
|||
vectorNew = new double[dimension]; |
|||
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.0; |
|||
} |
|||
} |
|||
|
|||
// setters, getters, all i/o to other classes/objects
|
|||
void * PolynomialA3D::getProperty(const string identifier) { |
|||
if ( identifier == "dimension" ) { |
|||
unsigned int * _return = new unsigned int; |
|||
*_return = dimension; |
|||
return _return; |
|||
} |
|||
return NULL; |
|||
} |
|||
|
|||
void PolynomialA3D::setProperty(const string identifier, const void * _value) { |
|||
|
|||
} |
|||
|
|||
double * & PolynomialA3D::parameters() { |
|||
return myParameters; |
|||
} |
|||
|
|||
double & PolynomialA3D::parameter(const unsigned int index) { |
|||
return myParameters[index]; |
|||
} |
|||
|
|||
double * & PolynomialA3D::vector() { |
|||
return vectorNew; |
|||
} |
|||
|
|||
double * & PolynomialA3D::previousVector() { |
|||
return vectorOld; |
|||
} |
@ -0,0 +1,42 @@ |
|||
#ifndef POLYNOMIALA3D_HPP |
|||
#define POLYNOMIALA3D_HPP |
|||
|
|||
#include "../AttractorKernel.hpp" |
|||
|
|||
class PolynomialA3D : public AttractorKernel { |
|||
// of course this can be seen as a subclasse of Polynomial
|
|||
|
|||
double * myParameters; |
|||
|
|||
double * vectorNew; |
|||
double * vectorOld; |
|||
|
|||
void init(); |
|||
|
|||
public: |
|||
|
|||
PolynomialA3D(); |
|||
|
|||
// 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 // POLYNOMIALA3D_HPP
|
|||
|
@ -1,4 +1,4 @@ |
|||
#include "Unravel.hpp" |
|||
#include "Unravel3D.hpp" |
|||
|
|||
Unravel::Unravel(){ |
|||
init(); |
Reference in new issue