From 6963657b3f3ee4321394953a2cc67cd7386cce2d Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Mon, 27 Dec 2004 22:55:41 +0000 Subject: additions and better code reuse svn path=/trunk/externals/tb/; revision=2433 --- chaos/src/driven_van_der_pol.hpp | 95 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 chaos/src/driven_van_der_pol.hpp (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp new file mode 100644 index 0000000..23386b3 --- /dev/null +++ b/chaos/src/driven_van_der_pol.hpp @@ -0,0 +1,95 @@ +// +// +// 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 +// the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +#include "ode_base.hpp" +#include + +// driven van_der_pol: +// d2u/dt2 + a*(u*u -1)*du/dt + u = k * cos(Omega*t) +// equivalent: +// du1/dt = u2 +// du2/dt = -a*(u1*u1 - 1)*u2 - u1 + k*cos(u3) +// du3/dt = Omega +// taken from Willi-Hans Steeb: Chaos and Fractals + +class driven_van_der_pol + : public ode_base +{ +public: + driven_van_der_pol() + { + m_num_eq = 2; + m_data = new data_t[m_num_eq]; + + CHAOS_SYS_INIT(method,0); + CHAOS_SYS_INIT(dt,0.01); + + CHAOS_SYS_INIT(u1,0.8); + CHAOS_SYS_INIT(u2,0.6); + CHAOS_SYS_INIT(u3,0.4); + + CHAOS_SYS_INIT(a,5); + CHAOS_SYS_INIT(Omega,2.466); + CHAOS_SYS_INIT(k,5); + + ode_base_alloc(); + } + + ~driven_van_der_pol() + { + ode_base_free(); + delete m_data; + } + + 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); + } + + 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(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(a); \ +CHAOS_SYS_ATTRIBUTE(k); \ +CHAOS_SYS_ATTRIBUTE(Omega); -- cgit v1.2.1 From 2434290915cda6ed855e4dc2249312153b995817 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Thu, 9 Jun 2005 12:52:17 +0000 Subject: changed initialisation svn path=/trunk/externals/tb/; revision=3145 --- chaos/src/driven_van_der_pol.hpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp index 23386b3..65290ee 100644 --- a/chaos/src/driven_van_der_pol.hpp +++ b/chaos/src/driven_van_der_pol.hpp @@ -35,27 +35,27 @@ class driven_van_der_pol public: driven_van_der_pol() { - m_num_eq = 2; - m_data = new data_t[m_num_eq]; + CHAOS_PRECONSTRUCTOR; - CHAOS_SYS_INIT(method,0); - CHAOS_SYS_INIT(dt,0.01); + CHAOS_PAR_INIT(method,0); + CHAOS_PAR_INIT(dt,0.01); - CHAOS_SYS_INIT(u1,0.8); - CHAOS_SYS_INIT(u2,0.6); - CHAOS_SYS_INIT(u3,0.4); + CHAOS_SYS_INIT(u1,0.8, 0); + CHAOS_SYS_INIT(u2,0.6, 1); + CHAOS_SYS_INIT(u3,0.4, 2); - CHAOS_SYS_INIT(a,5); - CHAOS_SYS_INIT(Omega,2.466); - CHAOS_SYS_INIT(k,5); + CHAOS_PAR_INIT(a,5); + CHAOS_PAR_INIT(Omega,2.466); + CHAOS_PAR_INIT(k,5); + CHAOS_POSTCONSTRUCTOR; ode_base_alloc(); } ~driven_van_der_pol() { ode_base_free(); - delete m_data; + } virtual void m_system(data_t* deriv, data_t* data) -- cgit v1.2.1 From d1ed55f96f9cecc818844006fb36cd58ca70da5e Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Thu, 16 Jun 2005 13:02:02 +0000 Subject: - parameter searching (broken) - misc. updates svn path=/trunk/externals/tb/; revision=3192 --- chaos/src/driven_van_der_pol.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp index 65290ee..6156eb0 100644 --- a/chaos/src/driven_van_der_pol.hpp +++ b/chaos/src/driven_van_der_pol.hpp @@ -37,7 +37,7 @@ public: { CHAOS_PRECONSTRUCTOR; - CHAOS_PAR_INIT(method,0); + CHAOS_PAR_INIT(method,2); CHAOS_PAR_INIT(dt,0.01); CHAOS_SYS_INIT(u1,0.8, 0); @@ -68,9 +68,16 @@ public: 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_SYSVAR_FUNCS(u3, 2); CHAOS_SYSPAR_FUNCS(a); CHAOS_SYSPAR_FUNCS(k); @@ -82,6 +89,7 @@ public: 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); @@ -90,6 +98,7 @@ CHAOS_SYS_CALLBACKS(Omega); 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); -- cgit v1.2.1 From ef53e19b3d9019b1b1f3345390f55ae9229ce390 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sat, 22 Oct 2005 15:11:45 +0000 Subject: cleanups and new system svn path=/trunk/externals/tb/; revision=3750 --- chaos/src/driven_van_der_pol.hpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp index 6156eb0..e538185 100644 --- a/chaos/src/driven_van_der_pol.hpp +++ b/chaos/src/driven_van_der_pol.hpp @@ -33,10 +33,9 @@ class driven_van_der_pol : public ode_base { public: - driven_van_der_pol() + driven_van_der_pol(): + ode_base(3) { - CHAOS_PRECONSTRUCTOR; - CHAOS_PAR_INIT(method,2); CHAOS_PAR_INIT(dt,0.01); @@ -47,15 +46,10 @@ public: CHAOS_PAR_INIT(a,5); CHAOS_PAR_INIT(Omega,2.466); CHAOS_PAR_INIT(k,5); - - CHAOS_POSTCONSTRUCTOR; - ode_base_alloc(); } ~driven_van_der_pol() { - ode_base_free(); - } virtual void m_system(data_t* deriv, data_t* data) -- cgit v1.2.1 From 13cba7a7997e318fbba01a36912219355e387d52 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sun, 21 May 2006 18:34:34 +0000 Subject: rewrote most stuff using templates svn path=/trunk/externals/tb/; revision=5105 --- chaos/src/driven_van_der_pol.hpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp index e538185..3c034d2 100644 --- a/chaos/src/driven_van_der_pol.hpp +++ b/chaos/src/driven_van_der_pol.hpp @@ -30,11 +30,10 @@ // taken from Willi-Hans Steeb: Chaos and Fractals class driven_van_der_pol - : public ode_base + : public ode_base<3> { public: - driven_van_der_pol(): - ode_base(3) + driven_van_der_pol() { CHAOS_PAR_INIT(method,2); CHAOS_PAR_INIT(dt,0.01); @@ -48,9 +47,7 @@ public: CHAOS_PAR_INIT(k,5); } - ~driven_van_der_pol() - { - } + virtual void m_system(data_t* deriv, data_t* data) { -- cgit v1.2.1 From fae4d2ec359b596a775973956daf4636856f0141 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Wed, 6 Sep 2006 20:32:21 +0000 Subject: cleanups svn path=/trunk/externals/tb/; revision=5880 --- chaos/src/driven_van_der_pol.hpp | 108 +++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 54 deletions(-) (limited to 'chaos/src/driven_van_der_pol.hpp') diff --git a/chaos/src/driven_van_der_pol.hpp b/chaos/src/driven_van_der_pol.hpp index 3c034d2..31c2e2d 100644 --- a/chaos/src/driven_van_der_pol.hpp +++ b/chaos/src/driven_van_der_pol.hpp @@ -1,18 +1,18 @@ -// -// +// +// // 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 // the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @@ -30,66 +30,66 @@ // taken from Willi-Hans Steeb: Chaos and Fractals class driven_van_der_pol - : public ode_base<3> + : public ode_base<3> { public: - driven_van_der_pol() - { - CHAOS_PAR_INIT(method,2); - CHAOS_PAR_INIT(dt,0.01); + 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_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); - } - + 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); + void m_system(data_t* deriv, data_t* data) + { + data_t u1 = data[0], u2 = data[1], u3 = data[2]; - CHAOS_SYSPAR_FUNCS(a); - CHAOS_SYSPAR_FUNCS(k); - CHAOS_SYSPAR_FUNCS(Omega); + 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); \ +#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); \ +#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); -- cgit v1.2.1