振荡电路建模
导言
本例将讨论振荡电路的建模,并讨论 Engee 建模环境中 Engee 功能块的使用。
任务
给出一个由电容 C = 1 F 的理想电容器、电感 L = 1 Gn 的理想电感器和地线连接组成的电路。假设初始时刻电容器的电压为 1 V,电路中没有电流。

构建与电路图相对应的常微分方程系统的 Cauchy 问题,并编写一个程序,在区间 t∈[0; 100] 上用任意数值方法求解。给出电容器的电流和电压变化图。从过程的物理学角度和数学角度说明所求解的正确性。
计算算法
解法
问题中给出的电路对应于振荡电路中无阻尼振荡的微分方程:
其中 是电容器两端电压, 是电流, 是电流变化。
那么上式的形式为
为了降低导数的阶数,应用了变量替换法: 。由此得到方程组:
对于得到的系统,我们应用欧拉法公式,得到
用 Julia 语言实现计算算法:
In [ ]:
Pkg.add(["CSV"])
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]:
加载并可视化模拟生成的数据
读取包含电压和电流变化数据的 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]:
结论
在本示例中,我们利用 Engee 功能块,在可视化建模环境中使用脚本演示了 LC 回路振荡的计算。
从图中可以看出,振荡是无阻尼的,因为电路中只有理想元件,没有考虑能量耗散。模拟得到的振荡频率与 公式计算得出的频率一致,为 0.1591 赫兹,振荡周期为 6.28 秒。