线性电路瞬态分析
**工作的目的:**在Engee程序中对包含多个电能存储设备的线性电路进行研究。
工作内容:
*为给定的电路创建一个方程组;
*开发用于计算电路支路中的电流和电容元件上的压降的程序;
*以图形依赖关系的形式呈现程序计算的结果;
*在Engee中创建电路模型;
*将仿真结果与开发程序的计算结果进行比较。
恩吉和差异化。jl软件包用作用于求解方程组的软件。 计算使用ode45方法进行,这是第4(5th)阶的一步显式Runge-Kutta方法。
下面是一个计算线性电路的例子.:
1. 差异化的应用。jl套件
包[DifferentialEquations.jl](https://diffeq.sciml.ai/stable /)提供了大量的各种类型的微分方程的优化良好的求解器:
-常微分方程
-微分代数方程
-随机微分方程
-具有延迟参数的微分方程
-具有延迟参数的随机微分方程
-具有参数不确定性的微分方程
-和其他人。
using .DifferentialEquations, .Plots
2. 求解微分方程
一般程序如下:
1. 设置功能
``'茱莉亚
f(u,p,t)
f(du,u,p,t)
哪里 `u` -变量, `p` -方程参数, `du` -衍生品 $dy/dt$.
**2. 定义任务**
``'茱莉亚
prob=ODEProblem(f,u0,tspan)
prob=ODEProblem(f,u0,tspan,p)
哪里 u0 -初始条件, tspan -估计时间间隔()
3. 数值解
``'茱莉亚
sol=solve(prob,alg;kwargs)
哪里 `alg` -数值算法, `kwargs` -其他参数。
例如,对于熟悉MATLAB/Python/R的用户,有标准库方法的翻译。:
*ode23→BS3()
*ode45/dopri5→DP5(),尽管在大多数情况下Tsit5()更有效
*ode23s→Rosenbrock23(),尽管在大多数情况下Rodas4()更有效
你可以在[документации](https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/#Translations-from-MATLAB/Python/R).
**4. 结果分析**
``'茱莉亚
溶胶(t)
情节(sol)
函数使用的地方 plot 情节。jl包。 使用其他图形包时
``'茱莉亚
情节(sol.t,sol')
3. 用于计算电路的程序
描述电路的微分方程组:
其中Uc1、Uc2是通过求解方程可以找到的电容两端的电压
为了使方程组对于站在微分符号下的未知量是可解的,有必要根据所需参数来表达不含电感的分支的电流。 为此,使用基尔霍夫定律,我们制定了耦合方程(1.2)和补充(1.1):
# Ввод параметров электрической цепи
R1 = 10.0
R2 = 15.0
R3 = 20.0
R4 = 10.0
f = 50.0
C1 = 10e-6
C2 = 30e-6
L1 = 15e-3
L2 = 20e-3
# Определение дифференциальной системы
function circuit!(du, u, p, t)
U, R1, R2, R3, R4, C1, C2, L1, L2 = p
Uc1, Uc2, i1, i4 = u
# Алгебраические уравнения связи
i2 = (u[1] + u[2] + (u[3] - u[4]) * R4) / (R2 + R4)
i3 = u[3] - i2
i5 = i3 - u[4]
# Дифференциальные уравнения
du[1] = i3 / C1
du[2] = i5 / C2
du[3] = 1 / L1 * (U(t) - i2 * R2 - u[3] * R1)
du[4] = 1 / L2 * (u[2] + i5 * R4 - u[4] * R3)
end
# Начальные условия для u
u0 = [0.0, 0.0 , 0.0, 0.0]
# Диапазон времени для расчета, пусть будет два периода промышленной частоты 50 Гц
tspan = (0.0, 0.04)
# Задание параметров
U(t) = 100 * sin(2 * π * f * t)
params = (U, R1, R2, R3, R4, C1, C2, L1, L2)
# Создание объекта ODEProblem с передачей параметров
prob = ODEProblem(circuit!, u0, tspan, params)
# Решение дифференциальных уравнений
sol = solve(prob, Tsit5());
# Построение графиков
plot(sol, label = ["Uc1(t)" "Uc2(t)" "i1(t)" "i4(t)"], layout = 4)
4. 计算结果与仿真结果的比较
让我们加载位于 /user/start/examples/power_systems/lab_work/lab_work.engee.
modelName = "lab_work";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
让我们运行模拟:
results = engee.run( modelName );
让我们为模型的输出变量(那些标记为记录信号的变量)提供方便的名称:
t = results["i1"].time;
i1 = results["i1"].value;
i4 = results["i4"].value;
Uc1 = results["Uc1"].value;
Uc2 = results["Uc2"].value;
让我们根据仿真结果构建图表。:
plot(t, [Uc1 Uc2 i1 i4], label = ["Uc1_sim" "Uc2_sim" "i1_sim" "i4_sim"], layout = 4)
让我们在一个图形上显示仿真结果和计算结果。:
plot(t, [Uc1 Uc2 i1 i4], label = ["Uc1_sim" "Uc2_sim" "i1_sim" "i4_sim"], layout = 4)
plot!(sol, label = ["Uc1" "Uc2" "i1" "i4"], layout = 4)
工作结论:在工作过程中,编制了代数微分方程组,开发了计算电容电路元件支路电流和电压降的程序,显示了电流和电压随时间变化规律的图形依赖性。 将Engee建模的结果与开发的计算程序的结果进行比较。 一般来说,实验室工作提出了一个包含几个电能存储设备的电路的分析。