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

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

В этом примере показано, как в 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 м.

image.png

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

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

image.png

image_2.png

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

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

image_3.png

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

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

image.png

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)))

interactive-scripts/images/base_simulation_bouncing_ball/4fb1dca13946ea239ad19cc18f519c351c9cdeb7

Вывод

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

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