Документация Engee

Осциллятор Ван дер Поля

В этом примере мы покажем, как в Engee создать модель динамики, работающую согласно уравнению Ван дер Поля второго порядка.

Введение

Осциллятор Ван дер Поля демонстрирует динамику не консервативной системы с нелинейным характером затухания.

Эту систему можно описать следующим уравнением:

где – координата (например, положение осциллятора), – коэффициент демпфирования. При помощи такой модели исследуют самые разные процессы в биологии и в физике, в том числе в радиотехнике и электронике.

Мы будем моделировать эту систему с помощью блоков на холсте для графического моделирования в Engee. В файле van_der_pol_oscillator.engee содержится модель следующего вида:

image.png

В ней два отдельных интегратора, которые отвечают за вычисление сигналов x1 (координата) и x2 (скорость).

Запуск модели с μ = 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
"Model(van_der_pol_oscillator)"

Запустим модель в исходном варианте и построим график:

data = engee.run( m );

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

interactive-scripts/images/edu_van_der_pol_oscillator/88f455f3b1a068534521bb10ba86954b728bd78b

Мы можем выбирать разные исходные точки, меняя исходное значение каждого интегратора, но система всегда придет к предельному циклу.

График можно построить и для каждого сигнала в отдельности.

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

interactive-scripts/images/edu_van_der_pol_oscillator/d2db6564a1ae7182aa4d402f5b61468263f9729c

Запуск модели с μ = 0

В этом режиме уравнение системы сокращается до уравнения обычного гармонического осциллятора:

Установим коэффициент в ноль и запустим модель.

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 )

interactive-scripts/images/edu_van_der_pol_oscillator/f8106a04011fdfdd550f9f4ef2e2114d14e441c8

Построим еще один график для этой системы:

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

interactive-scripts/images/edu_van_der_pol_oscillator/3a0517be9ac6e8c63f7ac51fbda768af3c8dde39

Заключение

Мы убедились, что графическое моделирование в Engee – удобный способ, позволяющий экспериментировать с топологией системы, усложнять модель или использовать ее в составе сложной демонстрации.