Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Todd Crutcher
June 10, 2003
Abstract
This research paper will investigate the different stable modes of oscillation for coupled masses. In particular I
will concentrate on two and three pendulum systems that are coupled at the bottom by springs. I will give examples
of both analytical and experimental results for these systems, as well as attempting to derive a general formula for the
number of modes.
1 Introduction
In order to study the modes of oscillation for coupled mass pendulums it was first necessary to construct a set of
coupled mass pendulums. For this I built both a two, and a three Pendulum system. While observing the apparent
modes of operation of the two and three pendulum systems (3 and 6 respectively) it appeared that number of stable
modes for a system followed the pattern:
1
n 1
(1)
It will later be shown from the theoretical and analytical results that this is incorrect. The actual number of stable
modes for n pendulums is:
n!
(2)
Results for these experiments were obtained both theoretically and experimentally.
2 The Experiment
I constructed, using the lab pro equipment and the logger pro software, both a two and three pendulum system that
allowed for recording position data directly. This was done by using the rotary motion sensors as the pivot points for
the pendulums.
3 Theory
In order to theoretically study coupled mass pendulums I first had derive the equations of motion for the particular
system that we are interested in. To do this I had to make the following assumptions.
Because of the large size of weight that is used in the experiment (2Kg) it is safe to ignore the mass of the springs and
connecting arms. Next using polar coordinates and the sum of the forces is equals the mass times acceleration in each
direction.
F
Fr
ma
(3)
mar
(4)
3.1 2-Pendulums
2
ks cos 2
ks cos1
mg sin 1
mg sin 2
I was able to obtain the following sets of differential equations for the motion of the coupled mass pendulum systems.
KS cos
mg sin
KS cos 1
mg sin 1
mr1
mr2
(5)
(6)
Where K is the spring constant. S is the amount that the spring is stretched.
S
L sin 2
sin 1
(7)
D is the distance between the pivot points minus the un-stretched length of the spring. these equations are easily solved
using the Runge-Kutta method and a c++ program, thus obtaining a numerical solution to this system (see results).
3.2 3-Pendulums
1
ks1 cos 2
ks1cos1
2
ks2 cos 3
ks2cos 2
mg sin 1
mg sin 2
mg sin 3
It is now only a minor task to expand the previous set of equations to include a third pendulum. this was done by once
again starting with a drawing of the system and thus obtaining the following set of differential equations.
K S2KS S1cos cos
KS cos
1
mgsin
mg sin
mg sin 1
mr1
mr2
(8)
mr3
(10)
(9)
Where K is again the spring constant. S1 and S2 are the amount that the spring is stretched.
S1
S2
L sin
sin
L sin 2
sin 1
(11)
(12)
D is still the distance between the pivot points minus the un-stretched length of the spring. These equations were again
solved numerically using the Runge-Kutta method and a c++ program (see Results)
3.3 friction
F2
F1
F3
2
ks1 cos 2
ks1cos1
ks2 cos 3
ks2cos 2
mg sin 1
mg sin 2
mg sin 3
Next I went back to the free body diagrams and added a frictional force opposing the motion of the pendulum. From
there I then reworked the previous set of equations for the three pendulum system. This yielded the following set of
differential equations.
K S2 S1 cos
KS cos
KS1 cos 1
mgsin
mg sin
mg sin 1
F1
F2
F3
mr1
mr2
mr1
(13)
(14)
(15)
Where S1 and S2 are the same as before and F1 , F2 , and F3 are as follows.
F1
F2
F3
KS1 sin 1
mg cos 1 k
K S2 S1 sin 2
mg cos 2 k
2
(16)
(17)
(18)
4 The Program
The c++ program that was used is a standard fourth-order Runge-Kutta routine. The program was set to take command
line inputs to determine the initial conditions. The mass of the weight on the end of the pendulum is 2Kg and is much
grater than the mass of the springs and connecting arms. It is then safe to only consider the mass of the pendulums
weight and ignore the mass of the springs and connecting arms.
4
5 Results
5.1 2-pendulum
The following three figures show the motion of the two pendulums (no friction) on the right. On the left is a drawing
of the initial position of the system. These were initial believed to be the three stable modes of oscillation for this
system. However after closer inspection the figures ?? and ?? are actually the same mode, it is only the magnitude of
the motion that is different.
Run 1
20
40
60
80
100
60
80
100
Time(s)
Run 2
20
40
Time (s)
Run 3
20
40
60
80
100
Time (s)
5.2 3-pendulum
The following six figures show the motion of the three pendulums (with friction included) on the right. On the left is a
drawing of the initial position of the system. These represent the six stable modes of oscillation for the six pendulum
system.
Run 1
20
40
60
Time (s)
80
100
120
80
100
120
Run 2
20
40
60
Time (s)
Run 3
20
40
60
80
100
60
80
100
Time (s)
Run 4
20
40
Time (s)
Run 5
20
40
60
Time (s)
80
100
120
80
100
120
Run 6
20
40
60
Time (s)
6 Conclusion
After realizing that the 2 pendulum system has only two stable modes, and three pendulums have six stable modes, it
appears that the number of stable modes for n pendulums follows n!. Further work will need to be done however to
prove this.
10
7 Appendix A
The following code is the C++ programs used for this project.
7.1 2 pendulums
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#define N 4
#define DELTA_T
#define T_MAX
0.05
100.0
#define
#define
#define
#define
#define
.25
3.5
2
9.81
.43
D
K
m
g
L
phi_1;
0.0;
phi_2;
0.0;
11
return 0;
}//end of main
double
}//end of f
void runge4(double x, double y[], double step) {
double h=step/2.0;
double t1[N], t2[N], t3[N];
double k1[N], k2[N], k3[N],k4[N];
int i;
for
for
for
for
(i=0;i<N;i++)
(i=0;i<N;i++)
(i=0;i<N;i++)
(i=0;i<N;i++)
t1[i]=y[i]+0.5*(k1[i]=step*f(x, y, i));
t2[i]=y[i]+0.5*(k2[i]=step*f(x+h, t1, i));
t3[i]=y[i]+(k3[i]=step*f(x+h, t2, i));
k4[i]=step*f(x+step, t3, i);
7.2 3 pendulums
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#define N 6
#define DELTA_T
#define T_MAX
#define
#define
#define
#define
#define
#define
D
K
m
g
L
r
0.005
200.0
.25
3.5
2
-9.81
.4
.43
static float u;
int main(int argc, char **argv){
12
double t, y[20],inputs[argc];
float phi_1,phi_2,phi_3;
int i,j,k;
int split=0;
void runge4(double x, double y[], double step);
if (argc<=3){
cout << "\n\n\nYou need to include command line arguments!!\n" << endl;
cout << "\nExample: ./a.out <phi_1> <phi_2> <phi_3> <friction> <1=split>!!\n\n\n" << endl;
return 0;
}
else{
sscanf(argv[1], "%f", &phi_1);
sscanf(argv[2], "%f", &phi_2);
sscanf(argv[3], "%f", &phi_3);
sscanf(argv[4], "%f", &u);
if (argc==6){
sscanf(argv[5], "%d", &split);
}
}
y[0]=
y[1]=
y[2]=
y[3]=
y[4]=
y[5]=
phi_1;
0.0;
phi_2;
0.0;
phi_3;
0.0;
13
double S2 = (D+L*(sin(y[4])-sin(y[2])));
double f1=((K*S1*sin(y[0])) - (m*g*cos(y[0])))*u;
double f2=((K*(S2-S1)*sin(y[2])) - (m*g)*cos(y[2]))*u;
double f3=((-K*S2*sin(y[4])) - (m*g)*cos(y[4]))*u;
if (i==0) return(y[1]);
if (i==1) return(((K*S1*cos(y[0])) +f1+ (m*g*sin(y[0])))/(m*r));
if (i==2) return(y[3]);
if (i==3) return(((K*(S2-S1)*cos(y[2])) +f2+ (m*g)*sin(y[2])/(m*r)));
if (i==4) return(y[5]);
if (i==5) return(((-K*S2*cos(y[4])) +f3+ (m*g)*sin(y[4]))/(m*r));
}//end of f
void runge4(double x, double y[], double step) {
double h=step/2.0;
double t1[N], t2[N], t3[N];
double k1[N], k2[N], k3[N],k4[N];
int i;
for
for
for
for
(i=0;i<N;i++)
(i=0;i<N;i++)
(i=0;i<N;i++)
(i=0;i<N;i++)
t1[i]=y[i]+0.5*(k1[i]=step*f(x, y, i));
t2[i]=y[i]+0.5*(k2[i]=step*f(x+h, t1, i));
t3[i]=y[i]+(k3[i]=step*f(x+h, t2, i));
k4[i]=step*f(x+step, t3, i);
14
8 References
15