加入了三相潮流程序。

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-11-03 17:11:22 +08:00
parent fbffecb341
commit 4a6fa42f5b
6 changed files with 231 additions and 0 deletions

25
Jacobi.m Normal file
View File

@ -0,0 +1,25 @@
function [jaco]=Jacobi(Balance,busNum,QGi,Volt,YdotSinVolt,YdotCosVolt,diag_Volt_YdotSin,diag_Volt_YdotCos)
diag_YdotSinVolt_=diag(YdotSinVolt);
diag_YdotCosVolt_=diag(YdotCosVolt);
dPdTyta=diag_Volt_YdotSin*diag(Volt)-diag_YdotSinVolt_*diag(Volt); %
dQdTyta=-diag_Volt_YdotCos*diag(Volt)+diag_YdotCosVolt_*diag(Volt);%dQ/dThyta
dPdV=diag_YdotCosVolt_+diag_Volt_YdotCos;%dP/dV
dQdV=diag_YdotSinVolt_+diag_Volt_YdotSin;%dQ/dV
%%
dPdTyta(Balance,:)=0;
dPdTyta(:,Balance)=0;
dPdTyta=dPdTyta+sparse(Balance,Balance,ones(length(Balance),1),busNum,busNum);
dQdTyta(:,Balance)=0;
dPdV(Balance,:)=0;
%% PV
dQdV(QGi,:)=0;
dQdV(:,QGi)=0;
dQdV=dQdV+sparse(QGi,QGi,ones(length(QGi),1),busNum,busNum);
dQdTyta(QGi,:)=0;
dPdV(:,QGi)=0;
% jaco=[
% dPdV,dPdTyta;
% dQdV,dQdTyta;
% ];
jaco=cat(1,cat(2,dPdV,dPdTyta),cat(2,dQdV,dQdTyta));
end

5
Modify.m Normal file
View File

@ -0,0 +1,5 @@
function [Volt, Vangle]=Modify(Volt,Vangle,dV,dVangle,optimalu)
%Volt=Volt+Volt.*dV;
Volt=Volt+optimalu*dV;
Vangle=Vangle+optimalu*dVangle;
end

142
OPF.m
View File

