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

衰减系数等于一

让我们设置Mu并运行模型,然后分析聚合数据。

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发生器具有非线性衰减。

衰减系数为零

让我们设置Mu并运行模型,然后分析聚合数据。

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中的二阶范德波尔微分方程进行了建模,并研究了它如何与衰减系数的不同值一起工作。

示例中使用的块