Engee 文档
Notebook

范德波利振荡器

本例演示如何在 Engee 中模拟二阶范德波利微分方程(VDP)。在动力学中,振荡器是非守恒的,具有非线性阻尼。振幅大时,振荡器耗散能量。振幅小时,振子产生能量。

振荡器由二阶微分方程给出:

image.png

其中 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]:
run_model (generic function with 1 method)

让我们用 Mu 值的几个变量来运行模型。从图中可以看到我们根据上述公式建立的模型。

image.png

衰减系数等于 1

设置并运行模型,然后分析记录的数据。

In [ ]:
Mu = 1;
run_model("vdp")
sleep(5)
collect(simout)
Building...
Progress 100%
Out[0]:
2-element Vector{WorkspaceArray}:
 WorkspaceArray("vdp/Integrator.1")
 WorkspaceArray("vdp/Integrator-1.1")
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)
Building...
Progress 100%
Out[0]:
2-element Vector{WorkspaceArray}:
 WorkspaceArray("vdp/Integrator.1")
 WorkspaceArray("vdp/Integrator-1.1")
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 发生器没有阻尼,能量守恒,微分方程本身的形式如下:

image.png

结论

在本例中,我们用 Engee 对二阶范德尔波尔微分方程进行了建模,并了解了它在不同阻尼因子值下的表现。

示例中使用的块