Математические модели тел
В данном примере мы рассмотрим две модели тел. В первом случае это будет маятник, а во втором – тело на пружине. Проанализируем поведение этих тел.
Математический маятник
Давайте разберём процесс описания колебательных систем при помощи интегральных расчётов в среде разработки Engee. На рисунке показана модель колебательной системы:
Модель включает в себя несколько основных понятий:
-
Материальная точка массы m.
-
Невесомая нерастяжимая нить длиной l.
-
Однородное поле сил тяготения g.
В таком случае формула для расчёта момента силы тяжести равна отрицательному значению массы , умноженному на и и на синус угла отклонения маятника.
Перейдём к реализации. Первым этапом объявим параметры системы.
m = 1;
g = 9.8;
l = 1;
theta_init = 40*(pi/180); # перевод начального значения градуса отклонения в радианы
mgl=(-m*g*l);
invI = 1/(m * l^2);
Теперь запустим систему интегральных уравнений, построенную в моделях Engee. На рисунке ниже представлена эта модель:
Примечание: при моделировании использовался решатель AB3.
AB3 – трехшаговый метод третьего порядка, инициализация методов Ралстона второго порядка.
# Запуск модели
model = engee.load("/user/start/examples/base_simulation/mathematical_models_of_bodies/Math_pendulum.engee"; force = true);
engee.run(model, verbose=true);
engee.close(model, force=true);
Building...
Progress 0%
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Для обработки и визуализации результатов моделирования нам необходимо подключить несколько библиотек.
using CSV
using DataFrames
using Plots
plotlyjs()
Plots.PlotlyJSBackend()
Теперь мы можем считать данные, записанные в процессе моделирования. Данные в CSV-файле содержат два столбца:
-
временные отметки моделирования;
-
выходные данные, в данном случае значения градуса отклонения маятника.
# Чтение CSV
Data = Matrix(CSV.read("/user/start/examples/base_simulation/mathematical_models_of_bodies/out.csv",DataFrame));
Data_time = Data[:,1];
Data = Data[:,2];
Теперь проанализируем результаты колебания, представив их в графическом виде.
# Построение графиков
plot(Data_time , Data, legend = false)
plot!(title = "Результаты моделирования в Engee", ylabel = "Данные", xlabel="Время, c")
Как мы видим, модель отображает не затухающие колебания математического маятника с постоянством колебательного процесса.
Математическая модель масса-пружина-демпфер
В данном примере мы продемонстрируем возможности расчёта поведения тела на пружине с целью демонстрации возможностей Engee в сфере решения интегральных уравнений. На рисунке ниже показан общий вид тела, для которого будут выполняться расчёты.
Демпфер масс-пружины, изображенный на рисунке, моделируется дифференциальным уравнением второго порядка.
где – это сила, приложенная к массе, и – горизонтальное положение массы.
Перейдём к реализации. Сначала объявим параметры системы.
m = 2;
c = 50;
k = 0.2;
invM = 1/m;
Теперь запустим систему интегральных уравнений, построенную в моделях Engee. На рисунке ниже представлена эта модель:
Примечание: при моделировании использовался решатель AB3.
AB3 – трехшаговый метод третьего порядка, инициализация методов Ралстона второго порядка.
# Запуск модели
model = engee.load("/user/start/examples/base_simulation/mathematical_models_of_bodies/Body_on_spring.engee", force=true);
engee.run(model, verbose=true);
engee.close(model, force=true);
Building...
Progress 0%
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Для обработки и визуализации результатов моделирования нам необходимо подключить несколько библиотек.
using CSV
using DataFrames
using Plots
plotlyjs()
Plots.PlotlyJSBackend()
Теперь мы можем считать данные, записанные в процессе моделирования. Данные в CSV-файле содержат два столбца:
-
временные отметки моделирования;
-
выходные данные.
# Чтение CSV
Data1 = Matrix(CSV.read("/user/start/examples/base_simulation/mathematical_models_of_bodies/out1.csv",DataFrame));
Data2 = Matrix(CSV.read("/user/start/examples/base_simulation/mathematical_models_of_bodies/out2.csv",DataFrame));
Data_time = Data1[:,1];
Data1 = Data1[:,2];
Data2 = Data2[:,2];
Теперь проанализируем результаты колебания и представим их в графическом виде.
# Построение графиков
plot(Data_time , Data1, legend = false)
plot!(Data_time , Data2, legend = false)
plot!(title = "Результаты моделирования в Engee", ylabel = "Данные", xlabel="Время, c")
Как мы видим, модель отображает колебания с постепенным затуханием колебательного процесса, что идентично поведению физического тела на пружине.
Вывод
В результате реализации данного примера мы показали вам возможности Engee в моделировании поведения физических объектов за счёт построения математической модели объекта. Данный пример позволяет продемонстрировать поведение объекта исходя из его параметров, что может быть применимо и к более сложным алгоритмам и системам.