Está en la página 1de 15

Coupled Masses and Modes of Oscillation

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.

Figure 1: picture of the three Pendulum experiment


The lab pro hardware is capable of connecting two rotary motion sensors at once. So for the three pendulum system
I was forced to use two computers and four sensors. I then coupled two sensors together and sent there outputs to
separate computers. These were later used as index points to combine all the data in a spreadsheet.

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.

The pendulums all are the same mass.

The springs are attached to the center of the mass.

The springs have no mass and equal constants k.

The arm of the pendulum has no mass.

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

Figure 2: Two Pendulum Free Body Diagram

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

Figure 3: Three Pendulum Free Body Diagram

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

Figure 4: Three Pendulum with Friction Free Body Diagram

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

        

             

 KS sin   mg cos 

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)

Figure 5: graphical representation of the first set of initial conditions

Run 2

20

40
Time (s)

Figure 6: graphical representation of the second set of initial conditions

Run 3

20

40

60

80

100

Time (s)

Figure 7: graphical representation of the third set of initial conditions

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

Figure 8: graphical representation of the first set of initial conditions

Run 2

20

40

60
Time (s)

Figure 9: graphical representation of the second set of initial conditions

Run 3

20

40

60

80

100

60

80

100

Time (s)

Figure 10: graphical representation of the third set of initial conditions

Run 4

20

40
Time (s)

Figure 11: graphical representation of the fourth set of initial conditions

Run 5

20

40

60
Time (s)

80

100

120

80

100

120

Figure 12: graphical representation of the fifth set of initial conditions

Run 6

20

40

60
Time (s)

Figure 13: graphical representation of the sixth set of initial conditions

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

int main(int argc, char **argv){


double t, y[20],inputs[argc];
int i,j,k;
float phi_1,phi_2;
void runge4(double x, double y[], double step); // Runge-Kutta function
if (argc<=2){
cout << "\n\n\nYou need to include command line arguments!!\n" << endl;
cout << "\nExample: ./a.out <phi_1> <phi_2>!!\n\n\n" << endl;
return 0;
}
else{
sscanf(argv[1], "%f", &phi_1);
sscanf(argv[2], "%f", &phi_2);
}
y[0]=
y[1]=
y[2]=
y[3]=

phi_1;
0.0;
phi_2;
0.0;

for (j=1; j*DELTA_T <= T_MAX ;++j) {


t=j*DELTA_T;
runge4(t, y, DELTA_T);
printf("%lf\t", j*DELTA_T); //
printf("%lf\t", y[0]+1); //
printf("%lf\t", y[2]-1); //
printf("\n");
}

11

return 0;
}//end of main
double

f(double x, double y[], int i) {


if (i==0) return(y[1]);
if (i==1) return((( (K*D)-(K*L*sin(y[0])) + (K*L*sin(y[2])) )*cos(y[0])+(m*g*sin(y[0])))/-L);
if (i==2) return(y[3]);
if (i==3) return((-( (K*D)-(K*L*sin(y[0])) + (K*L*sin(y[2])) )*cos(y[2])+(m*g*sin(y[2])))/-L);

}//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);

for (i=0;i<N;i++) y[i]+=(k1[i]+2*k2[i]+2*k3[i]+k4[i])/6.0;


return;
}//end of runge4

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;

for (j=1; j*DELTA_T <= T_MAX ;++j) {


t=j*DELTA_T;
runge4(t, y, DELTA_T);
if (split == 1){
printf("%lf\t", j*DELTA_T);
printf("%lf\t", y[0]+1);
printf("%lf\t", y[2]);
printf("%lf\t", y[4]-1);
printf("\n");
}
else{
printf("%lf\t", j*DELTA_T);
printf("%lf\t", y[0]);
printf("%lf\t", y[2]);
printf("%lf\t", y[4]);
printf("\n");
}
}
return 0;
}//end of main
double

f(double x, double y[], int i) {


double S1 = (D+L*(sin(y[2])-sin(y[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);

for (i=0;i<N;i++) y[i]+=(k1[i]+2*k2[i]+2*k3[i]+k4[i])/6.0;


return;
}//end of runge4

14

8 References

Engineering Mechanics Statics 2nd edition, Pytel & Kiusalaas, 1999.

Engineering Mechanics Dynamics 2nd edition, Pytel & Kiusalaas, 1999.


Physics for scientists and engineers 4th edition, Paul Tipler, 1999.
Honeywell Plastics: Nylon 6 Resins, http://www.honeywell-plastics.com/ed/solutions/7 16.html

15

También podría gustarte