身体的数学模型
在这个例子中,我们将考虑两个身体模型。 在第一种情况下,它将是一个钟摆,在第二种情况下,一个弹簧上的身体。 让我们来分析这些机构的行为。
数学钟摆
让我们来看看在Engee开发环境中使用积分计算描述振荡系统的过程。 该图显示了振荡系统的模型。:
该模型包括几个基本概念:
- 质点为m。
- 失重不可伸缩螺纹长度l。
- 匀重力场g。
在这种情况下,计算重力矩的公式是 等于质量的负值 乘以 和 和摆锤偏转角度的正弦。
让我们继续执行。 第一步是公布系统参数。
Pkg.add(["CSV"])
m = 1;
g = 9.8;
l = 1;
theta_init = 40*(pi/180); # перевод начального значения градуса отклонения в радианы
mgl=(-m*g*l);
invI = 1/(m * l^2);
现在让我们运行在Engee模型中构建的积分方程组。 下面的图片显示了这个模型:
注:仿真中使用了求解器AB3。
_AB3是三阶三步法,初始化二阶Ralston方法。
# Запуск модели
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);
为了处理和可视化仿真结果,我们需要连接几个库。
using CSV
using DataFrames
using Plots
plotlyjs()
现在我们可以读取模拟过程中记录的数据。 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")
正如我们所看到的,该模型显示了具有恒定振荡过程的数学钟摆的非衰减振荡。
质量-弹簧-阻尼器的数学模型
在这个例子中,我们将展示计算弹簧上物体行为的可能性,以展示工程师在求解积分方程方面的能力。 下图显示了将对其执行计算的主体的一般视图。
图中所示的质量弹簧阻尼器由二阶微分方程建模。
哪里 是施加在质量上的力,以及 -质量的水平位置。
让我们继续执行。 首先,我们将公布系统参数。
m = 2;
c = 50;
k = 0.2;
invM = 1/m;
现在让我们运行在Engee模型中构建的积分方程组。 下面的图片显示了这个模型:
注:仿真中使用了求解器AB3。
_AB3是三阶三步法,初始化二阶Ralston方法。
# Запуск модели
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);
为了处理和可视化仿真结果,我们需要连接几个库。
using CSV
using DataFrames
using Plots
plotlyjs()
现在我们可以读取模拟过程中记录的数据。 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通过构建对象的数学模型来对物理对象的行为进行建模的能力。
此示例允许您根据对象的参数演示对象的行为,这可以适用于更复杂的算法和系统。