Browse Source

another file to header

master
Joshua Moerman (joshua-desktop) 13 years ago
parent
commit
1a00cc60dd
  1. 85
      Attractor.cpp
  2. 61
      Attractor.hpp

85
Attractor.cpp

@ -1,27 +1,12 @@
#include "Attractor.hpp"
#include "Logger.hpp"
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
#include "stfu/stf.hpp"
#include "AttractorKernel.hpp"
#include "Projector.hpp"
Attractor::Attractor(const std::string& filename) : kernel(0), projector(0) {
// opening file
LogInfo("Reading file '%s'...\n", filename.c_str());
stfu::node system;
system.read(filename.c_str());
kernel = AttractorKernel::createAttractorKernel(system.getChild("AttractorKernel"));
projector = Projector::createProjector(system.getChild(system.getValue("Projector")), kernel->getDimension());
}
Attractor::Attractor() :
kernel(0), projector(0) {
stfu::node kernel_node;
@ -49,81 +34,11 @@ Attractor::Attractor() :
break;
}
std::cout << kernel_node << std::endl;
kernel = AttractorKernel::createAttractorKernel(kernel_node);
kernel->generate_random_parameters();
stfu::node projector_node;
projector_node.value("dimensions") = "2";
std::cout << projector_node << std::endl;
projector = Projector::createProjector(projector_node, kernel->getDimension());
}
Attractor::~Attractor() {
delete kernel;
}
// this should probably done in the projector section
void Attractor::init_range() {
// stabilize attractor
for(unsigned int i = 0; i < 1000000; i++) {
iterate();
if(kernel->convergent() || kernel->divergent()){
kernel->generate_random_parameters();
LogDebug("Generating new parameters.\n");
}
}
}
bool Attractor::is_chaos() {
/*
check existence of attractor:
Escaping
Single point attractor
Lyapunov exponent
*/
/*
double sum = 0;
for ( unsigned int i = 0; i < dim; i++ ) {
const double dist = 0; //new_point[i] - point[i];
sum += dist*dist;
}
if ( sum >= 1.0e7 ) {
// big change => Escaping
return false;
}
if ( sum <= 1.0e-7 ) {
// small change => singularity
return false;
}
return true;
*/
return true;
}
void Attractor::iterate() {
(*kernel)();
}
void Attractor::plot() {
const double* point = kernel->vector();
projector->plot(point);
}
/*
IO & control
*/
void Attractor::output() {
const unsigned int dimension = kernel->getDimension();
const double* point = kernel->vector();
for(unsigned int i = 0; i < dimension; i++) {
LogMoreInfo("%f, ", point[i]);
}
LogMoreInfo("\n");
}

61
Attractor.hpp

@ -1,35 +1,66 @@
#ifndef ATTRACTOR_HPP
#define ATTRACTOR_HPP
#include "Logger.hpp"
#include <fstream>
#include <string>
#include <vector>
class Projector;
class AttractorKernel;
#include "AttractorKernel.hpp"
#include "Projector.hpp"
class Attractor {
private:
AttractorKernel* kernel;
public:
// should be private really
Projector* projector;
Attractor(const std::string& filename);
Attractor(const std::string& filename) {
LogInfo("Reading file '%s'...\n", filename.c_str());
stfu::node system;
system.read(filename.c_str());
kernel = AttractorKernel::createAttractorKernel(system.getChild("AttractorKernel"));
projector = Projector::createProjector(system.getChild(system.getValue("Projector")), kernel->getDimension());
}
Attractor();
~Attractor();
void init_range();
bool is_chaos();
~Attractor() {
delete kernel;
}
void init_range() {
for(unsigned int i = 0; i < 1000000; i++) {
iterate();
if(kernel->convergent() || kernel->divergent()){
kernel->generate_random_parameters();
LogDebug("Generating new parameters.\n");
}
}
}
void iterate() {
(*kernel)();
}
void plot() {
projector->plot(kernel->vector());
}
void iterate();
void plot();
void output();
void output() {
const unsigned int dimension = kernel->getDimension();
const double* point = kernel->vector();
for(unsigned int i = 0; i < dimension; i++) {
LogMoreInfo("%f, ", point[i]);
}
LogMoreInfo("\n");
}
friend std::ostream& operator<<(std::ostream& os, Attractor const& x);
private:
AttractorKernel* kernel;
};
#endif // ATTRACTOR_HPP