范德波利振荡器¶
在本示例中,我们将展示如何在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
包含以下形式的模型:
它有两个独立的积分器,分别负责计算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]:
让我们运行原始版本的模型并绘制曲线图:
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]:
让我们将$\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中进行图形建模是一种方便的方法,可以对系统拓扑结构进行实验,使模型复杂化,或将其作为复杂演示的一部分。