依据辐射形网络潮流计算的方法,利用Matlab中.m文件的形式,编写计算程序,计算电力网络的潮流分布。
时间: 2023-12-30 16:05:15 浏览: 27
以下是一个简单的Matlab代码示例,用于计算辐射形网络潮流分布。请注意,这只是一个示例程序,需要根据实际情况进行修改和调整。
```matlab
% 输入电力系统数据
busdata = [1 1.05 0.0 0.0 0.0 0.0 0.0 0.0 0.0;
2 1.0 0.0 0.0 0.0 0.2 0.1 0.0 0.0;
3 1.0 0.0 0.0 0.0 0.9 0.3 0.0 0.0;
4 1.0 0.0 0.0 0.0 0.4 0.2 0.0 0.0;
5 1.0 0.0 0.0 0.0 0.3 0.15 0.0 0.0];
linedata = [1 2 0.1 0.2 0.04 0.0 0.0 0.0;
1 3 0.05 0.2 0.04 0.0 0.0 0.0;
2 4 0.05 0.25 0.05 0.0 0.0 0.0;
3 4 0.07 0.17 0.03 0.0 0.0 0.0;
3 5 0.08 0.3 0.03 0.0 0.0 0.0;
4 5 0.12 0.26 0.05 0.0 0.0 0.0];
% 构建节点导纳矩阵
nbus = max(busdata(:,1));
Ybus = zeros(nbus,nbus);
for k = 1:length(linedata)
from = linedata(k,1);
to = linedata(k,2);
r = linedata(k,3);
x = linedata(k,4);
b = linedata(k,5);
z = r + 1i*x;
y = 1/z;
Ybus(from,from) = Ybus(from,from) + y + 1i*b/2;
Ybus(to,to) = Ybus(to,to) + y + 1i*b/2;
Ybus(from,to) = Ybus(from,to) - y;
Ybus(to,from) = Ybus(to,from) - y;
end
% 计算节点注入功率
Pg = [0; 1.2; 0.9; 0.4; 0.3];
Qg = [0; 0.5; 0.3; 0.2; 0.15];
Pd = [0; 0.6; 0.4; 0.3; 0.25];
Qd = [0; 0.3; 0.2; 0.15; 0.12];
Sg = Pg + 1i*Qg;
Sd = Pd + 1i*Qd;
S = Sg - Sd;
% 构建潮流计算方程
V = ones(nbus,1);
iter = 0;
maxiter = 100;
tol = 1e-6;
while iter < maxiter
iter = iter + 1;
P = real(S);
Q = imag(S);
for i = 2:nbus
sum1 = 0;
sum2 = 0;
for j = 1:nbus
if i ~= j
sum1 = sum1 + abs(V(j))*Ybus(i,j)*cos(angle(V(i))-angle(V(j))-angle(Ybus(i,j)));
sum2 = sum2 + abs(V(j))*Ybus(i,j)*sin(angle(V(i))-angle(V(j))-angle(Ybus(i,j)));
end
end
Pi = V(i)^2*real(Ybus(i,i)) - V(i)*sum1 - P(i);
Qi = V(i)^2*imag(Ybus(i,i)) - V(i)*sum2 - Q(i);
f(i-1) = Pi;
f(nbus+i-1) = Qi;
end
f(2*nbus-2) = sum(P) - sum(Pg);
f(2*nbus-1) = sum(Q) - sum(Qg);
% 判断是否收敛
if max(abs(f)) < tol
break
end
% 使用牛顿-拉夫逊迭代法求解潮流方程组
J = zeros(2*nbus-2,2*nbus-2);
for i = 2:nbus
sum1 = 0;
sum2 = 0;
for j = 1:nbus
if i ~= j
Yij = Ybus(i,j);
Gij = real(Yij);
Bij = imag(Yij);
Vij = V(i);
Vj = V(j);
tij = angle(Vi) - angle(Vj);
sum1 = sum1 + Vj*(Gij*cos(tij) + Bij*sin(tij));
sum2 = sum2 + Vj*(Gij*sin(tij) - Bij*cos(tij));
if j ~= 1
k = j-1;
Jij = [Vij*abs(Vj)*Gij*sin(tij), Vij*abs(Vj)*Bij + Vij^2*Gij*cos(tij)];
J(i-1,k) = Jij(1);
J(i-1,nbus+k) = Jij(2);
J(nbus+i-1,k) = Jij(2);
J(nbus+i-1,nbus+k) = -Jij(1);
end
end
end
Ji = [2*V(i)*real(Ybus(i,i)) + sum1, -V(i)*sum2 - Q(i);
V(i)*sum1 - P(i), 2*V(i)*imag(Ybus(i,i)) + sum2 - Q(i)];
J(i-1,i-1) = Ji(1,1);
J(i-1,nbus+i-1) = Ji(1,2);
J(nbus+i-1,i-1) = Ji(2,1);
J(nbus+i-1,nbus+i-1) = Ji(2,2);
end
J(2*nbus-2,2*nbus-2) = 0;
J(2*nbus-1,2*nbus-1) = 0;
J(2*nbus-2,2) = 1;
J(2*nbus-1,nbus+2) = 1;
delta = -J\f';
deltaV = delta(1:nbus-1) + 1i*delta(nbus:2*nbus-3);
deltaPg = delta(2*nbus-2);
deltaQg = delta(2*nbus-1);
V(2:nbus) = V(2:nbus) + deltaV;
Pg = Pg + deltaPg;
Qg = Qg + deltaQg;
Sg = Pg + 1i*Qg;
S = Sg - Sd;
end
% 输出结果
disp(['潮流计算迭代次数:' num2str(iter)]);
disp('节点电压:');
disp(abs(V));
disp('节点相角:');
disp(angle(V)*180/pi);
disp('节点注入功率:');
disp(Sd);
disp('节点发电功率:');
disp(Pg);
disp('节点负荷功率:');
disp(Pd);
disp('支路潮流:');
for k = 1:length(linedata)
from = linedata(k,1);
to = linedata(k,2);
r = linedata(k,3);
x = linedata(k,4);
b = linedata(k,5);
z = r + 1i*x;
y = 1/z;
I = (V(from) - V(to))/z;
S = (V(from)*conj(I))/1000;
disp(['支路 ' num2str(from) '-' num2str(to) ' 潮流:' num2str(abs(S)) ' MW']);
end
```