I have a problem with an assignment with two masses on a frictionless plane connected with a spring.

Both masses are 1 kg, and the distance between them (the length of the spring) is 0.4 m. The spring constant k = 8 N/m. The first mass is given a initial velocity of 1 m/s.

The assignment is based on Walter Lewins lecture here at 48 minutes: http://videolectures.net/mit801f99_lewin_lec15/

I'm asked to write a python program displaying the positions of both masses, but I'm struggling with the formulas.

This is what i have so far:

Acceleration for each object (m = 1 kg): $$m1:\mathrm{d}^2x/\mathrm{d}t^2 = -k(x1-x2+L)t$$ $$m2:\mathrm{d}^2x/\mathrm{d}t^2 = -k(x2-x1-L)t$$

Equation: $$ω=\mathrm{sqrt}(k/m)=\mathrm{sqrt(8)}$$ $$x = A\cos(ωt)+B\sin(ωt)$$ for m1: t=0, pos=0 and v=1: $$x1=(1/ω)\cos(ωt)/2$$ i divide by 2 to get the oscillation of just m1 (wrong?)

for m2: t=0, pos=0.4, v=0: $$0.4\cos(ωt)$$

again,i divide by 2 to get the oscillation of just m2


How do i make m2 dependent of m1's position? And how do i make them "move" along as they should? I have tried to create a function for center of mass, CM(t)=0.2*0.5t, to use as a reference of movement, but i cant get it right.

Can someone give me a pointer in the right direction?


Once the mass is released, the center of mass will move at a constant velocity. Superposed on that is the relative motion of the two masses - first towards each other, then away. They will be in exact antiphase so the center of mass has constant velocity.

Your mistake was to set x up as a cosine function - that implies that it is at an extreme of position at t=0 when in fact it is at an extreme of velocity (so position is "in the middle" and you need to use a sin function). That leads me to the following (you will need to check this and prove individual steps along the way which I did not give... it's not solving the differential equations but jumping to the answer - but I think that you should be able to work towards this answer with the above hint).

import numpy as np
import math
import matplotlib.pyplot as plt

k = 8
l = 0.4
m1 = 1.0
m2 = 1.0
m_reduced = (m1*m2)/(m1+m2) 
omega = np.sqrt(k / m_reduced)
t = np.linspace(0, 8.0 * math.pi / omega, 500)
a1 = 1.0 / (2*omega) # because we know dx/dt at t=0 - but half is due to c.o.m.
a2 = - a1
v_com = 0.5 # since one mass moves at 1 m/s and the other is initially stationary
x1 = a1 * np.sin(omega * t) + v_com * t
x2 = a2 * np.sin(omega * t) + v_com * t + l
plt.plot(t, x1, label='x1')
plt.plot(t, x2, label='x2')
plt.xlabel('time (s)')
plt.ylabel('position (m)')

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.