Кирсанов М.Н. 
Решебник.Теоретическая механика.
 М.:ФИЗМАТЛИТ, 2002.
Иллюстрации и программы к книге

17.3. Колебания системы с двумя степенями свободы

Условие задачи  отличается от условия в Решебнике. Здесь колебания совершают не цилиндры, а просто грузы, связанные пружиной.
Первый (левый) груз A соединен слева пружиной с неподвижным основанием.  

>    restart;

     Массы (кг) подобраны так, чтобы отношение частот было равно 3

>    ma:=24.63:mb:=40:

     Жесткость пружин (Н/м)

>    c:=90:

     Кинетические энергии тел  A, B
     
Ta:=ma*vx^2/2:

>    Tb:=mb*(vs+vx)^2/2:

     Кинетическая энергия системы

>    T:=Ta+Tb:

     Инерционные коэффициенты

>    a11:=coeff(diff(T,vx),vx):

>    a12:=coeff(diff(T,vx),vs):

>    a22:=coeff(diff(T,vs),vs):

      Частота колебаний omg

>     B1:=c-a11*omg^2: B2:=a12*omg^2:        

>     УравнениеЧастот:=B1*(c-a22*omg^2)-B2^2=0:

       Решение уравнения частот

>     sol:=fsolve(УравнениеЧастот,omg=0..infinity);sol[2]/sol[1];#Отношение частот

sol := .9776197747, 2.932988298

3.000131926

      Дифференциальные уравнения колебаний

>    eq1:=a11*diff(x(t),t$2)+a12*diff(s(t),t$2)=-c*x(t):    

>    eq2:=a12*diff(x(t),t$2)+a22*diff(s(t),t$2)=-c*s(t):

    Численное решение системы  с начальными данными. Грузы сместили и движение начинается из покоя.

>    r:=dsolve({eq1,eq2,s(0)=0.1,x(0)=0.1,D(s)(0)=0,D(x)(0)=0},
          {s(t),x(t)},type=numeric,
                      output=listprocedure):

>    with(plots):

>    T0:=6.4:#Длину интервала подбираем кратной периоду

>    s1:=odeplot(r,[t,x(t)],0..T0,numpoints=150,labels=[t,x],color=black,thickness=2):

>    s2:=odeplot(r,[t,s(t)],0..T0,numpoints=150,labels=[t,x],color=red):

>    display(s1,s2);

Warning, the name changecoords has been redefined

[Maple Plot]

>    rs := eval(s(t),r):

>    rx := eval(x(t),r):

>    n:=200: # Число точек (кадров) для анимации

>    k:=2000:# Масштабный коэффициент для рисунка

>    fd := fopen("C:\\DOS\\sfla.txt", WRITE):#Открываем файл. Пишем s
fprintf(fd, "ms=[ %3.0f",k*rs(0)):

>    for i to n do

>      tm:=T0/n*i:

>      fprintf(fd, ",%3.0f",k*rs(tm));
od:

>    fprintf(fd, "];"):

>    fclose(fd):# Закрываем файл

>    fd := fopen("C:\\DOS\\xfla.txt", WRITE):#Открываем файл. Пишем x
fprintf(fd, "mx=[ %3.0f",k*rx(0)):

>    for i to n do

>      tm:=T0/n*i:

>      fprintf(fd, ",%3.0f",k*rx(tm));
od:

>    fprintf(fd, "];"):

>    fclose(fd):


Собственно программы: os.rar