25 #include <NumtoolsLib/NumtoolsLib.h>
26 #include <gsl/gsl_matrix.h>
27 #include <gsl/gsl_errno.h>
34 int sigmoid(
double,
const double y[],
double f[],
void *params) {
38 + p_parameter->_rate_maximum
39 / (1 + exp(-p_parameter->_f_noise * p_parameter->_f_input - p_parameter->_f_bias)))
40 / p_parameter->_time_membrane;
45 int sigmoidprime(
double ,
const double[],
double *dfdy,
double dfdt[],
48 gsl_matrix_view dfdy_mat = gsl_matrix_view_array(dfdy, 1, 1);
50 gsl_matrix * m = &dfdy_mat.matrix;
52 gsl_matrix_set(m, 0, 0, -1 / p_parameter->_time_membrane);
73 getInitialState(), 0, 0,
88 NumtoolsLib::DVIntegratorStateParameter<WilsonCowanParameter> parameter_dv;
90 parameter_dv._vector_state = std::vector<double>(1, 0);
91 parameter_dv._time_begin = simParam.
getTBegin();
92 parameter_dv._time_end = simParam.
getTEnd();
93 parameter_dv._time_step = simParam.
getTStep();
94 parameter_dv._time_current = simParam.
getTBegin();
98 parameter_dv._number_maximum_iterations =
105 const std::vector<double>& weightVector,
Time time) {
107 double f_inner_product =
innerProduct(nodeVector, weightVector);
109 _integrator.Parameter()._f_input = f_inner_product;
114 }
catch (NumtoolsLib::DVIntegratorException& except) {
115 if (except.Code() == NumtoolsLib::NUMBER_ITERATIONS_EXCEEDED)
133 const std::vector<double>& weightVector) {
135 assert(nodeVector.size()==weightVector.size());
137 if (nodeVector.begin() == nodeVector.end())
140 return std::inner_product(nodeVector.begin(), nodeVector.end(),
141 weightVector.begin(), 0.0);
double innerProduct(const std::vector< Rate > &nodeVector, const std::vector< double > &weightVector)
int sigmoidprime(double, const double[], double *dfdy, double dfdt[], void *params)
virtual void evolveNodeState(const std::vector< Rate > &nodeVector, const std::vector< double > &weightVector, Time time)
WilsonCowanParameter _parameter
The interface for all algorithm classes.
const double WC_ABSOLUTE_PRECISION
virtual Time getCurrentTime() const
const std::string STR_NUMBER_ITERATIONS_EXCEEDED("The predetermined number of iterations is exceeded in Evolve()")
virtual Rate getCurrentRate() const
virtual ~WilsonCowanAlgorithm()
Number getMaximumNumberIterations() const
NumtoolsLib::DVIntegrator< WilsonCowanParameter > _integrator
virtual WilsonCowanAlgorithm * clone() const
const double WC_RELATIVE_PRECISION
Parameter determining how a simulation is run. Specifiying begin and end time, log file names...
virtual AlgorithmGrid getGrid(NodeId, bool b_state=true) const
const int WILSON_COWAN_STATE_DIMENSION
Wilson Cowan nodes have single double as state.
int sigmoid(double, const double y[], double f[], void *params)
virtual void configure(const SimulationRunParameter &simParam)
std::vector< double > getInitialState() const
The background of this algorithm is described on page The Wilson-Cowan Algorithm. An example of a ful...