Update of /cvsroot/pure-data/externals/tb/chaos/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22747
Modified Files: chaos.hpp chua.hpp driven_van_der_pol.hpp duffing.hpp latoomutgamma.hpp linear_congruental.hpp ode_base.hpp tent_map.hpp Log Message: cleanups
Index: latoomutgamma.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/latoomutgamma.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** latoomutgamma.hpp 21 May 2006 19:17:04 -0000 1.8 --- latoomutgamma.hpp 6 Sep 2006 20:32:21 -0000 1.9 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 28,85 ****
class latoomutgamma ! : public map_base<2> { public: ! latoomutgamma() ! { ! CHAOS_SYS_INIT(x1,0.5,0); ! CHAOS_SYS_INIT(x2,0.5,1); ! ! CHAOS_PAR_INIT(a,-0.966918); ! CHAOS_PAR_INIT(b,2.879879); ! }
! void m_step() ! { ! data_t x1 = m_data[0], x2 = m_data[1]; ! data_t a = CHAOS_PARAMETER(a), b = CHAOS_PARAMETER(b); ! data_t tmp; ! ! tmp = sin(x1*b); ! m_data[0] = CHAOS_ABS(sin(x2*b)) + tmp*tmp; ! tmp = sin(x2*a); ! m_data[1] = CHAOS_ABS(sin(x1*a)) + tmp*tmp; ! }
! /* function has a fix point for x1 == x2 == 0 */ ! void m_verify() ! { ! if (m_data[0] == 0 && m_data[1] == 0) ! for (int i = 0; i != 2; ++i) ! m_data[i] = rand_range(-1,1); ! } ! ! CHAOS_SYSVAR_FUNCS(x1, 0); ! CHAOS_SYSVAR_FUNCS(x2, 1);
! CHAOS_SYSPAR_FUNCS(a); ! CHAOS_SYSPAR_FUNCS(b); };
! #define LATOOMUTGAMMA_CALLBACKS \ ! MAP_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(x1); \ ! CHAOS_SYS_CALLBACKS(x2); \ ! CHAOS_SYS_CALLBACKS(a); \ CHAOS_SYS_CALLBACKS(b);
! #define LATOOMUTGAMMA_ATTRIBUTES \ ! MAP_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(x1); \ ! CHAOS_SYS_ATTRIBUTE(x2); \ ! CHAOS_SYS_ATTRIBUTE(a); \ CHAOS_SYS_ATTRIBUTE(b);
--- 28,85 ----
class latoomutgamma ! : public map_base<2> { public: ! latoomutgamma() ! { ! CHAOS_SYS_INIT(x1,0.5,0); ! CHAOS_SYS_INIT(x2,0.5,1);
! CHAOS_PAR_INIT(a,-0.966918); ! CHAOS_PAR_INIT(b,2.879879); ! }
+ void m_step() + { + data_t x1 = m_data[0], x2 = m_data[1]; + data_t a = CHAOS_PARAMETER(a), b = CHAOS_PARAMETER(b); + data_t tmp;
! tmp = sin(x1*b); ! m_data[0] = std::abs(sin(x2*b)) + tmp*tmp; ! tmp = sin(x2*a); ! m_data[1] = std::abs(sin(x1*a)) + tmp*tmp; ! }
! ! /* function has a fix point for x1 == x2 == 0 */ ! void m_verify() ! { ! if (m_data[0] == 0 && m_data[1] == 0) ! for (int i = 0; i != 2; ++i) ! m_data[i] = rand_range(-1,1); ! } ! ! CHAOS_SYSVAR_FUNCS(x1, 0); ! CHAOS_SYSVAR_FUNCS(x2, 1); ! ! CHAOS_SYSPAR_FUNCS(a); ! CHAOS_SYSPAR_FUNCS(b); };
! #define LATOOMUTGAMMA_CALLBACKS \ ! MAP_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(x1); \ ! CHAOS_SYS_CALLBACKS(x2); \ ! CHAOS_SYS_CALLBACKS(a); \ CHAOS_SYS_CALLBACKS(b);
! #define LATOOMUTGAMMA_ATTRIBUTES \ ! MAP_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(x1); \ ! CHAOS_SYS_ATTRIBUTE(x2); \ ! CHAOS_SYS_ATTRIBUTE(a); \ CHAOS_SYS_ATTRIBUTE(b);
Index: duffing.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/duffing.hpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** duffing.hpp 21 May 2006 18:34:34 -0000 1.2 --- duffing.hpp 6 Sep 2006 20:32:21 -0000 1.3 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2005 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2005 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 23,94 **** // duffing equation: dx/dt = y // dy/dt = x * (1 - x^2) + R*cos(omega * t) - gamma * y ! //
class duffing: ! public ode_base<2> { public: ! duffing() ! { ! CHAOS_PAR_INIT(method,0); ! CHAOS_PAR_INIT(dt,0.01); ! ! CHAOS_SYS_INIT(x, 0.5, 0); ! CHAOS_SYS_INIT(y, 0.5, 1); ! ! CHAOS_PAR_INIT(R, 0.4); ! CHAOS_PAR_INIT(omega, 1); ! CHAOS_PAR_INIT(gamma, 0.25); ! ! t = 0; ! }
! virtual void m_system(data_t* deriv, data_t* data) ! { ! data_t x = data[0], y = data[1];
! deriv[0] = y; ! deriv[1] = x * (1 - x*x) + ! CHAOS_PARAMETER(R) * cos( CHAOS_PARAMETER(omega) * t) - ! CHAOS_PARAMETER(gamma) * y; ! t += CHAOS_PARAMETER(dt); ! t = chaos_mod(t, M_PI); ! }
- virtual void m_verify() - { - if (m_data[0] == 0 && m_data[1] == 0 && m_data[2] == 0) - for (int i = 0; i != 3; ++i) - m_data[i] = rand_range(0,3); - }
! CHAOS_SYSVAR_FUNCS(x,0); ! CHAOS_SYSVAR_FUNCS(y,1);
! CHAOS_SYSPAR_FUNCS(R); ! CHAOS_SYSPAR_FUNCS(omega); ! CHAOS_SYSPAR_FUNCS(gamma);
private: ! data_t t; };
! #define DUFFING_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(x); \ ! CHAOS_SYS_CALLBACKS(y); \ ! CHAOS_SYS_CALLBACKS(R); \ ! CHAOS_SYS_CALLBACKS(gamma); \ CHAOS_SYS_CALLBACKS(omega);
! #define DUFFING_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(x); \ ! CHAOS_SYS_ATTRIBUTE(y); \ ! CHAOS_SYS_ATTRIBUTE(R); \ ! CHAOS_SYS_ATTRIBUTE(gamma); \ CHAOS_SYS_ATTRIBUTE(omega);
--- 23,94 ---- // duffing equation: dx/dt = y // dy/dt = x * (1 - x^2) + R*cos(omega * t) - gamma * y ! //
class duffing: ! public ode_base<2> { public: ! duffing() ! { ! CHAOS_PAR_INIT(method,0); ! CHAOS_PAR_INIT(dt,0.01);
+ CHAOS_SYS_INIT(x, 0.5, 0); + CHAOS_SYS_INIT(y, 0.5, 1);
! CHAOS_PAR_INIT(R, 0.4); ! CHAOS_PAR_INIT(omega, 1); ! CHAOS_PAR_INIT(gamma, 0.25);
! t = 0; ! }
+ virtual void m_system(data_t* deriv, data_t* data) + { + data_t x = data[0], y = data[1];
! deriv[0] = y; ! deriv[1] = x * (1 - x*x) + ! CHAOS_PARAMETER(R) * cos( CHAOS_PARAMETER(omega) * t) - ! CHAOS_PARAMETER(gamma) * y; ! t += CHAOS_PARAMETER(dt); ! t = std::fmod(t, data_t(M_PI)); ! }
! virtual void m_verify() ! { ! if (m_data[0] == 0 && m_data[1] == 0 && m_data[2] == 0) ! for (int i = 0; i != 3; ++i) ! m_data[i] = rand_range(0,3); ! } ! ! ! CHAOS_SYSVAR_FUNCS(x,0); ! CHAOS_SYSVAR_FUNCS(y,1); ! ! CHAOS_SYSPAR_FUNCS(R); ! CHAOS_SYSPAR_FUNCS(omega); ! CHAOS_SYSPAR_FUNCS(gamma);
private: ! data_t t; };
! #define DUFFING_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(x); \ ! CHAOS_SYS_CALLBACKS(y); \ ! CHAOS_SYS_CALLBACKS(R); \ ! CHAOS_SYS_CALLBACKS(gamma); \ CHAOS_SYS_CALLBACKS(omega);
! #define DUFFING_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(x); \ ! CHAOS_SYS_ATTRIBUTE(y); \ ! CHAOS_SYS_ATTRIBUTE(R); \ ! CHAOS_SYS_ATTRIBUTE(gamma); \ CHAOS_SYS_ATTRIBUTE(omega);
Index: tent_map.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/tent_map.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** tent_map.hpp 21 May 2006 19:17:04 -0000 1.8 --- tent_map.hpp 6 Sep 2006 20:32:21 -0000 1.9 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 27,61 ****
class tent_map: ! public map_base<1> { public: ! tent_map() ! { ! CHAOS_SYS_INIT(x, 0.6,0); ! } !
! void m_step() ! { ! data_t data = m_data[0]; ! ! m_data[0] = 1 - 2*CHAOS_ABS(data); ! } ! ! CHAOS_SYSVAR_FUNCS_PRED(x, 0, m_pred_x); ! bool m_pred_x(t_float f) ! { ! return (f > -1) && (f < 1); ! } };
! #define TENT_MAP_CALLBACKS \ ! MAP_CALLBACKS \ CHAOS_SYS_CALLBACKS(x);
! #define TENT_MAP_ATTRIBUTES \ ! MAP_ATTRIBUTES \ CHAOS_SYS_ATTRIBUTE(x); !
--- 27,61 ----
class tent_map: ! public map_base<1> { public: ! tent_map() ! { ! CHAOS_SYS_INIT(x, 0.6,0); ! }
! ! void m_step() ! { ! data_t data = m_data[0]; ! ! m_data[0] = 1 - 2*std::abs(data); ! } ! ! CHAOS_SYSVAR_FUNCS_PRED(x, 0, m_pred_x); ! bool m_pred_x(t_float f) ! { ! return (f > -1) && (f < 1); ! } };
! #define TENT_MAP_CALLBACKS \ ! MAP_CALLBACKS \ CHAOS_SYS_CALLBACKS(x);
! #define TENT_MAP_ATTRIBUTES \ ! MAP_ATTRIBUTES \ CHAOS_SYS_ATTRIBUTE(x); !
Index: driven_van_der_pol.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/driven_van_der_pol.hpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** driven_van_der_pol.hpp 21 May 2006 18:34:34 -0000 1.5 --- driven_van_der_pol.hpp 6 Sep 2006 20:32:21 -0000 1.6 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 31,95 ****
class driven_van_der_pol ! : public ode_base<3> { public: ! driven_van_der_pol() ! { ! CHAOS_PAR_INIT(method,2); ! CHAOS_PAR_INIT(dt,0.01);
! CHAOS_SYS_INIT(u1,0.8, 0); ! CHAOS_SYS_INIT(u2,0.6, 1); ! CHAOS_SYS_INIT(u3,0.4, 2);
! CHAOS_PAR_INIT(a,5); ! CHAOS_PAR_INIT(Omega,2.466); ! CHAOS_PAR_INIT(k,5); ! } !
- virtual void m_system(data_t* deriv, data_t* data) - { - data_t u1 = data[0], u2 = data[1], u3 = data[2]; - - deriv[0] = u2; - deriv[1] = - CHAOS_PARAMETER(a) * (u1*u1 -1) * u2 - u1 + - CHAOS_PARAMETER(k)*cos(u3); - deriv[2] = CHAOS_PARAMETER(Omega); - } - - virtual void m_verify() - { - /* make sure to stay in the range of 2 pi */ - if (m_data[2] > 2*M_PI) - m_data[2] = chaos_mod(m_data[2], 2*M_PI); - }
! CHAOS_SYSVAR_FUNCS(u1, 0); ! CHAOS_SYSVAR_FUNCS(u2, 1); ! CHAOS_SYSVAR_FUNCS(u3, 2);
! CHAOS_SYSPAR_FUNCS(a); ! CHAOS_SYSPAR_FUNCS(k); ! CHAOS_SYSPAR_FUNCS(Omega); };
! #define DRIVEN_VAN_DER_POL_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(u1); \ ! CHAOS_SYS_CALLBACKS(u2); \ ! CHAOS_SYS_CALLBACKS(u3); \ ! CHAOS_SYS_CALLBACKS(a); \ ! CHAOS_SYS_CALLBACKS(k); \ CHAOS_SYS_CALLBACKS(Omega);
! #define DRIVEN_VAN_DER_POL_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(u1); \ ! CHAOS_SYS_ATTRIBUTE(u2); \ ! CHAOS_SYS_ATTRIBUTE(u3); \ ! CHAOS_SYS_ATTRIBUTE(a); \ ! CHAOS_SYS_ATTRIBUTE(k); \ CHAOS_SYS_ATTRIBUTE(Omega); --- 31,95 ----
class driven_van_der_pol ! : public ode_base<3> { public: ! driven_van_der_pol() ! { ! CHAOS_PAR_INIT(method,2); ! CHAOS_PAR_INIT(dt,0.01);
! CHAOS_SYS_INIT(u1,0.8, 0); ! CHAOS_SYS_INIT(u2,0.6, 1); ! CHAOS_SYS_INIT(u3,0.4, 2);
! CHAOS_PAR_INIT(a,5); ! CHAOS_PAR_INIT(Omega,2.466); ! CHAOS_PAR_INIT(k,5); ! }
! void m_system(data_t* deriv, data_t* data) ! { ! data_t u1 = data[0], u2 = data[1], u3 = data[2];
! deriv[0] = u2; ! deriv[1] = - CHAOS_PARAMETER(a) * (u1*u1 -1) * u2 - u1 + ! CHAOS_PARAMETER(k)*cos(u3); ! deriv[2] = CHAOS_PARAMETER(Omega); ! } ! ! void m_verify() ! { ! /* make sure to stay in the range of 2 pi */ ! if (m_data[2] > 2*M_PI) ! m_data[2] = std::fmod(m_data[2], data_t(2*M_PI)); ! } ! ! CHAOS_SYSVAR_FUNCS(u1, 0); ! CHAOS_SYSVAR_FUNCS(u2, 1); ! CHAOS_SYSVAR_FUNCS(u3, 2); ! ! CHAOS_SYSPAR_FUNCS(a); ! CHAOS_SYSPAR_FUNCS(k); ! CHAOS_SYSPAR_FUNCS(Omega); };
! #define DRIVEN_VAN_DER_POL_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(u1); \ ! CHAOS_SYS_CALLBACKS(u2); \ ! CHAOS_SYS_CALLBACKS(u3); \ ! CHAOS_SYS_CALLBACKS(a); \ ! CHAOS_SYS_CALLBACKS(k); \ CHAOS_SYS_CALLBACKS(Omega);
! #define DRIVEN_VAN_DER_POL_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(u1); \ ! CHAOS_SYS_ATTRIBUTE(u2); \ ! CHAOS_SYS_ATTRIBUTE(u3); \ ! CHAOS_SYS_ATTRIBUTE(a); \ ! CHAOS_SYS_ATTRIBUTE(k); \ CHAOS_SYS_ATTRIBUTE(Omega);
Index: linear_congruental.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/linear_congruental.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** linear_congruental.hpp 21 May 2006 19:17:04 -0000 1.3 --- linear_congruental.hpp 6 Sep 2006 20:32:21 -0000 1.4 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 26,67 ****
class linear_congruental: ! public map_base<2> { public: ! linear_congruental() ! { ! CHAOS_SYS_INIT(x, 0, 0); ! ! CHAOS_PAR_INIT(A, 1741); ! CHAOS_PAR_INIT(B, 54773); ! CHAOS_PAR_INIT(C, 259200); ! }
! void m_step() ! { ! data_t x = m_data[0];
! m_data[0] = chaos_mod( CHAOS_PARAMETER(A) * x + CHAOS_PARAMETER(B), CHAOS_PARAMETER(C)); ! }
! CHAOS_SYSVAR_FUNCS(x,0);
! CHAOS_SYSPAR_FUNCS(A); ! CHAOS_SYSPAR_FUNCS(B); ! CHAOS_SYSPAR_FUNCS(C); };
! #define LINEAR_CONGRUENTAL_CALLBACKS \ ! MAP_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(A); \ ! CHAOS_SYS_CALLBACKS(B); \ ! CHAOS_SYS_CALLBACKS(C); \ CHAOS_SYS_CALLBACKS(x);
! #define LINEAR_CONGRUENTAL_ATTRIBUTES \ ! MAP_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(A); \ ! CHAOS_SYS_ATTRIBUTE(B); \ ! CHAOS_SYS_ATTRIBUTE(C); \ CHAOS_SYS_ATTRIBUTE(x);
--- 26,67 ----
class linear_congruental: ! public map_base<2> { public: ! linear_congruental() ! { ! CHAOS_SYS_INIT(x, 0, 0);
! CHAOS_PAR_INIT(A, 1741); ! CHAOS_PAR_INIT(B, 54773); ! CHAOS_PAR_INIT(C, 259200); ! }
! void m_step() ! { ! data_t x = m_data[0];
! m_data[0] = std::fmod( CHAOS_PARAMETER(A) * x + CHAOS_PARAMETER(B), CHAOS_PARAMETER(C)); ! }
! CHAOS_SYSVAR_FUNCS(x,0); ! ! CHAOS_SYSPAR_FUNCS(A); ! CHAOS_SYSPAR_FUNCS(B); ! CHAOS_SYSPAR_FUNCS(C); };
! #define LINEAR_CONGRUENTAL_CALLBACKS \ ! MAP_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(A); \ ! CHAOS_SYS_CALLBACKS(B); \ ! CHAOS_SYS_CALLBACKS(C); \ CHAOS_SYS_CALLBACKS(x);
! #define LINEAR_CONGRUENTAL_ATTRIBUTES \ ! MAP_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(A); \ ! CHAOS_SYS_ATTRIBUTE(B); \ ! CHAOS_SYS_ATTRIBUTE(C); \ CHAOS_SYS_ATTRIBUTE(x);
Index: chaos.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/chaos.hpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** chaos.hpp 10 Aug 2006 21:23:33 -0000 1.10 --- chaos.hpp 6 Sep 2006 20:32:21 -0000 1.11 *************** *** 39,57 **** #ifdef DOUBLE_PRECISION typedef double data_t; - #define CHAOS_ABS(x) fabs(x) #else typedef float data_t; - #define CHAOS_ABS(x) fabsf(x) #endif
- inline data_t chaos_mod(data_t x, data_t y) - { - #ifdef DOUBLE_PRECISION - return fmod(x,y); - #else - return fmodf(x,y); - #endif - } - inline data_t rand_range(data_t low, data_t high) { --- 39,46 ---- *************** *** 59,64 **** }
- - #define __chaos_hpp #endif /* __chaos_hpp */ --- 48,51 ----
Index: ode_base.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/ode_base.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ode_base.hpp 21 May 2006 19:17:04 -0000 1.8 --- ode_base.hpp 6 Sep 2006 20:32:21 -0000 1.9 *************** *** 77,82 **** data_t m_k2[dimensions]; data_t m_k3[dimensions]; ! data_t m_tmp[dimensions]; ! // data_t m_tmp[dimensions];
virtual void m_system (data_t* deriv, data_t* data) = 0; --- 77,81 ---- data_t m_k2[dimensions]; data_t m_k3[dimensions]; ! data_t m_tmp[dimensions];
virtual void m_system (data_t* deriv, data_t* data) = 0; *************** *** 84,133 **** void rk1() { ! // m_system (m_k0, m_data); ! // for (int i = 0; i != dimensions; ++i) ! // m_data[i] += m_dt * m_k0[i]; }
void rk2() { ! // m_system (m_k0, m_data); ! // for (int i = 0; i != dimensions; ++i) ! // m_k0[i] = m_k0[i] * 0.5 * m_dt + m_data[i]; ! // ! // m_system (m_k1, m_k0); ! // for (int i = 0; i != dimensions; ++i) ! // m_data[i] += m_dt * m_k1[i]; }
void rk4() { ! // m_system (m_k0, m_data); ! // for (int i = 0; i != dimensions; ++i) ! // { ! // m_k0[i] *= m_dt; ! // m_tmp[i] = m_data[i] + 0.5 * m_k0[i]; ! // } ! // ! // m_system (m_k1, m_tmp); ! // for (int i = 0; i != dimensions; ++i) ! // { ! // m_k1[i] *= m_dt; ! // m_tmp[i] = m_data[i] + 0.5 * m_k1[i]; ! // } ! // ! // m_system (m_k2, m_tmp); ! // for (int i = 0; i != dimensions; ++i) ! // { ! // m_k2[i] *= m_dt; ! // m_tmp[i] = m_data[i] + m_k2[i]; ! // } ! // ! // m_system (m_k3, m_tmp); ! // for (int i = 0; i != dimensions; ++i) ! // m_k3[i] *= m_dt; ! // ! // for (int i = 0; i != dimensions; ++i) ! // m_data[i] += (m_k0[i] + 2. * (m_k1[i] + m_k2[i]) + m_k3[i]) ! // / 6.; } }; --- 83,132 ---- void rk1() { ! m_system (m_k0, chaos_base<dimensions>::m_data); ! for (int i = 0; i != dimensions; ++i) ! chaos_base<dimensions>::m_data[i] += m_dt * m_k0[i]; }
void rk2() { ! for (int i = 0; i != dimensions; ++i) ! m_k0[i] = m_k0[i] * 0.5 * m_dt + chaos_base<dimensions>::m_data[i]; ! ! m_system (m_k0, chaos_base<dimensions>::m_data); ! m_system (m_k1, m_k0); ! for (int i = 0; i != dimensions; ++i) ! chaos_base<dimensions>::m_data[i] += m_dt * m_k1[i]; }
void rk4() { ! m_system (m_k0, chaos_base<dimensions>::m_data); ! for (int i = 0; i != dimensions; ++i) ! { ! m_k0[i] *= m_dt; ! m_tmp[i] = chaos_base<dimensions>::m_data[i] + 0.5 * m_k0[i]; ! } ! ! m_system (m_k1, m_tmp); ! for (int i = 0; i != dimensions; ++i) ! { ! m_k1[i] *= m_dt; ! m_tmp[i] = chaos_base<dimensions>::m_data[i] + 0.5 * m_k1[i]; ! } ! ! m_system (m_k2, m_tmp); ! for (int i = 0; i != dimensions; ++i) ! { ! m_k2[i] *= m_dt; ! m_tmp[i] = chaos_base<dimensions>::m_data[i] + m_k2[i]; ! } ! ! m_system (m_k3, m_tmp); ! for (int i = 0; i != dimensions; ++i) ! m_k3[i] *= m_dt; ! ! for (int i = 0; i != dimensions; ++i) ! chaos_base<dimensions>::m_data[i] += (m_k0[i] + 2. * (m_k1[i] + m_k2[i]) + m_k3[i]) ! / 6.; } };
Index: chua.hpp =================================================================== RCS file: /cvsroot/pure-data/externals/tb/chaos/src/chua.hpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** chua.hpp 21 May 2006 18:34:34 -0000 1.5 --- chua.hpp 6 Sep 2006 20:32:21 -0000 1.6 *************** *** 1,17 **** ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to --- 1,17 ---- ! // ! // // chaos~ // Copyright (C) 2004 Tim Blechmann ! // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. ! // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ! // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to *************** *** 24,165 **** // dx2/dt = x1 - x2 + x3 // dx3/dt = - beta * x2 ! // // with h(x) = b*x + a - b (for x > 1) // a*x (for -1 <= x <= 1 // b*x - a + b (for x < -1) ! // // taken from Viktor Avrutin: lecture notes
class chua: ! public ode_base<3> { public: ! chua() ! { ! CHAOS_PAR_INIT(method,2); ! CHAOS_PAR_INIT(dt,0.05);
! CHAOS_SYS_INIT(x1,1,1); ! CHAOS_SYS_INIT(x2,1,1); ! CHAOS_SYS_INIT(x3,1,1);
! CHAOS_PAR_INIT(a,140); ! CHAOS_PAR_INIT(b,30); ! CHAOS_PAR_INIT(alpha,30); ! CHAOS_PAR_INIT(beta,30); ! }
! virtual void m_system(data_t* deriv, data_t* data) ! { ! data_t x1 = data[0]; ! data_t x2 = data[1]; ! data_t x3 = data[2]; ! ! data_t a = CHAOS_PARAMETER(a), b = CHAOS_PARAMETER(b); ! ! data_t h; ! ! if (x1 > 1) ! h = b*x1 + a - b; ! else if (x1 < -1) ! h = b*x1 - a + b; ! else ! h = a*x1; ! ! deriv[0] = CHAOS_PARAMETER(alpha) * (x2 - x1 - h); ! deriv[1] = x1 - x2 + x3; ! deriv[2] = - CHAOS_PARAMETER(beta) * x2; ! }
! virtual void m_verify() ! { ! data_t x1 = m_data[0]; ! data_t x2 = m_data[1]; ! data_t x3 = m_data[2]; ! ! if ( CHAOS_ABS(x3) < 1e-10) ! x3 = 0; ! ! if (x1 == 0 && x2 == 0 && x3 == 0) /* fixpoint at (0,0,0) */ ! { ! reset(); ! return; ! } ! else ! { ! data_t c = m_c; ! if (m_c) ! { ! data_t mc = - c; ! if (x1 == c && x3 == mc) /* fixpoint at (c,0,-c) */ ! { ! reset(); ! return; ! } ! if (x1 == mc && x3 == c) /* fixpoint at (-c,0,c) */ ! { ! reset(); ! return; ! } ! } ! } ! } ! ! inline void reset() ! { ! m_data[0] = rand_range(-1,1); ! m_data[1] = rand_range(-1,1); ! m_data[2] = rand_range(-1,1); ! }
! CHAOS_SYSVAR_FUNCS(x1, 0); ! CHAOS_SYSVAR_FUNCS(x2, 1); ! CHAOS_SYSVAR_FUNCS(x3, 2);
! /* due to stability issues, we hook into the predicates */ ! data_t m_c; ! bool m_pred_a(data_t a) ! { ! data_t b = CHAOS_PARAMETER(b); ! m_c = (b - a) / (b + 1); ! return true; ! }
! bool m_pred_b(data_t b) ! { ! if (b == -1) ! m_c = 0; ! else ! { ! data_t a = CHAOS_PARAMETER(a); ! m_c = (b - a) / (b + 1); ! } ! return true; ! }
! CHAOS_SYSPAR_FUNCS_PRED(a, m_pred_a); ! CHAOS_SYSPAR_FUNCS_PRED(b, m_pred_b); ! CHAOS_SYSPAR_FUNCS(alpha); ! CHAOS_SYSPAR_FUNCS(beta); };
! #define CHUA_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(alpha); \ ! CHAOS_SYS_CALLBACKS(beta); \ ! CHAOS_SYS_CALLBACKS(a); \ ! CHAOS_SYS_CALLBACKS(b); \ ! CHAOS_SYS_CALLBACKS(x1); \ ! CHAOS_SYS_CALLBACKS(x2); \ CHAOS_SYS_CALLBACKS(x3);
! #define CHUA_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(a); \ ! CHAOS_SYS_ATTRIBUTE(b); \ ! CHAOS_SYS_ATTRIBUTE(alpha); \ ! CHAOS_SYS_ATTRIBUTE(beta); \ ! CHAOS_SYS_ATTRIBUTE(x1); \ ! CHAOS_SYS_ATTRIBUTE(x2); \ CHAOS_SYS_ATTRIBUTE(x3); --- 24,165 ---- // dx2/dt = x1 - x2 + x3 // dx3/dt = - beta * x2 ! // // with h(x) = b*x + a - b (for x > 1) // a*x (for -1 <= x <= 1 // b*x - a + b (for x < -1) ! // // taken from Viktor Avrutin: lecture notes
class chua: ! public ode_base<3> { public: ! chua() ! { ! CHAOS_PAR_INIT(method,2); ! CHAOS_PAR_INIT(dt,0.05);
! CHAOS_SYS_INIT(x1,1,1); ! CHAOS_SYS_INIT(x2,1,1); ! CHAOS_SYS_INIT(x3,1,1);
! CHAOS_PAR_INIT(a,140); ! CHAOS_PAR_INIT(b,30); ! CHAOS_PAR_INIT(alpha,30); ! CHAOS_PAR_INIT(beta,30); ! }
! virtual void m_system(data_t* deriv, data_t* data) ! { ! data_t x1 = data[0]; ! data_t x2 = data[1]; ! data_t x3 = data[2];
! data_t a = CHAOS_PARAMETER(a), b = CHAOS_PARAMETER(b);
! data_t h;
! if (x1 > 1) ! h = b*x1 + a - b; ! else if (x1 < -1) ! h = b*x1 - a + b; ! else ! h = a*x1;
! deriv[0] = CHAOS_PARAMETER(alpha) * (x2 - x1 - h); ! deriv[1] = x1 - x2 + x3; ! deriv[2] = - CHAOS_PARAMETER(beta) * x2; ! }
! virtual void m_verify() ! { ! data_t x1 = m_data[0]; ! data_t x2 = m_data[1]; ! data_t x3 = m_data[2]; ! ! if ( std::abs(x3) < 1e-10) ! x3 = 0; ! ! if (x1 == 0 && x2 == 0 && x3 == 0) /* fixpoint at (0,0,0) */ ! { ! reset(); ! return; ! } ! else ! { ! data_t c = m_c; ! if (m_c) ! { ! data_t mc = - c; ! if (x1 == c && x3 == mc) /* fixpoint at (c,0,-c) */ ! { ! reset(); ! return; ! } ! if (x1 == mc && x3 == c) /* fixpoint at (-c,0,c) */ ! { ! reset(); ! return; ! } ! } ! } ! } ! ! inline void reset() ! { ! m_data[0] = rand_range(-1,1); ! m_data[1] = rand_range(-1,1); ! m_data[2] = rand_range(-1,1); ! } ! ! CHAOS_SYSVAR_FUNCS(x1, 0); ! CHAOS_SYSVAR_FUNCS(x2, 1); ! CHAOS_SYSVAR_FUNCS(x3, 2); ! ! /* due to stability issues, we hook into the predicates */ ! data_t m_c; ! bool m_pred_a(data_t a) ! { ! data_t b = CHAOS_PARAMETER(b); ! m_c = (b - a) / (b + 1); ! return true; ! } ! ! bool m_pred_b(data_t b) ! { ! if (b == -1) ! m_c = 0; ! else ! { ! data_t a = CHAOS_PARAMETER(a); ! m_c = (b - a) / (b + 1); ! } ! return true; ! } ! ! CHAOS_SYSPAR_FUNCS_PRED(a, m_pred_a); ! CHAOS_SYSPAR_FUNCS_PRED(b, m_pred_b); ! CHAOS_SYSPAR_FUNCS(alpha); ! CHAOS_SYSPAR_FUNCS(beta); };
! #define CHUA_CALLBACKS \ ! ODE_CALLBACKS; \ ! CHAOS_SYS_CALLBACKS(alpha); \ ! CHAOS_SYS_CALLBACKS(beta); \ ! CHAOS_SYS_CALLBACKS(a); \ ! CHAOS_SYS_CALLBACKS(b); \ ! CHAOS_SYS_CALLBACKS(x1); \ ! CHAOS_SYS_CALLBACKS(x2); \ CHAOS_SYS_CALLBACKS(x3);
! #define CHUA_ATTRIBUTES \ ! ODE_ATTRIBUTES; \ ! CHAOS_SYS_ATTRIBUTE(a); \ ! CHAOS_SYS_ATTRIBUTE(b); \ ! CHAOS_SYS_ATTRIBUTE(alpha); \ ! CHAOS_SYS_ATTRIBUTE(beta); \ ! CHAOS_SYS_ATTRIBUTE(x1); \ ! CHAOS_SYS_ATTRIBUTE(x2); \ CHAOS_SYS_ATTRIBUTE(x3);