2024-12-12
Matlab
00

目录

牛顿-拉夫逊法求解电力潮流的理论过程
牛顿-拉夫逊法求解潮流基本步骤:
功率不平衡计算:
对于PQ节点的功率不平衡量:
对于PV节点:
雅可比矩阵的计算:
非对角元素:
对角元素:
牛顿-拉夫逊法迭代计算:

https://kb.cloudpss.net/documents/software/emtlab/power-flow/fundamentals/

各个部分的参数:

  1. 基准容量 (baseMVA)
  • mpc.baseMVA = 100,表示系统的基准容量为100MVA
  1. 母线数据 (bus data) 每行包含以下参数:
  • bus_i: 母线编号
  • type: 节点类型(1=PQ节点,2=PV节点,3=平衡节点/参考节点)
  • Pd: 有功负荷(MW)
  • Qd: 无功负荷(MVar)
  • Gs: 对地电导
  • Bs: 对地电纳
  • area: 区域号
  • Vm: 电压幅值初值(标幺值)
  • Va: 电压相角初值(度)
  • baseKV: 基准电压(kV)
  • zone: 区域
  • Vmax/Vmin: 电压上下限
  1. 发电机数据 (generator data)
  • bus: 发电机连接的母线号
  • Pg: 有功出力(MW)
  • Qg: 无功出力(MVar)
  • Qmax/Qmin: 无功出力上下限
  • Vg: 发电机端电压设定值
  • mBase: 发电机容量基准
  • status: 发电机运行状态(1=运行,0=停运)
  • Pmax/Pmin: 有功出力上下限
  1. 支路数据 (branch data)
  • fbus/tbus: 支路起始和终止节点
  • r: 支路电阻(标幺值)
  • x: 支路电抗(标幺值)
  • b: 支路对地电纳(标幺值)
  • rateA/B/C: 支路容量限值(不同时期)
  • ratio: 变压器变比
  • angle: 移相角度
  • status: 支路运行状态(1=运行,0=停运)
  • angmin/angmax: 相角差限值
matlab
%% 模块1:读取原始数据(ReadData) [baseMVA, bus, gen, branch, NUM, PL, U, Theta] = ReadData(fileName); %% 运行Matpower库潮流计算 [results, Vm, Va, Pij_AC, Qij_AC, Sbus, Pbus, Qbus] = runMatpowerPF(fileName); %% 我的牛顿拉夫逊法计算潮流 tic; %开始计时 %% 模块2:形成导纳矩阵( FormYmatrix ) [Y,G,B] = FormYmatrix(baseMVA,bus,branch,NUM);% 形成导纳矩阵 %% 牛顿-拉夫逊迭代法求解潮流 % 计算初始节点注入功率 [P,Q] = PQ_inject(baseMVA,bus,gen,NUM); % 计算各节点的有功、无功功率注入值 % 设置迭代参数 Iteration_Num = 0; % 当前迭代次数计数器 Iteration_Num_max = 50; % 最大允许迭代次数,防止死循环 Accuracy = 1e-5; % 收敛精度要求,即功率不平衡量的允许误差 % 开始牛顿-拉夫逊迭代过程 while Iteration_Num <= Iteration_Num_max % 计算功率不平衡量 [cort,dP,dQ,Pi,Qi] = CalculateDeltaPQ(P,Q,U,Theta,Y,PL); % cort: 功率不平衡量向量 % dP: 有功功率不平衡量 % dQ: 无功功率不平衡量 % Pi,Qi: 当前迭代步计算的注入功率 max_mismatch = cort; % 记录当前迭代步的最大功率不平衡量 % 判断是否满足收敛条件 if ( max(abs(cort)) < Accuracy ) fprintf('计算收敛\n'); fprintf('迭代次数:%d 次\n',Iteration_Num); break; % 满足收敛条件,退出迭代循环 else % 未收敛,继续迭代计算 % 形成雅可比矩阵 J = FormJacobi(U,Theta,Y,PL); % 求解修正方程,更新状态变量 [U,Theta] = SolveCorrectionEquation(NUM,U,Theta,PL,J,cort); % U: 更新后的节点电压幅值 % Theta: 更新后的节点电压相角 % 更新迭代次数 Iteration_Num = Iteration_Num + 1; end end % 判断是否因超过最大迭代次数而退出循环 if Iteration_Num > Iteration_Num_max fprintf('\n潮流计算不收敛\n'); end time = toc; %结束计时并记录 %运行时间 fprintf('运行时间:%.4f秒',time);

我来详细解释这个潮流计算程序的每个步骤:

  1. 模块1:读取原始数据
matlab
[baseMVA, bus, gen, branch, NUM, PL, U, Theta] = ReadData(fileName);
  • 读取系统基本数据,包括基准容量、母线、发电机、支路信息
  • 初始化电压幅值(U)和相角(Theta)
  • NUM为系统节点数,PL为节点类型标志
  1. Matpower库潮流计算
