MATLAB中使用牛顿-拉夫逊法进行电力系统潮流计算
一 设计要求
- 基于Matlab采用电力系统分析工具箱或自编程序计算系统潮流;
- 分别采用NR法和PQ分解法计算潮流,观察NR法计算潮流中雅可比矩阵的变化情况,分析两种方法计算潮流的优缺点;
- 分析系统潮流情况,包括电压幅值、相角,线路过载情况以及全网有功损耗情况。
- 对以下内容进行分析:
- 找出系统中有功损耗最大的一条线路,给出减小该线路损耗的措施,比较各种措施的特点,并仿真验证;
- 找出系统中电压最低的节点,给出调压措施,比较各种措施的特点,并仿真验证;
- 找出系统中流过有功功率最大的一条线路,给出减小该线路有功功率的措施,比较各种措施的特点,并仿真验证。
二 牛顿-拉夫逊法(Newton-Raphson, NR法)
牛顿-拉夫逊法是一种迭代优化算法,广泛用于求解非线性方程组。在电力系统中,牛顿-拉夫逊法被用来求解电力潮流计算中的非线性功率平衡方程。
牛顿-拉夫逊法的潮流计算原理:
-
功率平衡方程:潮流计算的核心问题是求解电力系统中各节点的电压幅值和相角,使得系统的功率平衡成立。潮流方程可以写成以下的形式:
对于每个节点 i:
其中:
- Pi和 Qi是节点 i的有功功率和无功功率。
- Vi和 θi 分别是节点 i 的电压幅值和相角。
- Gij 和 Bij是节点 i和节点 j之间的导纳矩阵的实部和虚部。
三 PQ分解法(常见为高斯-赛德尔法的变种)
PQ分解法是另一种潮流计算的简化方法,通常用于解决较为简单的电力系统。PQ分解法是基于节点的功率平衡方程,通过逐步迭代来求解电压幅值和相角。
PQ分解法的潮流计算原理:
-
功率平衡方程:如同牛顿-拉夫逊法,PQ分解法也是求解电力系统的功率平衡方程:
-
方法步骤:
- 选择初始值:选择一个合适的初始电压幅值和相角。
- 设置初始假设:通常可以假设负荷节点(PQ节点)的电压幅值为1,发电机节点(PV节点)则给定电压幅值。
- 逐步更新:通过高斯-赛德尔法(Gauss-Seidel Method)逐步迭代更新每个节点的电压幅值和相角。
- 迭代求解:通过逐步调整电压值,使功率误差趋近于零。每一轮更新时,需要通过已有电压值来计算新的功率值。
方法 | 牛顿-拉夫逊法 (NR法) | PQ分解法 |
---|---|---|
基本思想 | 通过迭代求解非线性方程组,使用雅可比矩阵进行求解。 | 通过逐步迭代调整电压值,使功率误差逐步减小。 |
计算复杂度 | 较高,涉及雅可比矩阵的计算和线性方程组的求解。 | 较低,实现简单,但收敛速度较慢。 |
收敛速度 | 较快,通常为二次收敛。 | 较慢,适用于小型系统,但大系统收敛可能较慢。 |
适用范围 | 适用于大规模复杂电力系统,精度较高。 | 适用于小型电力系统,较为简单的模型。 |
稳定性 | 较为稳定,能够处理复杂的网络。 | 在大规模系统中可能不够稳定,容易出现发散。 |
四 代码实现
在MATLAB中使用牛顿-拉夫逊法进行电力系统潮流计算时,通常采用极坐标形式的潮流方程。此方法主要包括功率平衡方程、雅可比矩阵的求解和电压幅值和相位的迭代更新。
假设我们有一个简单的电网模型,包含110kV线路,并且忽略了变压器支路和电纳效应。以下是一个基于MATLAB的电力系统潮流计算的基本框架:
基本步骤
- 建立节点编号和数据:定义系统的各个节点(包括发电机、负荷节点等)的电压幅值、相位角、功率等数据。
- 构建潮流方程:基于极坐标形式的功率方程来表示系统。
- 求解雅可比矩阵:牛顿-拉夫逊法需要求解雅可比矩阵。
- 迭代计算:根据牛顿-拉夫逊方法进行迭代,直到满足收敛条件。
MATLAB代码示例
% 基于牛顿-拉夫逊法的电力系统潮流计算
clc;
clear;
% 设定基本参数
n = 5; % 节点数
max_iter = 100; % 最大迭代次数
tol = 1e-6; % 收敛容忍度
% 节点的功率需求与发电能力 (以复数表示)
% S = P + jQ
S = [
0 + 0j; % 节点 1 (通常是发电机节点,不参与潮流计算)
-1 - 0.5j; % 节点 2 (负荷节点)
-1 - 0.3j; % 节点 3 (负荷节点)
0 + 0j; % 节点 4 (发电机节点)
-2 - 1j % 节点 5 (负荷节点)
];
% 初始电压幅值与相角 (假设发电机节点已知电压幅值和相角)
V = [1; 1; 1; 1; 1]; % 电压幅值 (全部为 1.0 pu)
theta = [0; 0; 0; 0; 0]; % 相角 (全部为 0)
% 电力系统的线路参数 (以邻接矩阵表示,假设线路阻抗为纯阻性,忽略电纳)
% 每一行为一个节点连接到其它节点的电导数据(1/阻抗)
Z = [
0 0.1 0.1 0 0;
0.1 0 0.1 0 0;
0.1 0.1 0 0.1 0;
0 0 0.1 0 0.2;
0 0 0 0.2 0
]; % 假设所有线路的阻抗为 0.1 pu,电压水平为 110 kV
% 牛顿-拉夫逊法迭代计算
for iter = 1:max_iter
% 计算节点功率
P = zeros(n, 1);
Q = zeros(n, 1);
for i = 1:n
for j = 1:n
% 计算每个节点的有功功率 P 和无功功率 Q
P(i) = P(i) + V(i) * V(j) * (real(Z(i,j)) * cos(theta(i) - theta(j)) + imag(Z(i,j)) * sin(theta(i) - theta(j)));
Q(i) = Q(i) + V(i) * V(j) * (real(Z(i,j)) * sin(theta(i) - theta(j)) - imag(Z(i,j)) * cos(theta(i) - theta(j)));
end
end
% 计算功率误差
P = real(S) - P;
Q = imag(S) - Q;
S = [P(2:end);Q(2:end)]; % 不包括第一个发电机节点
% 构建雅可比矩阵
J1 = zeros(n-1, n-1); % 有功功率误差对相角的偏导数
J2 = zeros(n-1, n-1); % 有功功率误差对电压幅值的偏导数
J3 = zeros(n-1, n-1); % 无功功率误差对相角的偏导数
J4 = zeros(n-1, n-1); % 无功功率误差对电压幅值的偏导数
for i = 2:n
for j = 2:n
% 计算雅可比矩阵元素
% 有功功率误差对相角的偏导数 (J1)
J1(i-1, j-1) = V(i) * V(j) * (real(Z(i,j)) * sin(theta(i) - theta(j)) - imag(Z(i,j)) * cos(theta(i) - theta(j)));
% 有功功率误差对电压幅值的偏导数 (J2)
J2(i-1, j-1) = V(j) * (real(Z(i,j)) * cos(theta(i) - theta(j)) + imag(Z(i,j)) * sin(theta(i) - theta(j)));
% 无功功率误差对相角的偏导数 (J3)
J3(i-1, j-1) = V(i) * V(j) * (real(Z(i,j)) * cos(theta(i) - theta(j)) + imag(Z(i,j)) * sin(theta(i) - theta(j)));
% 无功功率误差对电压幅值的偏导数 (J4)
J4(i-1, j-1) = V(j) * (real(Z(i,j)) * sin(theta(i) - theta(j)) - imag(Z(i,j)) * cos(theta(i) - theta(j)));
end
end
% 完整的雅可比矩阵
J = [J1, J2; J3, J4];
% 更新电压幅值与相角
V_theta = J \S; % 求解雅可比矩阵的线性方程
Theta =V_theta(1:n-1);
V =V_theta(n:end);
theta(2:end) = theta(2:end) +Theta; % 更新相角
V(2:end) = V(2:end) +V; % 更新电压幅值
% 判断收敛性
if max(absS)) < tol
fprintf('收敛于第 %d 次迭代\n', iter);
break;
end
end
% 输出最终的潮流结果
disp('最终电压幅值:');
disp(V);
disp('最终相角:');
disp(theta);
代码说明:
-
网络参数:
S
: 用复数表示各节点的负荷或发电功率。V
和theta
: 初始的电压幅值和相角(通常对于负荷节点可以假设电压幅值为1,发电机节点给定已知的电压幅值)。Z
: 阻抗矩阵,表示各个节点之间的阻抗(这里假设所有线路阻抗相同,仅为例子,实际应用中需根据线路参数填写)。
-
迭代计算:
- 使用牛顿-拉夫逊法迭代来求解电力系统的潮流方程。
- 通过计算节点的功率误差来更新节点的电压幅值和相角。
- 通过求解雅可比矩阵来获得更新量,直至误差小于给定容忍度。
-
收敛判断:
- 当潮流计算误差(
S
)的最大值小于设定的收敛阈值时,认为计算已收敛。
- 当潮流计算误差(
注意事项:
- 本例忽略了变压器、线路电纳等效应,适用于简单的电网模型。
S
、V
、theta
和Z
等参数需要根据具体的电网模型和实际情况进行调整。