Interesting thing about the double pendulum - it is very difficult to get the numerical integration correct, even using very high order integrators like RK4. The simple Euler integrator used here has no hope of getting it right (not a criticism, just an observation!)
The problem is that the double pendulum equations (in fact, any equations of motion derived from a Hamiltonian) have symplectic structure, i.e. they have conserved quantities. One of the conserved quantities is the total energy of the system.
When you discretize the equations to simulate them on a computer, you lose this conservation property (due to discretization error - nothing to do with floating point). The structure of the equations means that the total energy becomes an increasing quantity in time, so you tend to see the simulated system "speed up" or become more energetic as the simulation progresses. The error builds up in the same direction over time - exactly what you don't want!
The simplest example is the harmonic oscillator, with second-order equation of motion
x'' = -x
which gives the first order equations in terms of position x and momentum p
x' = p
p' = -x
which conserve the total energy 0.5 * (x^2 + p^2). Discretizing these using a first-order forwards Euler scheme
so the total energy increases by a factor of (1 + dt^2) each step. Over time, the total energy increases exponentially.
The solution is to use a geometric or sympletic integrator which explicitly takes into account the symplectic structure, producing a set of discrete update equations which still conserve a total energy quantity.
Very nice simulation you've got there! I also did a triple pendulum in JS a while ago. Quite a lot more than 100 lines of code, though. The equations of motion alone take up lots and again lots of space. (Imagine typing them in! I don't even dare to think about adding a fourth degree of freedom) http://users.jyu.fi/~samakapa/triplependulum/
My dynamics course teacher actually showed that the double pendulum can be linearized by some approximations (throwing out some negligible terms, small angle approximations etc.), and that way two modes of oscillation could be found: antisymmetric and symmetric oscillation. Just try with small initial angles with OP's script and you'll see.
First mass counting from which end? The masses are accelerated by each other as there are rigid rods between them.
The lack of friction and the perfectly rigid coupling between the joints might be what makes it seem lacking reality. If we'd extend the chain with more links, the motion of the outermost mass would become more and more unpredictable due to extreme acceleration.
Of course I might have made a mistake somewhere, but I checked that energy is conserved between the frames of the animation (excluding minor energy drift due to the numerical integration).
There are some numerical instabilities in my code. Theoretically the integrator I'm using (the RK4 [0]) should be a lot more accurate than the Euler's method that OP is using, but I probably have a poor choice of parameters and/or a bug somewhere.
In any case, when you max out the first scrollbar, then m_1/M_1 approaches zero. Then the denominators of the Lagrange equation will be close to zero when \theta_1 is close to \theta_2. Thus things become unstable.
Anyway, a symplectic integrator [1] would be more suitable for this problem, since it has the beautiful property of conserving energy.
I agree with the parent, I think you must have a bug somewhere. For many positions of the sliders the movement seems very erratic, the pendulums suddenly bounce back or accelerate without any apparent reason. Especially when you start moving the top slider to the right (though not necessarily all the way to the right).
Or maybe I just don't understand how double pendulums work...
Would be even better, IMO, with a line in the simulation showing the path traced by each pendulum over time, preferably the arcs drawn could phase through different colours (and possibly decay in visibility). Nice work though.
I remember when I first learned about the Lagrangian, and my mind was blown that really complicated problems could be wrangled so easily. Thanks for sharing this :)
I love how everyone has their favorite Classical Mechanics text and how they are almost all very different, though Goldstein and Marion almost always top the lists.
Looks unavailable, but a PDF is very clearly the second result on Google for "Classical Mechanics Taylor" so it may be a good option for the tight budget :)
We used a combination of Goldstein (a classic as another poster pointed out) and Marion & Thornton's Classical Dynamics of Particles and Systems (which was good but not great).
I was playing with the gauges in the simulator, and noticed certain values will create a system where it's possible for the lower pendulum to flip full-circle around the upper. Other parameters will create a system where that is clearly impossible. But there are some where it seems like it might be just barely possible for the lower to complete the loop.
I assume you can plot the y-axis position of the pendulums over time easily enough, and detect cross-overs... How would you discover the set of inputs where cross-overs will happen, but most infrequently?
I remember about 3-4 years ago, a couple of programmers talking. One said to the other, "you know, javascript is getting respectable now." I'm blown away by how such a complicated system can be described and implemented in so few lines of code. When I went to school, seriously complicated programs took a lot of time to write and render. The easy way involved Matlab because it had a lot of graphics libraries. It looks like javascript really has turned the corner into becoming a language with serious possibilities.
Chaotic systems are deterministic (as shown by a deterministic computer algorithm simulating one). They just aren't predictable except by simulating them (which constrains us by time and accuracy).
Chaotic systems are very sensitive to input conditions, where a tiny change yields a completely different result.
With a non chaotic system a small change in the input yields are small change in the output, so it's possible to calculate approximately and get useful results, not so with Chaotic systems.
I don't think it conflicts with it, but I believe the correct explanation has to do more with tiny changes producing big ramifications than with being deterministic or not.
That's why the "butterfly effect" is used as an explanation of chaotic systems (albeit in my opinion a not a very good one).
Meh, it's mathematically deterministic. In reality there is always error (modelling error, measurement error, simulation error) which means that chaotic systems are effectively random on long time scales, even though they are technically deterministic.
I would disagree with the phrase "effectively random" because its too general. Chaotic attractors survive the presence of noise and Chaotic systems look nothing like random data when viewed in a certain way.
Another way of looking at real systems, is that the system is deterministic and the errors are random.
I've checked that (source is a text written by physicist Hans-Peter Dürr, who worked with Werner Heisenberg in the past), a real double or triple pendulum is from time to time chaotic and uncalculable (if started with strong impulse).
The problem is that the double pendulum equations (in fact, any equations of motion derived from a Hamiltonian) have symplectic structure, i.e. they have conserved quantities. One of the conserved quantities is the total energy of the system.
When you discretize the equations to simulate them on a computer, you lose this conservation property (due to discretization error - nothing to do with floating point). The structure of the equations means that the total energy becomes an increasing quantity in time, so you tend to see the simulated system "speed up" or become more energetic as the simulation progresses. The error builds up in the same direction over time - exactly what you don't want!
The simplest example is the harmonic oscillator, with second-order equation of motion
which gives the first order equations in terms of position x and momentum p which conserve the total energy 0.5 * (x^2 + p^2). Discretizing these using a first-order forwards Euler scheme you can see that the total energy changes on each time step to so the total energy increases by a factor of (1 + dt^2) each step. Over time, the total energy increases exponentially.The solution is to use a geometric or sympletic integrator which explicitly takes into account the symplectic structure, producing a set of discrete update equations which still conserve a total energy quantity.
[0] http://en.wikipedia.org/wiki/Symplectic_integrator