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

Моделирование электрического колебательного контура

Введение

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

Задание:

Дана электрическая схема, состоящая из идеального конденсатора ёмкостью C = 1 Ф, идеального индуктора индуктивностью L = 1 Гн и заземления. Пусть в начальный момент времени конденсатор заряжен до 1 В, а ток в цепи отсутствует.

image.png

Постройте соответствующую электрической схеме задачу Коши для системы обыкновенных дифференциальных уравнений и напишите программу для её решения любым численным методом на интервале t ∈ [0; 100]. Приведите графики изменения тока и напряжения конденсатора. Обоснуйте правильность полученного решения как с точки зрения физики процесса, так и с точки зрения математики.

Алгоритм расчёта

Решение: Электрической схеме, указанной в задании, соответствует дифференциальное уравнение незатухающих колебаний в колебательном контуре:

$$U+L \frac{dl}{dt}=0,$$

где $U=\frac{q}{c}$ - напряжение на конденсаторе, $i=-\frac{dq}{dt}$ - сила тока, а $\frac{di}{dt}=-\frac{d^2q}{dt^2}$ - изменение силы тока.

Тогда уравнение, указанное выше, принимает вид:

$$L\frac{d^2q}{dt^2}-\frac{q}{c}=0$$

Для того чтобы понизить порядок производной, была применена замена переменной: $q=y_1, \frac{dq}{dt}=y_2$. В результате получена система уравнений:

$$\begin{cases}\frac{dy_1}{dt}=y_2 \\\frac{dy_2}{dt}=\frac{y_1}{LC}\end{cases}$$

К полученной системе применяем формулу метода Эйлера и получаем:

$$Y1(i)=Y1(i-1) + h*Y2(i),$$ $$Y2(i)=Y2(i-1) - h * (Y1(i-1)/(L*C))$$

Реализация алгоритма расчёта на языке Julia:

In [ ]:
using Plots #импорт графической библиотеки
n = 1000; #количество шагов расчёта
U = fill(0.0,n); #определение массивов
Y1 = fill(0.0,n);
Y2 = fill(0.0,n);
t = fill(0.0,n);
U[1] = 1.0; #напряжение источника в начальный момент времени, на первом шаге расчёта
C = 1.0; #ёмкость конденсатора
L = 1.0; #индуктивность
Y1[1] = 0.0; #сила тока
Y2[1] = U[1]/L; #скорость изменения силы тока
h = 0.1; #величина шага расчёта
t[1] = 0.0; #время на первом шаге расчёта
for i=2:n #начало цикла
    Y2[i] = Y2[i-1] - h * (Y1[i-1] / (L * C));
    Y1[i] = Y1[i-1] + h * Y2[i];
    U[i] = U[i-1] - h * (Y1[i] / C);#изменение напряжения, полученное из формулы U=q/C, где q - заряд конденсатора, а С - его ёмкость
    t[i] = t[i-1] + h;
end
I = Y1;

Визуализация рассчитанных параметров

Результаты расчётов, полученные при реализации модели:

In [ ]:
plotlyjs()
plot(t, I, xlabel="t", ylabel="", title="Напряжение U и ток I", linecolor =:blue, bg_inside =:white, line =:solid, label = "I")
plot!(t, U, xlabel="t", ylabel="", title="Напряжение U и ток I", linecolor =:red, bg_inside =:white, line =:dashdot, label = "U")
Out[0]:

Реализация запуска модели в Engee с помощью программного управления

Загрузка модели:

In [ ]:
modelName = "LC_model";
LC_model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");

Запуск загруженной модели:

In [ ]:
data = engee.run( modelName )
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "current" => 1001×2 DataFrame…
  "voltage" => 1001×2 DataFrame

Загрузка и визуализация данных, полученных в ходе симуляции

Чтение csv-файлов с данными об изменении напряжения и силы тока, с последующим преобразованием в датафрейм и матрицу.

In [ ]:
using CSV, DataFrames

voltage = data["voltage"];
current = data["current"];

Подключение библиотеки для построение графиков:

In [ ]:
using Plots

Построение графика, описывающего изменение напряжения.

In [ ]:
plot(voltage.time, voltage.value, xlabel="Время, с", ylabel="Амплитуда", title="Напряжение U и ток I", linecolor =:red, bg_inside =:white, line =:dashdot, label = "U")
plot!(current.time, current.value, xlabel="Время, с", linecolor =:blue, bg_inside =:white, line =:solid, label = "I")
Out[0]:

Вывод

В данном примере был продемонстрирован расчёт колебаний LC-контура с помощью скрипта, а также в визуальной среде моделирования используя блок Engee Function.

Как видно из графиков – колебания незатухающие, так как в схеме есть только идеальные элементы, не учитывающие диссипацию энергии. Частота колебаний, полученных при моделировании, соответствует вычисленной, по формуле $f=\frac{1}{2\pi\sqrt{LC}}$ и составляет 0,1591 Гц, период колебаний 6,28 с.

Блоки, использованные в примере