修复一个bug。潮流形成导纳矩阵的时候忘记加节点电导(G)了,所以老是不对。现在修复了。

Signed-off-by: facat <dugg@21cn.com>
This commit is contained in:
facat 2012-12-25 12:03:27 +08:00
parent 28cb11581a
commit 4d982b92b2
8 changed files with 59 additions and 18 deletions

View File

@ -8,6 +8,6 @@ function [P0,Q0,U,Uangle] = Initial(PG,PD,PQstandard,Pointpoweri,QG,QD,Busnum)
P0 = sparse(1, Pointpoweri,(PG-PD)/PQstandard); % P0 = sparse(1, Pointpoweri,(PG-PD)/PQstandard); %
Q0 = sparse(1, Pointpoweri,(QG-QD)/PQstandard); % Q0 = sparse(1, Pointpoweri,(QG-QD)/PQstandard); %
%% %%
U = ones(1,Busnum); % U = 1*ones(1,Busnum); %
Uangle = zeros(1,Busnum); % Uangle = zeros(1,Busnum); %
end end

9
OPF.m
View File

@ -2,7 +2,7 @@ tic
clc clc
clear clear
[kmax,Precision,UAngel,Volt,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB,Linei,Linej,Transfori,Transforj,GenU,GenL,GenC,PG,QG,PD,QD,CenterA,PGi,PVQU,PVQL,Liner,Linex,Lineb,Transforr,Transforx,Transfork0]= ... [kmax,Precision,UAngel,Volt,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB,Linei,Linej,Transfori,Transforj,GenU,GenL,GenC,PG,QG,PD,QD,CenterA,PGi,PVQU,PVQL,Liner,Linex,Lineb,Transforr,Transforx,Transfork0]= ...
pf('ieee30.dat'); pf('c:/newFIle.txt');
%pf('D:\Project\\\\\9223-1_0.5_120%.txt'); %pf('D:\Project\\\\\9223-1_0.5_120%.txt');
%pf('D:\Project\\\919.txt'); %pf('D:\Project\\\919.txt');
%pf('c:/file31.txt'); %pf('c:/file31.txt');
@ -96,14 +96,15 @@ DrawGap(plotGap);
%% PD %% PD
% absPDLoad=abs( (PD(Loadi)-PD0(Loadi))./PD0(Loadi) ); % absPDLoad=abs( (PD(Loadi)-PD0(Loadi))./PD0(Loadi) );
absPDLoad=abs( (PD(Loadi)-PDReal(Loadi))./PDReal(Loadi) ); absPDLoad=abs( (PD(Loadi)-PDReal(Loadi))./PDReal(Loadi) );
maxPDError=max(absPDLoad) maxPDError=max(absPDLoad(absPDLoad<10))
absQDLoad=abs( (QD(Loadi)-QDReal(Loadi))./QDReal(Loadi) ); absQDLoad=abs( (QD(Loadi)-QDReal(Loadi))./QDReal(Loadi) );
maxQDError=max(absQDLoad) maxQDError=max(absQDLoad(absQDLoad<10))
disp('index'); disp('index');
Loadi(absPDLoad==maxPDError); %Loadi(absPDLoad==maxPDError);
%% 线 %% 线
totalLoss=(sum(PG)-sum(PD(Loadi)))*100; totalLoss=(sum(PG)-sum(PD(Loadi)))*100;
fprintf('%f(MW )\n',full(totalLoss)); fprintf('%f(MW )\n',full(totalLoss));
fprintf('线 %f\n',full(totalLoss/sum(PG)));
%% 线 %% 线
%Lineloss(Linei,Linej,Liner,Linex,Lineb,Transfori,Transforj,Transforr,Transforx,Transfork0,Volt,UAngel); %Lineloss(Linei,Linej,Liner,Linex,Lineb,Transfori,Transforj,Transforr,Transforx,Transfork0,Volt,UAngel);
toc toc

View File

@ -1,5 +1,5 @@
function [GB,Y,r,c,Angle] = admmatrix(Busnum,Linei,Linej,Liner,Linex,Lineb,Transfori... function [GB,Y,r,c,Angle] = admmatrix(Busnum,Linei,Linej,Liner,Linex,Lineb,Transfori...
,Transforj,Transforr,Transforx,Transfork0,Branchi,Branchb) ,Transforj,Transforr,Transforx,Transfork0,Branchi,Branchg,Branchb)
%************************************************************************** %**************************************************************************
% : Y % : Y
% %
@ -22,6 +22,7 @@ end
%% %%
if Branchi>0 % if Branchi>0 %
B = B+sparse(Branchi,Branchi,Branchb,Busnum,Busnum); B = B+sparse(Branchi,Branchi,Branchb,Busnum,Busnum);
G = G+sparse(Branchi,Branchi,Branchg,Busnum,Busnum);
end end
%% %%
GB = G+B.*1i; % GB = G+B.*1i; %

