Re: Poincare section for double pendulum
- To: mathgroup at smc.vnet.net
- Subject: [mg120677] Re: Poincare section for double pendulum
- From: WetBlanket <wyvern864 at gmail.com>
- Date: Wed, 3 Aug 2011 07:07:46 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j0u7jr$fbg$1@smc.vnet.net> <j10l7m$ou9$1@smc.vnet.net>
On Jul 30, 4:08 am, JUN <noec... at gmail.com> wrote: > On Jul 29, 5:04 am, gal bevc <gal.b... at gmail.com> wrote: > > > > > > > > > > > Hello, > > > I'm a relatively new user of Mathematica, who doesn't have much of > > programming skills. For my undergraduate assingment I must analyze chaotic > > motion of double pendulum. > > > Until now i have got system of differential equations for equations of > > motion for double pendulum(i have x''[t]=function(t) and > > y''[t]=function(t)). System of differential equations can be solved for 4 > > inital conditions, x[0],y[0],x'[0] and y'[0]. With using function NDSolvei > > got functions of angles and angular velocities for upper and lower pendulum > > with respect to time, x[t],x'[t],y[t] and y'[t]. > > > To get a poincare section of double pendulum, i have to record position of > > y[t] and y'[t] whenever x[t] is equal to zero and the velocity of x'[t] is a > > positive number. In the end I must get some sort of phase diagram y[t] and > > y'[t]. > > Because this is a Hamilton non-dissipative system, inital energy of the > > system is a constant of time and initial energy is a function of initial > > conditions. To get a real poincare diagram i must repeat the procedure > > described above for different initial conditions, but for the same energy > > level. I need mathematica to use some random numbers for initial conditions > > in a way that the initial energy of the system stays the same. So i must > > repeat procedure for poincare section(surface of section) for let's say 50 > > different initial conditions and then display all results in one y[t],y'[t] > > diagram. > > Hope that someone can help me. > > > Thank you, > > Gal Bevc > > Hi, > one way of doing this is by using StepMonitor during the numerical > solution to look for zero-crossings of the variable x[t]: > > (a) > Define an empty list, say > zeros = {}; > This will be used to collect the zeros in your time interval. > > (b) > Define an auxiliary variable "lastX" and set it equal to the initial > value of x (say xInitial), > lastX = xInitial; > > (c) > In your NDSolve block, add the following: > ...,StepMonitor:>(If[x[t]*lastX<0,AppendTo[zeros,t]];lastX=x[t]) > This tests for zero crossings of x[t] between the current time step > and the previous one. > > (d) > When NDSolve is done, the list "zeros" contains a set of approximate t > values with x[t]=0 that you can then use to refine using FindRoot. > Let's say your solution (in the form of rules {x->..., y->...}) is > stored in "sol", then say > Map[FindRoot[Evaluate[x[t]/.sol],{t,#}]&,zeros] > > That should give you the values of t at which you would then evaluate > y[t] and y'[t] to make the points for the Poincare section. > > Jens See book by Stephen Lynch titled "Dynamical Systems with Applications using Mathematica"