@ -5,6 +5,148 @@ lineZ=readLineZ('feeder13\lineParameter.txt');
[ fsY0, fsY1, fsY2,phaseASpotLoadP,phaseBSpotLoadP,phaseCSpotLoadP ...
phaseASpotLoadQ,phaseBSpotLoadQ,phaseCSpotLoadQ,setIJ,nodeNum,Balance,phaseABCY ...
cap]=dataRead(lineZ,'feeder13\data1.txt');
%% begin
a=exp(1j*2*pi/3);
Tp2f=1/3*[1 1 1;
1 a a^2;
1 a^2 a];
Tp2f=sparse(Tp2f);
Tf2p=inv(Tp2f);
fsY1amp=abs(fsY1);
[r,c,fsY1ang]=find(fsY1);
fsY1ang=angle(fsY1ang);
Pabc=phaseASpotLoadP+phaseBSpotLoadP+phaseCSpotLoadP;
Qabc=phaseASpotLoadQ+phaseBSpotLoadQ+phaseCSpotLoadQ;
busNum=length(phaseASpotLoadP);
%
Vmf1=sparse(ones(busNum,1));
Vaf1=sparse(zeros(busNum,1));
%
PQi=nodeNum;
PG=sparse(busNum,1);
QG=sparse(busNum,1);
QGi=[Balance];
PD=Pabc/3;
QD=Qabc/3;
Loadi=find(PD~=0);
maxD=100000;%
EPS=1e-5;
k=0;
kmax=20;
fsY11=fsY1;
fsY00=fsY0;
fsY22=fsY2;
Vf2=sparse(busNum,1);
If2=sparse(busNum,1);
Vf0=sparse(busNum,1);
If0=sparse(busNum,1);
%
%01
fsY2(Balance,:)=0;
fsY2(:,Balance)=0;
fsY2=fsY2+sparse(Balance,Balance,ones(length(Balance),1),busNum,busNum);
%01
fsY0(Balance,:)=0;
fsY0(:,Balance)=0;
fsY0=fsY0+sparse(Balance,Balance,ones(length(Balance),1),busNum,busNum);
%%LU
[fsY0L,fsY0U,fsY0P,fsY0Q,fsY0R]=lu(fsY0);
[fsY2L,fsY2U,fsY2P,fsY2Q,fsY2R]=lu(fsY2);
%
tic
VoltpA=sparse(ones(busNum,1));
VoltpB=sparse(ones(busNum,1)).*exp(1j*-120/180*pi);
VoltpC=sparse(ones(busNum,1)).*exp(1j*+120/180*pi);
while(k<=kmax && maxD> EPS)
k=k+1;
%
SA=VoltpA.*conj(VoltpA.*sparse(cap.capNode,1,1j*cap.capB(:,1),busNum,1));
SB=VoltpB.*conj(VoltpA.*sparse(cap.capNode,1,1j*cap.capB(:,2),busNum,1));
SC=VoltpC.*conj(VoltpA.*sparse(cap.capNode,1,1j*cap.capB(:,3),busNum,1));
%
% SA=0;
% SB=0;
% SC=0;
iterPD=PD+real(SA+SB+SC)/3;
iterQD=QD+imag(SA+SB+SC)/3;
iterPhaseASpotLoadP=phaseASpotLoadP+real(SA);
iterPhaseBSpotLoadP=phaseBSpotLoadP+real(SB);
iterPhaseCSpotLoadP=phaseCSpotLoadP+real(SC);
iterPhaseASpotLoadQ=phaseASpotLoadQ+imag(SA);
iterPhaseBSpotLoadQ=phaseBSpotLoadQ+imag(SB);
iterPhaseCSpotLoadQ=phaseCSpotLoadQ+imag(SC);
% %
% CurpA=conj((iterPhaseASpotLoadP+1j*iterPhaseASpotLoadQ)./VoltpA);
% CurpB=conj((iterPhaseBSpotLoadP+1j*iterPhaseBSpotLoadQ)./VoltpB);
% CurpC=conj((iterPhaseCSpotLoadP+1j*iterPhaseCSpotLoadQ)./VoltpC);
% %
% f012=Tp2f*conj([CurpA';CurpB';CurpC']);
% %
% If0=conj(f012(1,:)');
% If1=conj(f012(2,:)');
% If2=conj(f012(3,:)');
% %
% fsY11*V1;
% %
% mIf0=If0;
% mIf1=If1;
% mIf1(3)=-mIf1(2);
% mIf2=If2;
% %
% fsY11=fsY11+sparse(Balance,Balance,ones(length(Balance),1),busNum,bus
% Num);%01
%%
[dP, dQ, YdotSinVolt, YdotCosVolt, diag_Volt_YdotSin, diag_Volt_YdotCos]=Unbalance(Balance,busNum, ...
PQi,PG,QG,QGi,iterPD,iterQD,Vmf1,Vaf1,fsY1amp,fsY1ang,r,c,Vf2,If2,Vf0,If0);%
maxD=max(abs([dP;dQ;]));
jaco=Jacobi(Balance,busNum,QGi,Vmf1,YdotSinVolt,YdotCosVolt,diag_Volt_YdotSin,diag_Volt_YdotCos);%
[dV, dVangle]=Solv(busNum,jaco,dP,dQ);%
[Vmf1, Vaf1]=Modify(Vmf1,Vaf1,dV,dVangle,1);
fprintf(' %d %f\n',k,full(maxD));
%
VoltpABC=Tp2f\conj([ Vf0'; (Vmf1.*exp(1j*Vaf1))'; Vf2']);%Tp2f\ Tf2p*
VoltpA=conj(VoltpABC(1,:)');
CurpA=-conj((iterPhaseASpotLoadP+1j*iterPhaseASpotLoadQ)./VoltpA);
VoltpB=conj(VoltpABC(2,:)');
CurpB=-conj((iterPhaseBSpotLoadP+1j*iterPhaseBSpotLoadQ)./VoltpB);
VoltpC=conj(VoltpABC(3,:)');
CurpC=-conj((iterPhaseCSpotLoadP+1j*iterPhaseCSpotLoadQ)./VoltpC);
f012=Tp2f*conj([CurpA';CurpB';CurpC']);
If0=conj(f012(1,:)');
If1=conj(f012(2,:)');
If2=conj(f012(3,:)');
If0(Balance)=0;
If2(Balance)=0;
%Vf0=fsY0\If0;
Vf0=fsY0Q*(fsY0U\(fsY0L\(fsY0P*(fsY0R\If0))));
%Vf2=fsY2\If2;
Vf2=fsY2Q*(fsY2U\(fsY2L\(fsY2P*(fsY2R\If2))));
fprintf('%f\n',toc);
%
end
FortiscueToc=toc;
fprintf('Fortiscue %f\n',FortiscueToc);
Vf1=Vmf1.*exp(1j*Vaf1);
(Vf0.*conj(fsY00*Vf0)+Vf1.*conj(fsY11*Vf1)+Vf2.*conj(fsY22*Vf2))*3;%
conj(Tf2p*[If0(2);If1(2);If2(2)]).*(Tf2p*[Vf0(2);Vf1(2);Vf2(2)]);
IpABC=Tf2p*conj([If0';If1';If2']);
%
VoltpABC=Tf2p*conj([ Vf0'; Vf1'; Vf2']);
disp([' A B C'])
full(abs(VoltpABC'))
fprintf('\n');
disp([setIJ,nodeNum ])
%%
ub=checkSSatisfied(Balance,phaseABCY,VoltpABC, ...
phaseASpotLoadP,phaseBSpotLoadP,phaseCSpotLoadP, ...
phaseASpotLoadQ,phaseBSpotLoadQ,phaseCSpotLoadQ );
fprintf('%f\n\n',full(max(abs(ub))))
%% end
busNum=length(nodeNum);
Busnum=busNum;
PQi=setxor(nodeNum,Balance);

16
Solv.m Normal file
View File

@ -0,0 +1,16 @@
function [dV, dVangle]=Solv(busNum,jaco,dP,dQ)
%y=klu (jaco, '\', full(-[dP;dQ]));
y=jaco\(-[dP;dQ]);
% [L,U] = luinc(jaco,1e-3); %luinc(A,'0')ILU
% tol=1e-5; %
% restart=30; % 30-50
% maxit=100; %
% [x,flag]=gmres(jaco,-[dP;dQ],restart,tol,maxit);
% y=sparse(x);
y=sparse(y);
dV=y(1:busNum);
dVangle=y(busNum+1:end);
end

18
Unbalance.m Normal file
View File

@ -0,0 +1,18 @@
function [dP, dQ, YdotSinVmf1, YdotCosVmf1, diag_Vmf1_YdotSin, diag_Vmf1_YdotCos]=Unbalance(Balance,busNum, ...
PQi,PG,QG,QGi,PD,QD,Vmf1,Vaf1,Y,Yangle,r,c,Vf2,If2,Vf0,If0)
t1=sparse(r,c,Vaf1(r)-Vaf1(c) -Yangle,busNum,busNum) ;
YdotSin=Y.* ( spfun(@sin,t1) );
YdotCos=Y.* ( spfun (@cos, t1 ) );
orderedPDPG=sparse(PQi,1,PD-PG,busNum,1); %
orderedQDQG=sparse(PQi,1,QD-QG,busNum,1); %
diag_Vmf1_YdotCos=diag(Vmf1)*YdotCos;
diag_Vmf1_YdotSin=diag(Vmf1)*YdotSin;
YdotCosVmf1=YdotCos*Vmf1;
YdotSinVmf1=YdotSin*Vmf1;
diag_Vmf1_YdotCosVmf1=diag_Vmf1_YdotCos*Vmf1;
diag_Vmf1_YdotSinVmf1=diag_Vmf1_YdotSin*Vmf1;
dP=diag_Vmf1_YdotCosVmf1+orderedPDPG+real(Vf2.*conj(If2)+Vf0.*conj(If0));
dQ=diag_Vmf1_YdotSinVmf1+orderedQDQG+imag(Vf2.*conj(If2)+Vf0.*conj(If0));
dP(Balance)=0;
dQ(QGi)=0;
end

25
checkSSatisfied.m Normal file
View File

@ -0,0 +1,25 @@
function [ output_args ] = checkSSatisfied(Balance,phaseABCY,VoltpABC,phaseASpotLoadP,phaseBSpotLoadP,phaseCSpotLoadP,phaseASpotLoadQ,phaseBSpotLoadQ,phaseCSpotLoadQ )
%%Fortiscue
busNum=size(phaseABCY,1)/3;
VoltpA=VoltpABC(1,:);
VoltpB=VoltpABC(2,:);
VoltpC=VoltpABC(3,:);
Vp3=sparse(busNum*3,1);
Vp3(1:3:end)=VoltpA;
Vp3(2:3:end)=VoltpB;
Vp3(3:3:end)=VoltpC;
Ip3=phaseABCY*Vp3;
Sp3=Vp3.*conj(Ip3);
%VoltpABC.*conj(IpABC);
pLoadABC=sparse(length(phaseASpotLoadP)*3,1);
pLoadABC(1:3:end)=phaseASpotLoadP+1j*phaseASpotLoadQ;
pLoadABC(2:3:end)=phaseBSpotLoadP+1j*phaseBSpotLoadQ;
pLoadABC(3:3:end)=phaseCSpotLoadP+1j*phaseCSpotLoadQ;
ck=Sp3+pLoadABC;
ck(3*(Balance-1)+1:3*(Balance-1)+3)=0;
if any(abs(ck)>1e-5)
fprintf('\n');
end
output_args=ck;
end