diff --git a/FormLwstate1.m b/FormLwstate1.m index 4b67b67..2dbb78e 100644 --- a/FormLwstate1.m +++ b/FormLwstate1.m @@ -1,11 +1,14 @@ -function Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag) +function Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,rIf1) -Ir=real(I1measurement); +Ir=real(rIf1(Loadi)); pIr=find(Ir>0); nIr=find(Ir<0); -Ii=imag(I1measurement); +Ii=imag(rIf1(Loadi)); pIi=find(Ii>0); nIi=find(Ii<0); + +% Loadi=[1,4,5,6,8,10]; + % lower=-0.2*sparse(ones(length(Loadi)*2,1)); % upper=ones(length(Loadi)*2,1); % upper(pIr)=1.4*Ir(pIr); diff --git a/FormLzstate1.m b/FormLzstate1.m index 7e73df3..fac89fc 100644 --- a/FormLzstate1.m +++ b/FormLzstate1.m @@ -1,11 +1,13 @@ -function Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag) -Ir=real(I1measurement); +function Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag,rIf1) +Ir=real(rIf1(Loadi)); pIr=find(Ir>0); nIr=find(Ir<0); -Ii=imag(I1measurement); +Ii=imag(rIf1(Loadi)); pIi=find(Ii>0); nIi=find(Ii<0); +% Loadi=[1,4,5,6,8,10]; + lower=ones(length(Loadi)*2,1); % lower(pIr)=0.6*Ir(pIr); % lower(nIr)=1.4*Ir(nIr); diff --git a/IPMLoop.m b/IPMLoop.m index b33a757..5dd0e51 100644 --- a/IPMLoop.m +++ b/IPMLoop.m @@ -1,4 +1,4 @@ -function [ V1r,V1i,I1r,I1i,isConverged ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref,dI_F,flag ) +function [ V1r,V1i,I1r,I1i,isConverged ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref,dI_F,flag,rIf1 ) %把每个序的循环写在这个函数中。其实也就是内点法循环。 V1r=Vref*ones(busNum,1); V1i=0*ones(busNum,1); @@ -17,7 +17,7 @@ Init_L=1*sparse(ones(RestraintCount,1)); Init_U=1*sparse(ones(RestraintCount,1)); Init_Y=sparse(2*busNum,1);%等式约束乘子 Gap=(Init_L'*Init_Z-Init_U'*Init_W); -kmax=15; +kmax=20; while(abs(Gap)>0.00001) if KK>=kmax break; @@ -49,8 +49,8 @@ while(abs(Gap)>0.00001) Mat_G=FormGstate1(I1r,I1i); Mat_H=FormH(fsY1,Loadi,V1r,V1i,I1r,I1i,BalI1r,BalI1i,Balance); Ly=Mat_H; - Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag); - Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag); + Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag,rIf1); + Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,rIf1); Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W); YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx); %% 开始解方程 diff --git a/func_deltF.m b/func_deltF.m index bb58902..5def6d4 100644 --- a/func_deltF.m +++ b/func_deltF.m @@ -12,8 +12,8 @@ deltF=[ sparse(Loadi,1,2*( abs(V1measurement).^2- (V1r(Loadi).^2+ V1i(Loadi).^2) ).*(-2*V1r(Loadi))./wV1r./wV1r,busNum,1); sparse(Loadi,1,2*( abs(V1measurement).^2- (V1r(Loadi).^2+ V1i(Loadi).^2) ).*(-2*V1i(Loadi))./wV1i./wV1i,busNum,1); %-2*( [real(Imeasurement);imag(Imeasurement)]-[I1r;I1i]); - sparse(1:length(Loadi),1,-2*(real(I1measurement)-I1r(Loadi))./wI1r./wI1r,length(Loadi),1); - sparse(1:length(Loadi),1,-2*(imag(I1measurement)-I1i(Loadi))./wI1i./wI1i,length(Loadi),1); + sparse(1:length(Loadi),1,-2*(real(I1measurement)-I1r)./wI1r./wI1r,length(Loadi),1); + sparse(1:length(Loadi),1,-2*(imag(I1measurement)-I1i)./wI1i./wI1i,length(Loadi),1); ]; end \ No newline at end of file diff --git a/run.m b/run.m index 0d0775b..165c84c 100644 --- a/run.m +++ b/run.m @@ -123,6 +123,10 @@ 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']); +rVoltpABC=VoltpABC; +rVoltpA=VoltpA; +rVoltpB=VoltpB; +rVoltpC=VoltpC; disp([' A B C']) full(abs(VoltpABC')) fprintf('节点号对应\n'); @@ -324,9 +328,9 @@ wV0i=wV0i(Loadi); % dI_F=conj(dI_F)'; % dI_F=dI_F(Loadi,:); % 换一个方式来计算 -deltmCurpA=conj((mphaseASpotLoadP+1j*mphaseASpotLoadQ)./mVoltpA)*0.2; -deltmCurpB=conj((mphaseBSpotLoadP+1j*mphaseBSpotLoadQ)./mVoltpB)*0.2; -deltmCurpC=conj((mphaseCSpotLoadP+1j*mphaseCSpotLoadQ)./mVoltpC)*0.2; +deltmCurpA=conj((phaseASpotLoadP+1j*phaseASpotLoadQ)./rVoltpA)*0.2; +deltmCurpB=conj((phaseBSpotLoadP+1j*phaseBSpotLoadQ)./rVoltpB)*0.2; +deltmCurpC=conj((phaseCSpotLoadP+1j*phaseCSpotLoadQ)./rVoltpC)*0.2; %转换为序电流 deltF012=Tp2f*conj([deltmCurpA';deltmCurpB';deltmCurpC']); dI_F=conj(deltF012)'; @@ -356,19 +360,19 @@ for II=1:3 if II==1 fprintf('正序\n'); tic - [ V1r,V1i,I1r,I1i,isConverged1 ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1,dI_F,II ); + [ V1r,V1i,I1r,I1i,isConverged1 ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1,dI_F,II,rIf1 ); toc end if II==2 fprintf('负序\n'); tic - [ V2r,V2i,I2r,I2i,isConverged2 ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0,dI_F,II ); + [ V2r,V2i,I2r,I2i,isConverged2 ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0,dI_F,II,rIf2 ); toc end if II==3 fprintf('零序\n'); tic - [ V0r,V0i,I0r,I0i,isConverged0 ]=IPMLoop(V0measurement,wV0r,wV0i,I0measurement,wI0r,wI0i,BalI0r,BalI0i,busNum,Loadi,fsY00,Balance,0,dI_F,II ); + [ V0r,V0i,I0r,I0i,isConverged0 ]=IPMLoop(V0measurement,wV0r,wV0i,I0measurement,wI0r,wI0i,BalI0r,BalI0i,busNum,Loadi,fsY00,Balance,0,dI_F,II,rIf0 ); toc end