matlab
[results, Vm, Va, Pij_AC, Qij_AC, Sbus, Pbus, Qbus] = runMatpowerPF(fileName);
  • 使用Matpower工具箱进行对比验证
  1. 自编牛顿拉夫逊法计算潮流

a) 形成导纳矩阵

matlab
[Y,G,B] = FormYmatrix(baseMVA,bus,branch,NUM);
  • Y是节点导纳矩阵
  • G是导纳实部(电导)
  • B是导纳虚部(电纳)

b) 计算初始节点注入功率

matlab
[P,Q] = PQ_inject(baseMVA,bus,gen,NUM);
  • 计算各节点的有功(P)和无功(Q)功率注入值

c) 迭代计算过程:

  • 计算功率不平衡量
matlab
[cort,dP,dQ,Pi,Qi] = CalculateDeltaPQ(P,Q,U,Theta,Y,PL);
  • 检查收敛条件

    • 如果最大功率不平衡量小于设定精度,则收敛
    • 否则继续迭代
  • 形成雅可比矩阵

matlab
J = FormJacobi(U,Theta,Y,PL);
  • 求解修正方程,更新状态变量
matlab
[U,Theta] = SolveCorrectionEquation(NUM,U,Theta,PL,J,cort);

迭代过程直到:

  • 达到收敛条件
  • 或超过最大迭代次数(50次)

牛顿-拉夫逊法求解电力潮流的理论过程

潮流计算的求解是基于电路中的节点电压方程:

I˙n=YnU˙n\dot{\mathbf{I}}_n = \mathbf{Y}_n \dot{\mathbf{U}}_n

其中,节点导纳矩阵 Yn\mathbf{Y}_n 描述了网络中元件特性与网络拓扑的连接关系,而节点电压方程则描述了各个节点之间的电流与电压关系。

潮流计算的边界条件是复功率,因此需要建立功率与电压之间的关系,即功率方程(潮流方程)。可以将节点电流用节点功率和电压表示:

I˙i=SiUi=PijQiUi\dot{I}_i = \frac{S_i^*}{U_i^*} = \frac{P_i - jQ_i}{U_i^*}

将电流表达式带入节点电压方程后,可以得到潮流方程:

PijQi=Uij=1nYijU˙j(i=1,2,,n)P_i - jQ_i = U_i^* \sum_{j=1}^n Y_{ij} \dot{U}_j \quad (i = 1, 2, \cdots, n)

其中,Yij=Gij+jBijY_{ij} = G_{ij} + jB_{ij},并且

U˙i=Uiδi=Uiejδi\dot{U}_i = U_i \angle \delta_i = U_i e^{j\delta_i}

将其带入潮流方程后,可以将潮流方程转化为极坐标形式:

PijQi=Uiejδij=1n(Gij+jBij)UjejδjP_i - jQ_i = U_i e^{-j\delta_i} \sum_{j=1}^n \left( G_{ij} + jB_{ij} \right) U_j e^{j\delta_j}
=Uij=1nUj(Gij+jBij)ejδij= U_i \sum_{j=1}^n U_j \left( G_{ij} + jB_{ij} \right) e^{-j\delta_{ij}}
=Uij=1nUj(Gij+jBij)(cosδij+jsinδij)= U_i \sum_{j=1}^n U_j \left( G_{ij} + jB_{ij} \right) (\cos\delta_{ij} + j\sin\delta_{ij})

将实部和虚部分开,得到潮流计算的求解方程:

