人体数学模型
在本例中,我们将考虑两种物体模型。第一个模型是摆,第二个模型是弹簧上的物体。我们将分析这些物体的行为。
数学摆
让我们分析一下在Engee开发环境中使用积分计算描述振荡系统的过程。图中显示了一个振荡系统的模型:

该模型包括几个基本概念:
1.质量为 m 的物质点。
2.一根长度为l的无重力不可拉伸的线。
3. 重力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")
我们可以看到,模型显示了数学摆的非阻尼振荡,振荡过程恒定。
质量弹簧阻尼模型的数学模型
在本例中,我们将演示计算物体在弹簧上的行为的可能性,以展示Engee求解积分方程的能力。下图显示了将进行计算的物体的全貌。

图中所示的质量弹簧阻尼器由二阶微分方程模拟。
其中 是施加在质量上的力, 是质量的水平位置。
下面我们开始执行。首先,让我们声明系统参数。
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通过建立物体的数学模型来模拟物体行为的能力。
通过本例,您可以根据物体的参数来演示物体的行为,并将其应用到更复杂的算法和系统中。