Осциллятор Ван дер Поля¶
В этом примере мы покажем, как в 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$, то мы увидим автоколебательный режим работы с нелинейным затуханием. Загрузим модель:
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
Запустим модель в исходном варианте и построим график:
data = engee.run( m );
using Plots
plot( data["x1"].value, data["x2"].value )
Мы можем выбирать разные исходные точки, меняя исходное значение каждого интегратора, но система всегда придет к предельному циклу.
График можно построить и для каждого сигнала в отдельности.
plot( data["x1"].time, data["x1"].value, label="x1" )
plot!( data["x2"].time, data["x2"].value, label="x2" )
Запуск модели с μ = 0¶
В этом режиме уравнение системы сокращается до уравнения обычного гармонического осциллятора:
$$\frac{d^2 x}{dt^2} + x = 0$$
Установим коэффициент $\mu$ в ноль и запустим модель.
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 )
Построим еще один график для этой системы:
plot( data["x1"].time, data["x1"].value, label="x1" )
plot!( data["x2"].time, data["x2"].value, label="x2" )
Заключение¶
Мы убедились, что графическое моделирование в Engee – удобный способ, позволяющий экспериментировать с топологией системы, усложнять модель или использовать ее в составе сложной демонстрации.