{Pi=Uij=1nUj(Gijcosδij+Bijsinδij)Qi=Uij=1nUj(GijsinδijBijcosδij)\begin{cases} P_i = U_i \sum_{j=1}^n U_j \left( G_{ij} \cos\delta_{ij} + B_{ij} \sin\delta_{ij} \right) \\ Q_i = U_i \sum_{j=1}^n U_j \left( G_{ij} \sin\delta_{ij} - B_{ij} \cos\delta_{ij} \right) \end{cases}

从以上分析可以看出,一个节点包含 4 个运行变量(PP, QQ, UU, δ\delta),对应 2 个方程。对于 nn 个节点的系统,总共有 4n 个变量和 2n 个方程。如果每个节点给定 2 个变量值,那么可以通过这些方程求解剩余的 2n 个未知量。

电力系统节点根据不同的变量给定方式可以分为PQ节点、PV节点和平衡节点。

  1. PQ节点: 给定有功功率 PiP_i 和无功功率 QiQ_i,待求节点电压幅值 UiU_i 和电压相位 δi\delta_i

  2. PV节点: 给定有功功率 PiP_i 和电压幅值 UiU_i,待求无功功率 QiQ_i 和电压相位 δi\delta_i

  3. 平衡节点: 全系统功率必须平衡,功率损耗 PlossP_{\text{loss}}QlossQ_{\text{loss}} 是状态变量的函数,事先未知。需要一个节点不可以给定 PPQQ,但给定电压幅值 UU 和相位 δ\delta,用以平衡全系统功率,故称为平衡节点。

由于潮流计算方程是一个非线性方程组,直接求解非常困难,通常采用牛顿-拉夫逊法来求解。


牛顿-拉夫逊法求解潮流基本步骤:

  1. 形成节点导纳矩阵
  2. 给各节点电压相角赋初值
  3. 代入修正方程,求常数项向量
  4. 求雅可比矩阵
  5. 解修正方程,求解节点电压相角的修正量
  6. 更新节点电压
  7. 检查收敛性,如果不收敛,则用新的节点电压作为初值进行下一次迭代;否则进入下一步;
  8. 计算支路功率分布,包括计算PV节点的无功功率和平衡节点的注入功率。

功率不平衡计算:

潮流计算中的功率不平衡列向量为:

ΔS=[ΔPΔQ]=[ΔP1ΔPnm1ΔQ1ΔQm]T\Delta S = \begin{bmatrix} \Delta P \\ \Delta Q \end{bmatrix} = \begin{bmatrix} \Delta P_1 & \cdots & \Delta P_{n-m-1} & \Delta Q_1 & \cdots & \Delta Q_m \end{bmatrix}^T

其中,nn 是节点数,mm 是PQ节点的数量,nm1n-m-1 是PV节点的数量,1个平衡节点。

对于PQ节点的功率不平衡量:

ΔPi=PiVij=1nVj(Gijcosθij+Bijsinθij)\Delta P_i = P_i - |V_i| \sum_{j=1}^n |V_j| \left( G_{ij} \cos{\theta_{ij}} + B_{ij} \sin{\theta_{ij}} \right)
ΔQi=QiVij=1nVj(GijsinθijBijcosθij)\Delta Q_i = Q_i - |V_i| \sum_{j=1}^n |V_j| \left( G_{ij} \sin{\theta_{ij}} - B_{ij} \cos{\theta_{ij}} \right)

其中,i=1,2,,mi = 1, 2, \dots, mViV_i 是电压幅值,θij\theta_{ij} 是电压相位差。

对于PV节点:

电压幅值已给定,因此不作为变量。在迭代过程中,只考虑PV节点的有功功率偏差方程:

ΔPi=PiVij=1nVj(Gijcosθij+Bijsinθij)\Delta P_i = P_i - |V_i| \sum_{j=1}^n |V_j| \left( G_{ij} \cos{\theta_{ij}} + B_{ij} \sin{\theta_{ij}} \right)

其中,i=1,2,,nm1i = 1, 2, \dots, n-m-1


雅可比矩阵的计算:

雅可比矩阵 JJ 的元素可以分为4个部分,分别是 HHNNJJLL,具体计算如下:

非对角元素:

Hij=ViVj(GijsinθijBijsinθij)H_{ij} = -V_i V_j \left( G_{ij} \sin{\theta_{ij}} - B_{ij} \sin{\theta_{ij}} \right)
Nij=ViVj(Gijcosθij+Bijsinθij)N_{ij} = -V_i V_j \left( G_{ij} \cos{\theta_{ij}} + B_{ij} \sin{\theta_{ij}} \right)
Jij=ViVj(Gijcosθij+Bijsinθij)J_{ij} = V_i V_j \left( G_{ij} \cos{\theta_{ij}} + B_{ij} \sin{\theta_{ij}} \right)
Lij=ViVj(GijsinθijBijcosθij)L_{ij} = -V_i V_j \left( G_{ij} \sin{\theta_{ij}} - B_{ij} \cos{\theta_{ij}} \right)

对角元素:

Hii=Qi+BiiVi2H_{ii} = Q_i + B_{ii} V_i^2
Nii=PiGiiVi2N_{ii} = -P_i - G_{ii} V_i^2
Jii=Pi+GiiVi2J_{ii} = -P_i + G_{ii} V_i^2
Lii=Qi+BiiVi2L_{ii} = -Q_i + B_{ii} V_i^2

牛顿-拉夫逊法迭代计算:

在牛顿-拉夫逊法中,通过不断迭代计算,直到所有节点的修正量满足收敛条件。

修正方程为:

[ΔPΔQ]=[HNJL][ΔθΔV1ΔV]\begin{bmatrix} \Delta P \\ \Delta Q \end{bmatrix} = \begin{bmatrix} H & N \\ J & L \end{bmatrix} \begin{bmatrix} \Delta \theta \\ \Delta V^{-1} \Delta V \end{bmatrix}

通过解得修正量 Δθ\Delta \thetaΔV\Delta V,更新节点电压:

[θ(k+1)V(k+1)]=[θ(k)V(k)]+[Δθ(k+1)ΔV(k+1)]\begin{bmatrix} \theta^{(k+1)} \\ V^{(k+1)} \end{bmatrix} = \begin{bmatrix} \theta^{(k)} \\ V^{(k)} \end{bmatrix} + \begin{bmatrix} \Delta \theta^{(k+1)} \\ \Delta V^{(k+1)} \end{bmatrix}

反复迭代,直到满足收敛条件:ΔV<ε\Delta V < \varepsilonΔθ<n\Delta \theta < n,其中 ε\varepsilon 是允许的误差,nn 是最大迭代次数。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!