40
jacobian.asv Normal file
View File

@ -0,0 +1,40 @@
function [Jacob,PQ,U,Uangle]=jacobian(Busnum,Balance,PVi,PVu,U,Uangle,Y,Angle,P0,Q0,r,c)
%**************************************************************************
% 程序功能 : 子函数——形成雅可比矩阵Jacobian
% 编 者:
% 编制时间2010.12
%**************************************************************************
%% 分别求雅克比矩阵的子阵H,L,N,J及有功无功分量P,Q
AngleIJ = Uangle(r) - Uangle(c)- Angle';
U(PVi) = PVu;
U(Balance)=;
temp1= -sparse(1:Busnum,1:Busnum,U,Busnum,Busnum)*Y*sparse(1:Busnum,1:Busnum,U,Busnum,Busnum); % 计算雅克比矩阵可利用的中间变量
temp2 = sum(temp1.*sparse(r,c,sin(AngleIJ)),2);
temp3 = sum(temp1.*sparse(r,c,cos(AngleIJ)),2);
temp4=sparse(1:Busnum,1:Busnum,temp2,Busnum,Busnum);
temp5=sparse(1:Busnum,1:Busnum,temp3,Busnum,Busnum);
H = temp1.*sparse(r,c,sin(AngleIJ))-temp4;
L = temp1.*sparse(r,c,sin(AngleIJ))+temp4;
N = temp1.*sparse(r,c,cos(AngleIJ))+temp5;
J = -temp1.*sparse(r,c,cos(AngleIJ))+temp5;
Q = Q0+temp2'; %求有功分量P
P = P0+temp3'; %求无功分量Q
%% 处理平衡节点和pv节点
H(:,Balance) = 0;
H(Balance,:) = 0;
%H(Balance,Balance) = 100; % 平衡节点对应的对角元素置一个有限数
H=H+sparse(Balance,Balance,ones(1,length(Balance)),Busnum,Busnum);
L(:,PVi) = 0;
L(PVi,:) = 0;
L = L+sparse(PVi,PVi,ones(1,length(PVi)),Busnum,Busnum); % PV节点对应的对角元素置为1
J(:,Balance) = 0;
J(PVi,:) = 0;
N(:,PVi) = 0;
N(Balance,:) = 0;
Q(PVi) = 0; % 将pv节点的无功不平衡分量置零
P(Balance) = 0; % 平衡节点的有功功率不平衡分量置零
%% 合成PQ和雅可比矩阵
PQ = cat(2,P,Q); % 形成功率不平衡分量列向量
Jacob = cat(1,cat(2,H,N),cat(2,J,L)); % 形成Jacobian矩阵
end

View File

