diff --git a/FormG.m b/FormG.m index 4f8b4ea..82d9579 100644 --- a/FormG.m +++ b/FormG.m @@ -1,9 +1,10 @@ -function Mat_G=FormG(Volt,PVi,PGi,PG,QG,PD,Loadi) +function Mat_G=FormG(Volt,PVi,PGi,PG,QG,PD,QD,Loadi) Mat_G=[ PG(PGi); QG(PVi); sparse(PD(Loadi)); + sparse(QD(Loadi)); Volt'; ]; end \ No newline at end of file diff --git a/FormLw.m b/FormLw.m index b9f3e81..98b67e5 100644 --- a/FormLw.m +++ b/FormLw.m @@ -1,4 +1,4 @@ -function Lw=FormLw(Mat_G,Init_U,GenU,Busnum,PVQU,PD0,Loadi,KK) +function Lw=FormLw(Mat_G,Init_U,GenU,Busnum,PVQU,PD0,QD0,Loadi,KK) KK=999; PU=GenU(:,2);%发电机有功上界 QU=PVQU(:,1);%发电机无功上界 @@ -9,7 +9,11 @@ PDU(PDU>0)=1.200*PDU(PDU>0); PDU(PDU<0)=0.800*PDU(PDU<0); PDU(PDU==0)=0.400; %PDU=10*ones(length(Loadi),1); -t1=([PU',QU',PDU',VoltU])'; +QDU=QD0(Loadi); +QDU(QDU>0)=1.200*QDU(QDU>0); +QDU(QDU<0)=0.800*QDU(QDU<0); +QDU(QDU==0)=0.400; +t1=([PU',QU',PDU',QDU',VoltU])'; t2=Mat_G+Init_U'-t1; Lw=t2; diff --git a/FormLz.m b/FormLz.m index 255ef59..d9f0f1b 100644 --- a/FormLz.m +++ b/FormLz.m @@ -1,4 +1,4 @@ -function Lz=FormLz(Mat_G,Init_L,GenL,Busnum,PVQL,PD0,Loadi,KK) +function Lz=FormLz(Mat_G,Init_L,GenL,Busnum,PVQL,PD0,QD0,Loadi,KK) KK=999; PL=GenL(:,2);%发电机有功下界 QL=PVQL(:,1);%发电机无功下界 @@ -9,7 +9,11 @@ PDL(PDL>0)=0.800*PDL(PDL>0); PDL(PDL<0)=1.200*PDL(PDL<0); PDL(PDL==0)=-0.400; %PDL=-10*ones(length(Loadi),1); -t1=([PL',QL',PDL',VoltL])'; +QDL=QD0(Loadi); +QDL(QDL>0)=0.800*QDL(QDL>0); +QDL(QDL<0)=1.200*QDL(QDL<0); +QDL(QDL==0)=-0.400; +t1=([PL',QL',PDL',QDL',VoltL])'; t2=Mat_G-Init_L'-t1; Lz=t2; diff --git a/OPF.m b/OPF.m index b5a7bf7..20cd9c6 100644 --- a/OPF.m +++ b/OPF.m @@ -19,7 +19,7 @@ PGBal=diag(Volt)*Y.*cos(AngleIJ)*Volt'; %% 初值-即测量值 PG0=PG; PD0=PD; - +QD0=QD; PDReal=PD;%真值 %PD0(12)=PD0(12)+0.001; %% @@ -62,11 +62,11 @@ while(abs(Gap)>Precision) %% 形成方程矩阵 Luu=Init_U'.*Init_W'+Init_u*ones(RestraintCount,1); Lul=Init_L'.*Init_Z'-Init_u*ones(RestraintCount,1); - Mat_G=FormG(Volt,PVi,PGi,PG,QG,PD,Loadi); + Mat_G=FormG(Volt,PVi,PGi,PG,QG,PD,QD,Loadi); Mat_H=FormH(Busnum,Volt,PG,PD,QG,QD,Y,UAngel,r,c,Angle,QD_NON_ZERO,QD_NON_ZERO_IND); Ly=Mat_H; - Lz=FormLz(Mat_G,Init_L,GenL,Busnum,PVQL,PD0,Loadi,KK); - Lw=FormLw(Mat_G,Init_U,GenU,Busnum,PVQU,PD0,Loadi,KK); + Lz=FormLz(Mat_G,Init_L,GenL,Busnum,PVQL,PD0,QD0,Loadi,KK); + Lw=FormLw(Mat_G,Init_U,GenU,Busnum,PVQU,PD0,QD0,Loadi,KK); Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W); YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx); %% 开始解方程 diff --git a/OPF_Init.m b/OPF_Init.m index b8a966f..154586a 100644 --- a/OPF_Init.m +++ b/OPF_Init.m @@ -1,7 +1,7 @@ function [Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wG,wD,PD,PD0,randPDind,Loadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD,PD) Loadi=find(QD~=0 | PD~=0); %Loadi=[1:Busnum]'; -RestraintCount=size(PVi,1)+size(PGi,1)+size(Loadi,1)+Busnum*1; %约束条件数 +RestraintCount=size(PVi,1)+size(PGi,1)+size(Loadi,1)*2+Busnum*1; %约束条件数 t_Bal_volt=Volt(Balance); Volt=sparse(1*ones(1,Busnum)); Volt(Balance)=t_Bal_volt; diff --git a/func_deltG.m b/func_deltG.m index 637130b..af51a8b 100644 --- a/func_deltG.m +++ b/func_deltG.m @@ -7,33 +7,38 @@ sizeLoadi=size(Loadi,1); dg1_dPg=sparse(1:sizePGi,1:sizePGi,ones(sizePGi,1),sizePGi,sizePGi); dg2_dPg=sparse(sizePGi,sizePVi); dg3_dPg=sparse(sizePGi,sizeLoadi); -dg4_dPg=sparse(sizePGi,Busnum); +dg4_dPg=sparse(sizePGi,sizeLoadi); +dg5_dPg=sparse(sizePGi,Busnum); %% dg1_dQr=sparse(sizePVi,sizePGi); dg2_dQr=sparse(1:sizePVi,1:sizePVi,ones(sizePVi,1),sizePVi,sizePVi); dg3_dQr=sparse(sizePVi,sizeLoadi); -dg4_dQr=sparse(sizePVi,Busnum); +dg4_dQr=sparse(sizePVi,sizeLoadi); +dg5_dQr=sparse(sizePVi,Busnum); %% dg1_dPD=sparse(size(Loadi,1),size(PGi,1)); dg2_dPD=sparse(size(Loadi,1),size(PVi,1)); dg3_dPD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1)); -dg4_dPD=sparse(size(Loadi,1),Busnum); +dg4_dPD=sparse(size(Loadi,1),sizeLoadi); +dg5_dPD=sparse(size(Loadi,1),Busnum); %% dg1_dQD=sparse(size(Loadi,1),size(PGi,1)); dg2_dQD=sparse(size(Loadi,1),size(PVi,1)); dg3_dQD=sparse(length(Loadi),length(Loadi)); -dg4_dQD=sparse(size(Loadi,1),Busnum); +dg4_dQD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1)); +dg5_dQD=sparse(size(Loadi,1),Busnum); %% dg1_dx=sparse(2*Busnum,sizePGi); dg2_dx=sparse(2*Busnum,sizePVi); dg3_dx=sparse(2*Busnum,sizeLoadi); -dg4_dx=[sparse(1:Busnum,1:Busnum,ones(Busnum,1),Busnum,Busnum); +dg4_dx=sparse(2*Busnum,sizeLoadi); +dg5_dx=[sparse(1:Busnum,1:Busnum,ones(Busnum,1),Busnum,Busnum); sparse(Busnum,Busnum); ]; %% -deltG=[dg1_dPg,dg2_dPg,dg3_dPg,dg4_dPg; - dg1_dQr,dg2_dQr,dg3_dQr,dg4_dQr; - dg1_dPD,dg2_dPD,dg3_dPD,dg4_dPD; - dg1_dQD,dg2_dQD,dg3_dQD,dg4_dQD; - dg1_dx,dg2_dx,dg3_dx,dg4_dx; +deltG=[dg1_dPg,dg2_dPg,dg3_dPg,dg4_dPg,dg5_dPg; + dg1_dQr,dg2_dQr,dg3_dQr,dg4_dQr,dg5_dQr; + dg1_dPD,dg2_dPD,dg3_dPD,dg4_dPD,dg5_dPD; + dg1_dQD,dg2_dQD,dg3_dQD,dg4_dQD,dg5_dQD; + dg1_dx,dg2_dx,dg3_dx,dg4_dx,dg5_dx; ]; \ No newline at end of file