List

Построим уравнения движения механической системы с двумя степенями свободы, состоящей из двух тел, соединенных пружиной, при этом одно из тел системы также связано при помощи пружины с неподвижным телом. Оба тела движутся поступательно только под действием сил пружин. Схема системы приведена на следующем рисунке.

Поскольку тела механической системы движутся поступательно, будем их рассматривать как материальные точки. Положение первого тела массой m_1 будем определять координатой x_1, отсчитываемой вдоль оси Ox неподвижной системы координат. Положение второго тела определяется координатой x_2, также отсчитываемой от начала координат системы Oxy вдоль оси Ox.

Для построения уравнений движения будем использовать уравнения Лагранжа II-го рода:

(1)   \begin{equation*}     \frac{d}{dt} \frac{\partial T}{\partial \dot x_i} -\frac{\partial T}{\partial x_i} = - \frac{\partial \Pi}{\partial x_i}, \; i=1,2, \end{equation*}

для чего необходимо записать выражения для кинетической T и потенциальной \Pi энергии системы.

Кинетическая энергия системы материальных точек:

    \[     T = \frac{m_1 \dot x_1^2}{2}+\frac{m_2 \dot x_2^2}{2}. \]

Потенциальная энергия двух пружин:

    \[     \Pi = \frac{c_1 (x_1-l_1)^2}{2}+\frac{c_2 (x_2-x_1-l_2)^2}{2}, \]

где l_1, l_2 – свободные длины пружин.

Подставляя выражения для T и \Pi в уравнения Лагранжа, получим систему двух дифференциальный уравнений с постоянными коэффициентами:

    \[ \begin{aligned}     & m_1 \ddot x_1 = c_2(x_2-x_1-l_2) - c_1(x_1-l_1), \\     & m_2 \ddot x_2 = - c_2(x_2-x_1-l_2).  \end{aligned} \]

Решение системы можно найти в аналитическом виде, однако здесь эта задача рассматриваться не будет, поскольку целью рассматриваемого примера является демонстрация использования системы Mathematica для построения уравнений движения механической системы, её решения и представления результатов решения.

Ниже приведен текст программы в системе Mathematica

Обобщенные координаты

q = {x1[t], x2[t]};

Обобщённые скорости

dq = D[q, t];

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

T = (m1 x1'[t]^2)/2 + (m2 x2'[t]^2)/2;

Потенциальная энергия системы

P = c1*(x1[t]-L1)^2/2 + c2*(x2[t]-x1[t]-L2)^2/2;

Уравнения Лагранжа II-го рода

Для построения уранвений используются функции Map и Function (чистая функция)

eq=Map[D[T,D[#,t]]-D[#,T]==-D[P,#]&,q];
%//TableForm//TraditionalForm

Интегрирование уравнений

Значения параметров системы

tk = 10;

params = {c1 -> 100, m1 -> 1, m2 -> 2, c2 -> 100, v0 -> 2, L1 -> 0.7,L2 -> 0.8};    

Начальные условия

    \[x_1(0)=l_1,\; x_2(0)=l_1+l_2, \; \dot x_1(0) = 0, \; \dot x_2(0) = v_0.\]

initialConditions = {x1[0] == L1, x2[0] == L1 + L2, x1'[0] == 0, x2'[0] == v0};

Интегрирование

sol = NDSolve[{eq, initialConditions} //. params, {q, dq} // 
Flatten, {t, 0, tk}] // Flatten

Обработка результатов

Построение графиков

GraphicsRow[{
Plot[q /. sol // Evaluate, {t, 0, tk}, 
FrameLabel -> {"t","x1","x2"}, PlotLabel -> "Обобщенные координаты"],
Plot[dq /. sol // Evaluate, {t, 0, tk}, 
FrameLabel -> {"t","v1","v2"}, PlotLabel -> "Обобщенные скорсоти"]
}, ImageSize -> 800]  

Функция рисования пружины

Spring[x1_, x2_, d_, c_, y_] := 
 Line[Table[{x1 + (x2 - x1)/(2 c) i, y + (-1)^i d*0.5},
 {i,0,2 c}]];

Функция построения кадра анимации

frame[x1_, x2_] := Module[{s1 = 0.1, s2 = 0.1, h1 = 0.5, h2 = 0.5},
Graphics[{
 Red,Spring[0, x1, 0.2, 5, 0.25],
 Green,Spring[x1, x2, 0.2, 10, 0.25],
 Blue,Rectangle[{x1 - s1, 0}, {x1 + s1, h1}],
 Rectangle[{x2 - s2, 0}, {x2 + s2, h2}]},
 PlotRange -> {{0, 2.5}, {0, 0.6}},
 ImageSize -> 600,
 Frame -> True]];

Анимация

Animate[Evaluate[frame[x1[t], x2[t]] /. sol], {t, 0, tk, 0.001}, 
 DisplayAllSteps -> True]

  Posts

July 14th, 2017

7-я Европейская конференция по космическому мусору

Презентация о проблеме космического мусора с обзором некоторых работ 7-ой Европейской конференции по космическому мусору в Германии. Презентация была представлена […]

June 30th, 2016

XII Summer Space School

In June 30 I took part in XII Summer Space School as a lecturer. The event was held at the Samara University. […]

March 5th, 2016

2nd IAA Latin American CubeSat Workshop

January 31st, 2016

Схема йо-йо: уменьшение угловой скорости КА при помощи двух грузов на тросе

В основе этого способа закон сохранения кинетического момента системы, который складывается из кинетического момента КА (произведение момента инерции на угловую […]

September 22nd, 2015

CubeSat SamSat-218 is ready for launch

July 6th, 2015

Построение в системе Mathematica модели движения двух тел, связанных пружиной

Построим уравнения движения механической системы с двумя степенями свободы, состоящей из двух тел, соединенных пружиной, при этом одно из тел […]

July 6th, 2015

Анимация в Mathematica

Рассмотрим простой пример построения в Математике анимации углового движения твердого тела, используя результаты расчётов, сохраненные в csv файле. Файл data.csv […]

July 6th, 2015

Алгоритм метода отдельных тел в MATLAB

Вариант реализации алгоритма метода отдельных тел на языке матричной алгебры MATLAB на примере модели тройного физического маятника, изображенного на рисунке. […]

April 10th, 2015

Simulation of the latching mechanism of a solar panel

Using the Mathematica function HeavisideTheta to simulate the latching mechanism of a solar panel. Link to the Mathematica file: Latch.nb