@ -7,6 +7,7 @@ function [Jacob,PQ,U,Uangle]=jacobian(Busnum,Balance,PVi,PVu,U,Uangle,Y,Angle,P0
%% H,L,N,JP,Q %% H,L,N,JP,Q
AngleIJ = Uangle(r) - Uangle(c)- Angle'; AngleIJ = Uangle(r) - Uangle(c)- Angle';
U(PVi) = PVu; U(PVi) = PVu;
U(Balance)=1;
temp1= -sparse(1:Busnum,1:Busnum,U,Busnum,Busnum)*Y*sparse(1:Busnum,1:Busnum,U,Busnum,Busnum); % temp1= -sparse(1:Busnum,1:Busnum,U,Busnum,Busnum)*Y*sparse(1:Busnum,1:Busnum,U,Busnum,Busnum); %
temp2 = sum(temp1.*sparse(r,c,sin(AngleIJ)),2); temp2 = sum(temp1.*sparse(r,c,sin(AngleIJ)),2);
temp3 = sum(temp1.*sparse(r,c,cos(AngleIJ)),2); temp3 = sum(temp1.*sparse(r,c,cos(AngleIJ)),2);

View File

@ -51,10 +51,10 @@ QG=QG/Base;
PD=PD/Base; PD=PD/Base;
QD=QD/Base; QD=QD/Base;
%% %%
PD=sparse(PD); PD=sparse(PD)/Base;
QD=sparse(QD); QD=sparse(QD)/Base;
PG=sparse(PG); PG=sparse(PG)/Base;
QG=sparse(QG); QG=sparse(QG)/Base;
%% pv %% pv
PVi = PV(:,1); % PV PVi = PV(:,1); % PV
PVu = PV(:,2); % PV PVu = PV(:,2); % PV

View File

@ -1,5 +1,5 @@
function [Busnum,Balance,PQstandard,Precision,Linei,Linej,Liner,Linex,Lineb,kmax,Transfori ,... function [Busnum,Balance,PQstandard,Precision,Linei,Linej,Liner,Linex,Lineb,kmax,Transfori ,...
Transforj,Transforr,Transforx,Transfork0,Branchi,Branchb,Pointpoweri,PG,QG,PD,QD,PVi,PVu,GenU,GenL,GenC,CenterA,PGi,PVQU,PVQL] = openfile2(FileName) Transforj,Transforr,Transforx,Transfork0,Branchi,Branchg,Branchb,Pointpoweri,PG,QG,PD,QD,PVi,PVu,GenU,GenL,GenC,CenterA,PGi,PVQU,PVQL] = openfile2(FileName)
%************************************************************************** %**************************************************************************
% : % :
% %
@ -34,6 +34,7 @@ Lineb = line(:,6); %
%% %%
Branchi = ground(:,2); % Branchi = ground(:,2); %
Branchb = ground(:,4); % Branchb = ground(:,4); %
Branchg = ground(:,3); %
%% %%
Transfori = tran(:,3); % i Transfori = tran(:,3); % i
Transforj= tran(:,4); % j Transforj= tran(:,4); % j
@ -54,6 +55,7 @@ QD=QD/Base;
%% %%
PD=sparse(PD); PD=sparse(PD);
QD=sparse(QD); QD=sparse(QD);
%QD=PD*sqrt(1-.85^2)/.85;
PG=sparse(PG); PG=sparse(PG);
QG=sparse(QG); QG=sparse(QG);
%% pv %% pv

10
pf.m
View File

@ -10,10 +10,10 @@ function [kmax,Precision,Uangle,U,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB,Li
tic; tic;
%% %%
[Busnum,Balance,PQstandard,Precision,Linei,Linej,Liner,Linex,Lineb,kmax,Transfori ,... [Busnum,Balance,PQstandard,Precision,Linei,Linej,Liner,Linex,Lineb,kmax,Transfori ,...
Transforj,Transforr,Transforx,Transfork0,Branchi,Branchb,Pointpoweri,PG,QG,PD,QD,PVi,PVu,GenU,GenL,GenC,CenterA,PGi,PVQU,PVQL]= openfile(FileName); Transforj,Transforr,Transforx,Transfork0,Branchi,Branchg,Branchb,Pointpoweri,PG,QG,PD,QD,PVi,PVu,GenU,GenL,GenC,CenterA,PGi,PVQU,PVQL]= openfile2(FileName);
%% %%
[GB,Y,r,c,Angle] = admmatrix(Busnum,Linei,Linej,Liner,Linex,Lineb,Transfori,Transforj,Transforr,... [GB,Y,r,c,Angle] = admmatrix(Busnum,Linei,Linej,Liner,Linex,Lineb,Transfori,Transforj,Transforr,...
Transforx,Transfork0,Branchi,Branchb); Transforx,Transfork0,Branchi,Branchg,Branchb);
[P0,Q0,U,Uangle] = Initial(PG,PD,PQstandard,Pointpoweri,QG,QD,Busnum); % [P0,Q0,U,Uangle] = Initial(PG,PD,PQstandard,Pointpoweri,QG,QD,Busnum); %
%disp('i '); %disp('i ');
%% %%
@ -26,13 +26,9 @@ for i = 0:kmax
if m > Precision % if m > Precision %
[Uangle,U] = solvefun(Busnum,Jacob,PQ,Uangle,U); % [Uangle,U] = solvefun(Busnum,Jacob,PQ,Uangle,U); %
else else
%disp(['',num2str(i),'']); disp(['',num2str(i),'']);
break % break %
end end
end end
toc; toc;
PG=PG/PQstandard;
QG=QG/PQstandard;
PD=PD/PQstandard;
QD=QD/PQstandard;
end end