Engee 文档
Notebook

电振荡电路的仿真

导言

在本例中,我们将考虑对电振荡电路进行建模,以及使用Engee函数建模环境模块。

任务:

给出了一个电路,由一个容量为C=1F的理想电容器,一个电感为l=1Gn的理想电感和接地组成。 假设在初始时刻电容器充电到1V,并且电路中没有电流。

image.png

为一个常微分方程组构造与电路对应的柯西问题,并编写一个程序,用于在区间t〇[0;100]内使用任意数值方法求解。 给出电容器电流和电压变化的曲线图。 证明从过程的物理角度和数学角度获得的解决方案的正确性。

计算算法

解决方案:
分配中指定的电路对应于振荡电路中无阻尼振荡的微分方程。:

哪里 -电容器两端的电压, -电流强度,a -电流强度的变化。

然后上面的等式采用以下形式:

为了降低导数的阶数,应用了变量替换。: . 结果,得到方程组:

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

我们将欧拉方法的公式应用于所得系统,并获得:

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]:
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]:

结论

在本例中,使用脚本以及使用Engee功能块在可视化建模环境中演示了LC电路振荡的计算。

从图中可以看出,振荡是无阻尼的,因为电路只有不考虑能量耗散的理想元件。 在仿真过程中获得的振荡频率对应于使用公式计算的频率 且为0.1591hz,振荡周期为6.28s。

示例中使用的块