Engee 文档
Notebook

范德波利振荡器

在本示例中,我们将展示如何在Engee中根据二阶范德波利方程创建一个动力学模型。

简介

范德波尔振荡器展示了具有非线性阻尼特性的非守恒系统的动力学。

该系统可用以下方程描述:

$$\frac{d^2 x}{dt^2} - \mu \left( 1- x^2 \right) \frac{dx}{dt} + x = 0$$

其中$x$ 是坐标(例如振荡器的位置),$\mu$ 是阻尼系数。该模型用于研究生物学和物理学中的各种过程,包括无线电工程和电子学。

我们将在Engee中使用图形建模画布上的图块为该系统建模。文件van_der_pol_oscillator.engee 包含以下形式的模型:

image.png

它有两个独立的积分器,分别负责计算x1 (坐标)和x2 (速度)信号。

运行模型时,μ = 1

如果我们使用参数$\mu = 1$ 运行该模型,我们会看到一种带有非线性阻尼的自动振荡运行模式。让我们加载模型:

In [ ]:
if "van_der_pol_oscillator" in [m.name for m in engee.get_all_models()]
    m = engee.open( "van_der_pol_oscillator" );
else
    m = engee.load( "/user/start/examples/edu/van_der_pol_oscillator/van_der_pol_oscillator.engee" );
end
Out[0]:
"Model(van_der_pol_oscillator)"

让我们运行原始版本的模型并绘制曲线图:

In [ ]:
data = engee.run( m );

using Plots
plot( data["x1"].value, data["x2"].value )
Out[0]:

我们可以通过改变每个积分器的初始值来选择不同的起点,但系统始终会到达极限循环。

还可以分别绘制每个信号的曲线图。

In [ ]:
plot( data["x1"].time, data["x1"].value, label="x1" )
plot!( data["x2"].time, data["x2"].value, label="x2" )
Out[0]:

以 μ = 0 运行模型

在这种情况下,系统方程简化为普通谐振子方程:

$$\frac{d^2 x}{dt^2} + x = 0$$

让我们将$\mu$ 系数设为零,然后运行模型。

In [ ]:
engee.set_param!( "van_der_pol_oscillator/Mu", "Gain"=>0 )

data = engee.run( m );
data = engee.run( m );

using Plots
plot( data["x1"].value, data["x2"].value )
Out[0]:

我们再为这个系统绘制一张图:

In [ ]:
plot( data["x1"].time, data["x1"].value, label="x1" )
plot!( data["x2"].time, data["x2"].value, label="x2" )
Out[0]:

结论

我们已经看到,在Engee中进行图形建模是一种方便的方法,可以对系统拓扑结构进行实验,使模型复杂化,或将其作为复杂演示的一部分。

示例中使用的块