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

Введение

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

Задание:

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

image.png

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

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

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

где - напряжение на конденсаторе, - сила тока, а - изменение силы тока.

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

Для того чтобы понизить порядок производной, была применена замена переменной: . В результате получена система уравнений:

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

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

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;

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

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

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")

interactive-scripts/images/math_and_optimization_Electric_Oscillatory_Circuit_Modeling/dff2befc9c306576b4d5282498f4b51a1b2559a7

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

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

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

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

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

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

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

using CSV, DataFrames

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

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

using Plots

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

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")

interactive-scripts/images/math_and_optimization_Electric_Oscillatory_Circuit_Modeling/fbaf8a8b54311961cee07aa83f4219dfb31be058

Вывод

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

Как видно из графиков – колебания незатухающие, так как в схеме есть только идеальные элементы, не учитывающие диссипацию энергии. Частота колебаний, полученных при моделировании, соответствует вычисленной, по формуле и составляет 0,1591 Гц, период колебаний 6,28 с.

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