Симуляция прыгающего мяча
В этом примере показано, как в Engee выполнить моделирование прыгающего мяча.
Для начала объявим функцию для запуска модели и библиотеки, которые нам понадобятся при работе с данными из модели.
using Plots
function run_model(name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end
run_model (generic function with 2 methods)
Перейдём к теоретической составляющей данной демонстрации. На рисунке ниже показан основной принцип, заложенный в демонстрации. Условия: мяч подброшен со скоростью 15 м/с с высоты 10 м.
Модель прыгающего мяча – классический пример гибридной динамической системы. Гибридная динамическая система – это система, которая включает в себя непрерывную динамику, а также дискретные переходы, где системная динамика может измениться и значения состояния могут перейти.
Непрерывная динамика прыгающего мяча в простом виде описывается следующим образом:
где: ускорение происходит из-за силы тяжести, – положение мяча и – скорость. Поэтому система имеет два непрерывных состояния: положение и скорость .
Аспект гибридной системы модели происходит из моделирования столкновения мяча с землей. Если вы принимаете частично упругое соударение с землей, то скорость перед столкновением и скоростью после столкновения может быть связана с коэффициентом восстановления мяча следующим образом:
Прыгающий мяч поэтому отображает скачок в непрерывном состоянии (скорость) при условии перехода .
Перейдём к запуску модели и анализу данных. Сама модель показана на рисунке ниже.
h_start = 10; # Высота
v_start = 15; # Скорость
run_model("bouncing_ball")
sleep(5)
collect(simout)
Building...
Progress 100%
2-element Vector{WorkspaceArray}:
WorkspaceArray("bouncing_ball/P")
WorkspaceArray("bouncing_ball/V")
Построим графики на основе залогированных данных, а также для визуального удобства построим график с нулевой осью Y.
# Скорость
v = simout["bouncing_ball/V"];
v = collect(v);
plot(v.time, v.value)
# Положение
p = simout["bouncing_ball/P"];
p = collect(p);
plot!(p.time, p.value)
plot!(p.time, zeros(size(p.time)))
Вывод
В данном примере мы построили симуляцию прыгающего мяча, а также рассмотрели возможности взаимодействия со средой моделирования из скриптов Engee. Прыгающий мяч – одна из самых простых моделей, которая показывает явление Дзено. Поведение Дзено неофициально характеризуется бесконечным числом событий, происходящих в интервале конечного промежутка времени для определенных гибридных систем. Когда мяч теряет энергию в модели прыгающего мяча, большое количество столкновений с землей начинает происходить в последовательно меньшие интервалы времени. Следовательно, модель испытывает поведение Дзено. Модели с поведением Дзено непросто симулировать на компьютере, но делать это необходимо, так как они встречаются во многих общих и важных инженерных приложениях.