电振荡电路的仿真
导言
在本例中,我们将考虑对电振荡电路进行建模,以及使用Engee函数建模环境模块。
任务:
给出了一个电路,由一个容量为C=1F的理想电容器,一个电感为l=1Gn的理想电感和接地组成。 假设在初始时刻电容器充电到1V,并且电路中没有电流。
为一个常微分方程组构造与电路对应的柯西问题,并编写一个程序,用于在区间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]:
下载和可视化仿真过程中获得的数据
读取带有电压和电流变化数据的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。