In this simulation there is a cart moving along a horizontal track. From the cart a pendulum is suspended. A spring connects the cart to a wall. Friction acts on the cart and on the pendulum.
You can drag the cart or pendulum with your mouse to change the starting position. Enable the "show controls" checkbox to set gravity, mass, pendulum length, spring stiffness, or friction (damping). Click the "reset" button to start from a resting position.
The math behind the simulation is shown below. Also available: source code, documentation and how to customize.
There are two ways to find the equations of motion for a system like this: the direct Newtonian way or the indirect Lagrangian way. We show both methods here.
For both direct and indirect methods, we first need to get the kinematics right. Kinematics means the relations of the parts of the device, without regard to forces. In kinematics we are only trying to find expressions for the position, velocity, and acceleration in terms of whatever variables we have chosen. The variables here are:
We'll need the standard unit vectors, i, j, k . We use bold and overline to indicate a vector.
The kinematics for the cart are simple
position = x i
velocity = x' i
acceleration = x'' i
The kinematics for the pendulum are more complex. The position is derived by a fairly simple application of trigonometry. The velocity and acceleration are then the first and second derivatives of the position.
position = x i + R sin θ i − R cos θ j
velocity = x' i + R θ' cos θ i + R θ' sin θ j
acceleration = x'' i + R θ'' cos θ i − R θ' ^{2} sin θ i + R θ'' sin θ j + R θ' ^{2} cos θ j
We treat the cart and the pendulum bob as point particles. Begin by drawing the free body diagram for the cart and writing expressions for the forces acting on them. Define the following parameters and forces:
Just by looking at the free-body diagram we can fairly easily figure out some of the forces on the cart. (The pendulum friction force is trickier, it is explained in the next section).
The forces on the pendulum bob are:
We consider the torque from friction of the pendulum to be a vector perpendicular to the plane where the pendulum and cart move. That is, the torque is in the direction of the unit vector k which extends out of the plane. The magnitude of the torque is given by −b θ' where θ' is the angular velocity. We can regard the force from the torque as being equivalent to a force applied at the end of the pendulum rod (see illustration). From Newton's Third Law (every action has an equal and opposite reaction) we know that the same force is applied at the other end of the rod, but in opposite direction.
A torque that is the result of a force F applied at the end of the rod R is given by the cross product
R × F = (R_{x}, R_{y}, 0) × (F_{x}, F_{y}, 0) = (R_{x} F_{y} − R_{y} F_{x}) k
Here we are showing a 3-space vector as (x, y, z) which is the same as x i + y j + z k . We regard the force F as being perpendicular to the rod, so that
F = f (−R_{y}, R_{x}, 0) ⁄ R
where f is the unknown magnitude of F and R is the length of R so that R = √(R_{x}^{2} + R_{y}^{2}) . The direction of F is chosen so that positive torque leads to increase in θ . Then the cross product becomes
R × F = (R_{x} F_{y} − R_{y} F_{x}) k = f (R_{x}^{2} + R_{y}^{2}) ⁄ R k = f R k
Now we can find f :
−b θ' k = R × F = f R k
f = ^{−b}⁄_{R} θ'
This result makes sense: consider that to produce a given amount of torque, you would need a stronger force applied at the end of a short rod, or a weaker force with a longer rod. The force is then given by
F = f (−R_{y}, R_{x}, 0) ⁄ R = ^{−b}⁄_{R} θ' (cos θ i + sin θ j)
Note that R = R(sin θ, −cos θ, 0) which justifies part of the above equation. This torque force F is applied at the pendulum bob, and its opposite is applied at the cart.
We add up the forces described above to find the net force on the cart
F = N j − M g j − T cos θ j + T sin θ i − k x i − d x' i + ^{b}⁄_{R} θ' (cos θ i + sin θ j)
Now using Newton's law F = M a and the cart acceleration we found earlier, we have
N j − M g j − T cos θ j + T sin θ i − k x i + ^{b}⁄_{R} θ' (cos θ i + sin θ j) = M x'' i | (1) |
Adding the forces on the pendulum gives
F = T cos θ j − T sin θ i − m g j − ^{b}⁄_{R} θ' (cos θ i + sin θ j)
Using Newton's law F = m a and the pendulum acceleration we found earlier, we have
T cos θ j − T sin θ i − m g j − ^{b}⁄_{R} θ' (cos θ i + sin θ j) = m(x'' i + R θ'' cos θ i − R θ' ^{2} sin θ i + R θ'' sin θ j + R θ' ^{2} cos θ j) | (2) |
Now we can write the vector components of the above equations (1) and (2) as separate equations. This gives us 4 simultaneous equations.
T sin θ − k x − d x' + ^{b}⁄_{R} θ' cos θ = M x'' | (3) |
N − M g − T cos θ + ^{b}⁄_{R} θ' sin θ = 0
− T sin θ − ^{b}⁄_{R} θ' cos θ = m(x'' + R θ'' cos θ − R θ' ^{2} sin θ) | (4) |
T cos θ − m g − ^{b}⁄_{R} θ' sin θ = m(R θ'' sin θ + R θ' ^{2} cos θ) | (5) |
(We ignore the second of the four equations, but we could use it to find the unknown normal force N on the cart). Next do some algebraic manipulations to eliminate the unknown tension T . Adding together equations (3) and (4) and rearranging we get:
(M + m)x'' = m R θ' ^{2} sin θ − m R θ'' cos θ − k x − d x' | (6) |
Multiply equation (5) by sin θ
T sin θ cos θ − m g sin θ − ^{b}⁄_{R} θ' sin^{2} θ = m R θ'' sin^{2} θ + m R θ' ^{2}sin θ cos θ
Use equation (4) to replace T sin θ .
−^{b}⁄_{R} θ' cos^{2} θ − m x'' cos θ − m R θ'' cos^{2}θ + m R θ' ^{2}sin θ cos θ − m g sin θ − ^{b}⁄_{R} θ' sin^{2} θ = m R θ'' sin^{2}θ + m R θ' ^{2}sin θ cos θ
Using the trig identity cos^{2}θ + sin^{2}θ = 1 this simplifies to
^{b}⁄_{R} θ' + m x'' cos θ + m R θ'' + m g sin θ = 0 | (7) |
Equations (6) and (7) are the equations of motion. We have two equations in the two variables x,θ and their derivatives. We will need to do some further manipulations of these two equations to get them into a form suitable for the Runge-Kutta numerical analysis method (see below).
The indirect method is based on the energy of the system. (A good textbook that covers this is Fundamentals of Applied Dynamics by James H. Williams Jr. You will find the same "Mass and Plane Pendulum Dynamic System" discussed on page 234 of the 1996 edition.) Our first step is to find the Lagrangian of the system which is the kinetic energy minus the potential energy.
L = T − V
For the kinetic energy we need the velocity of the cart and pendulum, which we calculated earlier (see kinematics above). Kinetic energy is given by ^{1}⁄_{2}m v^{2} . Note that we use the vector dot product to square a vector, v^{2} = v · v . So we have
T = ^{1}⁄_{2} M (x' i)^{2} + ^{1}⁄_{2} m (x' i + R θ' cos θ i + R θ' sin θ j)^{2}
Applying the dot product rule to square the vectors we get
T = ^{1}⁄_{2} M x' ^{2} + ^{1}⁄_{2} m ((x' + R θ' cos θ)^{2} + (R θ' sin θ)^{2})
There are two stores of potential energy in this system: the spring and the gravitational potential of the pendulum.
V_{spring} = ^{1}⁄_{2} k x^{2}
V_{gravity} = m g height = m g(R − R cos θ)
So the Lagrangian for the system is
L = ^{M}⁄_{2} x' ^{2} + ^{m}⁄_{2} (x' + R θ' cos θ)^{2} + ^{m}⁄_{2} (R θ' sin θ)^{2} − ^{k}⁄_{2} x^{2} − m g R(1 − cos θ)
To deal with the friction forces we calculate the amount of non-conservative work done by tiny movements in the variables. Note that we consider only non-conservative forces like friction here -- conservative forces like gravity or springs are handled by the potential energy calculations in the Lagrangian.
A tiny change of Δx in x results in an amount of non-conservative work from friction given by ΔW = −d x' Δx so we define the "generalized force"
W_{x} = −d x'
Similarly, a tiny change of Δθ in θ results in an amount of non-conservative work from friction ΔW = −b θ' Δθ , so we define another generalized force:
W_{θ} = −b θ'
Next we will derive the equations of motion from Lagrange's Equation. For the x variable Lagrange's Equation is
$$W_x = \frac{d}{dt} \left( \frac{\partial L}{\partial x'} \right) - \frac{\partial L}{\partial x} \tag{8}$$
Note that x' and x are treated as separate variables when taking partial derivatives. Here are the partial derivatives:
∂ L | = M x' + m(x' + R θ' cos θ) |
∂ x' |
∂ L | = − k x |
∂ x |
Taking the derivative with respect to time of \( \frac{\partial L}{\partial x'} \) and subtracting \( \frac{\partial L}{\partial x} \) equation (8) becomes
− d x' = M x'' + m x'' + m R θ'' cos θ − m R θ' ^{2} sin θ + k x
which we can rearrange to be identical to equation (6) found above in the direct method:
(M + m)x'' = m R θ' ^{2} sin θ − m R θ'' cos θ − k x − d x'
For the θ variable Lagrange's Equation is
$$W_{\theta} = \frac{d}{dt} \left( \frac{\partial L}{\partial \theta'} \right) - \frac{\partial L}{\partial \theta} \tag{9}$$
Here are the partial derivatives:
∂ L | = m(x' + R θ' cos θ)R cos θ + m θ' R^{2} sin^{2}θ |
∂ θ' |
∂ L | = −m(x' + R θ' cos θ)R θ' sin θ + m R^{2} θ' ^{2}sin θ cos θ − m g R sin θ |
∂ θ |
(Notice that we can factor out m R from each of these terms.) Taking the derivative with respect to time of \( \frac{\partial L}{\partial \theta'} \) and subtracting \( \frac{\partial L}{\partial \theta} \) equation (9) becomes
− b θ' = m R [(x'' + R θ'' cos θ − R θ' ^{2} sin θ)cos θ − θ' sin θ(x' + R θ' cos θ) + θ'' R sin^{2}θ + 2 θ' ^{2}R sin θ cos θ + (x' + R θ' cos θ)θ' sin θ − R θ' ^{2}sin θ cos θ + g sin θ]
After lots of cancellation and using the identity sin^{2}θ + cos^{2}θ = 1 this reduces to equation (7) from the direct method:
^{b}⁄_{R} θ' + m x'' cos θ + m R θ'' + m g sin θ = 0
Which technique do you like better, direct or indirect? It seems that the indirect method is the choice of mechanical engineers. It requires more calculus, but the calculations are a lot easier. Compare what was done here to the earlier calculations for frictional torque in the direct method. On the other hand, the direct method is necessary for figuring out the forces within the system, like the tension in the rod, or the normal force of the track on the cart.
To solve the equations of motion numerically, so that we can drive the simulation, we use the Runge Kutta method for solving sets of ordinary differential equations.
To use the Runge-Kutta method, we need to get equations (6) and (7) into the following form:
x'' = f(x, x', θ, θ')
θ'' = g(x, x', θ, θ')
where f, g are functions to be determined. So we want to solve for each second derivative in terms of lower derivative variables. If you look back at equations (6) and (7), you can see that they need some manipulation to isolate the second derivatives over to the left hand side. After solving for θ'' and x'' (either by hand or with an algebra program like Mathematica) we get:
x'' = | m R θ' ^{2} sin θ + m g sin θ cos θ − k x − d x' + ^{b}⁄_{R} θ' cos θ |
M + m sin^{2}θ |
θ'' = | −m R θ' ^{2} sin θ cos θ − (m+M)g sin θ + k x cos θ + d x' cos θ − (1 + ^{M}⁄_{m})^{b}⁄_{R} θ' |
R (M + m sin^{2}θ) |
If we define a couple of new variables, we can change this into four first-order equations (that is, four equations with only first derivatives).
x' = v
θ' = ω
v' = | m R ω^{2} sin θ + m g sin θ cos θ − k x − d v + ^{b}⁄_{R} ω cos θ |
M + m sin^{2}θ |
ω' = | −m R ω^{2} sin θ cos θ − (m+M)g sin θ + k x cos θ + d v cos θ − (1 + ^{M}⁄_{m})^{b}⁄_{R} ω |
R (M + m sin^{2}θ) |
This is now exactly the form needed to plug in to the Runge-Kutta method for numerical solution of the system.
This web page was first published September 2001.