范德波利振荡器¶
本例演示如何在 Engee 中模拟二阶范德波利微分方程(VDP)。在动力学中,振荡器是非守恒的,具有非线性阻尼。振幅大时,振荡器耗散能量。振幅小时,振子产生能量。
振荡器由二阶微分方程给出:
其中 1.x 是相对于时间的位置。 2.t - 时间 3.Mu - 衰减。
VDP 发生器用于生物和物理科学,包括电路。
接下来,让我们进入实现阶段--声明运行模型的函数并连接必要的库。
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]:
让我们用 Mu 值的几个变量来运行模型。从图中可以看到我们根据上述公式建立的模型。
衰减系数等于 1¶
设置并运行模型,然后分析记录的数据。
In [ ]:
Mu = 1;
run_model("vdp")
sleep(5)
collect(simout)
Out[0]:
In [ ]:
# Скорость
v = simout["vdp/Integrator.1"];
v = collect(v);
plot(v.time, v.value)
# Положение
p = simout["vdp/Integrator-1.1"];
p = collect(p);
plot!(p.time, p.value)
Out[0]:
从结果图中我们可以看到,在 Mu = 1 时,VDP 发生器具有非线性阻尼。
衰减系数等于零¶
设置并运行模型,然后分析记录的数据。
In [ ]:
Mu = 0;
run_model("vdp")
sleep(5)
collect(simout)
Out[0]:
In [ ]:
# Скорость
v = simout["vdp/Integrator.1"];
v = collect(v);
plot(v.time, v.value)
# Положение
p = simout["vdp/Integrator-1.1"];
p = collect(p);
plot!(p.time, p.value)
Out[0]:
通过分析图表,我们可以得出结论:在 Mu = 0 时,VDP 发生器没有阻尼,能量守恒,微分方程本身的形式如下:
结论¶
在本例中,我们用 Engee 对二阶范德尔波尔微分方程进行了建模,并了解了它在不同阻尼因子值下的表现。