Документация Engee
Notebook

Симуляция прыгающего мяча

В этом примере показано, как в Engee выполнить моделирование прыгающего мяча.

Для начала объявим функцию для запуска модели и библиотеки, которые нам понадобятся при работе с данными из модели.

In [ ]:
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
Out[0]:
run_model (generic function with 2 methods)

Перейдём к теоретической составляющей данной демонстрации. На рисунке ниже показан основной принцип, заложенный в демонстрации. Условия: мяч подброшен со скоростью 15 м/с с высоты 10 м.

image.png

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

Непрерывная динамика прыгающего мяча в простом виде описывается следующим образом:

image.png

image_2.png

где: $g$ ускорение происходит из-за силы тяжести, $x(t)$ – положение мяча и $v(t)$ – скорость. Поэтому система имеет два непрерывных состояния: положение $x$ и скорость $v$.

Аспект гибридной системы модели происходит из моделирования столкновения мяча с землей. Если вы принимаете частично упругое соударение с землей, то скорость перед столкновением $v^-$ и скоростью после столкновения $v^+$ может быть связана с коэффициентом восстановления мяча $\kappa$ следующим образом:

image_3.png

Прыгающий мяч поэтому отображает скачок в непрерывном состоянии (скорость) при условии перехода $x=0$.

Перейдём к запуску модели и анализу данных. Сама модель показана на рисунке ниже.

image.png

In [ ]:
h_start = 10; # Высота
v_start = 15; # Скорость
run_model("bouncing_ball")
sleep(5)
collect(simout)
Building...
Progress 100%
Out[0]:
2-element Vector{WorkspaceArray}:
 WorkspaceArray("bouncing_ball/P")
 WorkspaceArray("bouncing_ball/V")
In [ ]:
h_start = 10; # Высота
v_start = 15; # Скорость
run_model("bouncing_ball")
sleep(5)
collect(simout)

Построим графики на основе залогированных данных, а также для визуального удобства построим график с нулевой осью Y.

In [ ]:
# Скорость
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)))
Out[0]:

Вывод

В данном примере мы построили симуляцию прыгающего мяча, а также рассмотрели возможности взаимодействия со средой моделирования из скриптов Engee. Прыгающий мяч – одна из самых простых моделей, которая показывает явление Дзено. Поведение Дзено неофициально характеризуется бесконечным числом событий, происходящих в интервале конечного промежутка времени для определенных гибридных систем. Когда мяч теряет энергию в модели прыгающего мяча, большое количество столкновений с землей начинает происходить в последовательно меньшие интервалы времени. Следовательно, модель испытывает поведение Дзено. Модели с поведением Дзено непросто симулировать на компьютере, но делать это необходимо, так как они встречаются во многих общих и важных инженерных приложениях.

Блоки, использованные в примере