# PhysLab.net – Double Spring

This simulation shows two springs and masses connected to a wall. If you've ever played with an oscilloscope you've probably seen curves like these. They are called

Lissajous curves and are generated by simple sine and cosine functions.

*You can change parameters in the simulation such as mass or spring stiffness. You can drag either mass with your mouse to set the starting position. If you don't see the simulation try instructions for enabling Java. Scroll down to see the math!
*
Instructions: click near to a square and drag with your mouse

## Physics and Equations of Motion

The two springs act independently, so it is easy to figure out what are the forces acting on the two blocks. Label the springs and blocks as follows:

wall - spring_{1} - block_{1} - spring_{2} - block_{2}
We'll assume the origin is at the connection of the spring to the wall. Define the following variables (subscripts refer to block 1 or block 2):

*x*_{1}, *x*_{2} = position (left edge) of blocks
*v*_{1}, *v*_{2} = velocity of blocks
*F*_{1}, *F*_{2} = force experienced by blocks
*L*_{1}, *L*_{2} = how much spring is stretched

And define the following constants:

*m*_{1}, *m*_{2} = mass of blocks
*w*_{1}, *w*_{2} = width of blocks
*k*_{1}, *k*_{2} = spring constants
*R*_{1}, *R*_{2} = rest length of springs

The springs exert force based on their amount of stretch according to

*F* = −*k* × stretch
The forces on the blocks are therefore

*F*_{1} = −*k*_{1} *L*_{1} + *k*_{2} *L*_{2}

*F*_{2} = −*k*_{2} *L*_{2}
The stretch of the spring is calculated based on the position of the blocks.

*L*_{1} = *x*_{1} − *R*_{1}

*L*_{2} = *x*_{2} − *x*_{1} − *w*_{1} − *R*_{2}
Now using Newton's law

*F* = *m* *a* and the definition of acceleration as

*a* = *x*'' we can write two

second order differential equations. These are the equations of motion for the double spring.

*m*_{1} *x*_{1}'' = −*k*_{1} (*x*_{1} − *R*_{1}) +
*k*_{2} (*x*_{2} − *x*_{1} − *w*_{1} − *R*_{2})

*m*_{2} *x*_{2}'' = −*k*_{2} (*x*_{2} − *x*_{1} − *w*_{1} − *R*_{2})

## Numerical Solution

It's easy to convert the above second order equations to a set of first order equations. We define variables for the velocities

*v*_{1}, *v*_{2}. Then there are four variables

*x*_{1}, *x*_{2}, *v*_{1}, *v*_{2} and a first-order differential equation for each:

*x*_{1}' = *v*_{1}

*x*_{2}' = *v*_{2}

*v*_{1}' = −(*k*_{1} ⁄ *m*_{1}) (*x*_{1} − *R*_{1}) +
(*k*_{2} ⁄ *m*_{1}) (*x*_{2} − *x*_{1} − *w*_{1} − *R*_{2})

*v*_{2}' = −(*k*_{2} ⁄ *m*_{2}) (*x*_{2} − *x*_{1} − *w*_{1} − *R*_{2})
This is the form that we need in order to use the

Runge-Kutta method for

numerically solving the differential equation.