Нахождение функции Лагранжа системы и частоты малых колебаний
Для отображения динамики системы во времени необходимо знать закон движения. Для этого решим исходную систему дифференциальных уравнений (Eq1, Eq2). Решение будем искать в численном виде, для чего результат выполнения процедуры dsolve() указывается аргументом процедуры преобразования в формат числа с плавающей точкой evalf ().
Система уравнений решается для случая, когда в начальный момент времени брусок отклоняется от положения равновесия на расстояние 0.2, а стержень – на угол π/16. Начальные скорости шарика и бруска равны нулю.
Внимание!
Указывать индексы в последних двух командах следует крайне осторожно! От сеанса к сеансу решения системы дифференциальных уравнений выводятся в разной последовательности, поэтому приходится соответствующим образом менять и индексы.
После этого формируем кадры анимации. Динамику системы будем отслеживать на протяжении 2.5 секунд с интервалом 0.1 секунды. Каждый кадр будем записывать в массив о. Ниже приведен соответствующий код.
Момент времени последовательно, с шагом 0.1, изменяется от 0 до 2. Положение равновесия бруска взято равным 0.5, а чтобы было лучше ориентироваться в ситуации, отображается, кроме картинки, еще и момент времени (процедура textplot()). Отображаемый текст формируется процедуре объединения cat().
Наконец, в процедуре display(), помимо первого аргумента – списка (это важно!) кадров, указывается еще и опция insequence=true.
В данной главе для отображения анимации использовалась процедура display(). В отличие от процедуры animate(), рассмотренной в предыдущей главе, процедура display() более удобна в том смысле, что позволяет отображать последовательность, по большому счету, произвольных картинок. Например, если при отображении динамики системы с помощью процедуры animate () интервал времени разбивается на равные промежутки, то при использовании процедуры display() имеется возможность отображать состояние системы через промежутки времени разной протяженности. Это иногда бывает полезно.