diff --git a/FormLwstate1.m b/FormLwstate1.m index 2788fd7..da6bc21 100644 --- a/FormLwstate1.m +++ b/FormLwstate1.m @@ -1,11 +1,6 @@ -function Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,guessIf1) +function Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,guessIf1,rIf1,upper) + -Ir=real(guessIf1); -pIr=find(Ir>0); -nIr=find(Ir<0); -Ii=imag(guessIf1); -pIi=find(Ii>0); -nIi=find(Ii<0); % Loadi=[1,4,5,6,8,10]; @@ -15,22 +10,37 @@ nIi=find(Ii<0); % upper(nIr)=0.6*Ir(nIr); % upper(pIi+length(Ir))=1.4*Ii(pIi); % upper(nIi+length(Ir))=0.6*Ii(nIi); -upper=ones(length(Loadi)*2,1); + % upper(pIr)=abs(real(dI_F(pIr,flag)))+Ir(pIr); % upper(nIr)=abs(real(dI_F(nIr,flag)))+Ir(nIr); % upper(pIi+length(Ir))=abs(imag(dI_F(pIi,flag)))+Ii(pIi); % upper(nIi+length(Ir))=abs(imag(dI_F(nIi,flag)))+Ii(nIi); -upper(pIr)=1.3*Ir(pIr); -upper(nIr)=0.7*Ir(nIr); -upper(pIi+length(Ir))=1.3*Ii(pIi); -upper(nIi+length(Ir))=0.7*Ii(nIi); + + + +% if flag~=2 +% upper(pIr)=0.8; +% upper(nIr)=0.8; +% upper(pIi+length(Ir))=0.8; +% upper(nIi+length(Ir))=0.8; +% end + + +% if real(rIf1(Loadi))>upper( union( pIr,nIr) ) +% warning('not bounded'); +% end +% +% if imag(rIf1(Loadi))>upper(union( pIr,nIr)+length(Ir)) +% warning('not bounded'); +% end + %太小的数都要放宽一些 -% tooSmall=find(abs(Ir)<0.0005); -% upper(tooSmall)=0.2; -% tooSmall=find(abs(Ii)<0.0005); -% upper(tooSmall+length(Ir))=0.2; +% tooSmall=find(abs(Ir)<0.05); +% upper(tooSmall)=0.8; +% tooSmall=find(abs(Ii)<0.05); +% upper(tooSmall+length(Ir))=0.8; Lw=Mat_G+Init_U-upper; end \ No newline at end of file diff --git a/FormLzstate1.m b/FormLzstate1.m index 1886842..994c8b7 100644 --- a/FormLzstate1.m +++ b/FormLzstate1.m @@ -1,14 +1,9 @@ -function Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag,guessIf1) -Ir=real(guessIf1); -pIr=find(Ir>0); -nIr=find(Ir<0); -Ii=imag(guessIf1); -pIi=find(Ii>0); -nIi=find(Ii<0); +function Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag,guessIf1,rIf1,lower) + % 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); % lower(pIi+length(Ir))=0.6*Ii(pIi); @@ -24,17 +19,33 @@ lower=ones(length(Loadi)*2,1); % lower(pIi+length(Ir))=-abs(imag(dI_F(pIi,flag)))+Ii(pIi); % lower(nIi+length(Ir))=-abs(imag(dI_F(nIi,flag)))+Ii(nIi); -lower(pIr)=0.7*Ir(pIr); -lower(nIr)=1.3*Ir(nIr); -lower(pIi+length(Ir))=0.7*Ii(pIi); -lower(nIi+length(Ir))=1.3*Ii(nIi); +% lower(nIr(1))=-18; +% lower(nIr(2))=-18; +% lower(nIr(3))=-18; +% lower(nIr(4))=-18; + + +% if flag~=2 +% lower(pIr)=-18; +% lower(nIr)=-18; +% lower(pIi+length(Ir))=-18; +% lower(nIi+length(Ir))=-18; +% end + +% if real(rIf1(Loadi))0.00001) +kmax=100; +isSetBound=0; +largerBound=1; +realBound=0; +tic +while(abs(Gap)>1e-4) if KK>=kmax break; end @@ -49,8 +58,100 @@ 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,guessIf1); - Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,guessIf1); + +% if isSetBound==0 + + Ir=real(guessIf1); + pIr=find(Ir>0); + nIr=find(Ir<0); + Ii=imag(guessIf1); + pIi=find(Ii>0); + nIi=find(Ii<0); + lower=ones(length(Loadi)*2,1); +% if abs(Gap)<1 || isSetBound==1 + + if abs(Gap)<1000 + largerBound=0; + realBound=1; + end + + if realBound==1 +% lower(pIr)=(0.9-3/(KK+1))*Ir(pIr); +% lower(nIr)=(1.100+3/(KK+1))*Ir(nIr); +% lower(pIi+length(Ir))=(0.9-3/(KK+1))*Ii(pIi); +% lower(nIi+length(Ir))=(1.10+3/(KK+1))*Ii(nIi); + isSetBound=1; + lower(pIr)=(0.7)*Ir(pIr); + lower(nIr)=(1.300)*Ir(nIr); + lower(pIi+length(Ir))=(0.7)*Ii(pIi); + lower(nIi+length(Ir))=(1.30)*Ii(nIi); + lower( ismember(Loadi,noBoundedLoadi))=-0.9; + lower(ismember(Loadi,noBoundedLoadi)+length(Ir))=-0.9; + end + + if largerBound==1 + lower(pIr)=-2.8; + lower(nIr)=-2.8; + lower(pIi+length(Ir))=-2.8; + lower(nIi+length(Ir))=-2.8; + +% lower(pIr)=(0.7)*Ir(pIr)-0.1; +% lower(nIr)=(1.300)*Ir(nIr)-0.1; +% lower(pIi+length(Ir))=(0.7)*Ii(pIi)-0.1; +% lower(nIi+length(Ir))=(1.30)*Ii(nIi)-0.1; + end + + + +% lowerR=lower(1:length(lower)/2); +% lowerR(I1r./lowerR>0.98)=lowerR(I1r./lowerR>0.98)-0.001; +% lowerI=lower(length(lower)/2+1:end); +% lowerI(I1i./lowerI>0.98)=lowerI(I1i./lowerI>0.98)-0.001; +% lower=[lowerR;lowerI]; + +% I1r(I1r./lowerR>0.9998)=lowerR(I1r./lowerR>0.9998); +% I1i(I1i./lowerI>0.9998)=lowerI(I1i./lowerI>0.9998); + + Ir=real(guessIf1); + pIr=find(Ir>0); + nIr=find(Ir<0); + Ii=imag(guessIf1); + pIi=find(Ii>0); + nIi=find(Ii<0); + upper=ones(length(Loadi)*2,1); +% if abs(Gap)<1 || isSetBound==1 + if realBound==1 +% upper(pIr)=(1.10+3/(KK+1))*Ir(pIr); +% upper(nIr)=(0.9-3/(KK+1))*Ir(nIr); +% upper(pIi+length(Ir))=(1.10+3/(KK+1))*Ii(pIi); +% upper(nIi+length(Ir))=(0.9-3/(KK+1))*Ii(nIi); + isSetBound=1; + upper(pIr)=(1.30)*Ir(pIr); + upper(nIr)=(0.7)*Ir(nIr); + upper(pIi+length(Ir))=(1.30)*Ii(pIi); + upper(nIi+length(Ir))=(0.7)*Ii(nIi); + upper(ismember(Loadi,noBoundedLoadi))=0.9; + upper(ismember(Loadi,noBoundedLoadi)+length(Ir))=0.9; + end + + if largerBound==1 + + upper(pIr)=2.8; + upper(nIr)=2.8; + upper(pIi+length(Ir))=2.8; + upper(nIi+length(Ir))=2.8; + +% upper(pIr)=(1.30)*Ir(pIr)+0.1; +% upper(nIr)=(0.7)*Ir(nIr)+0.1; +% upper(pIi+length(Ir))=(1.30)*Ii(pIi)+0.1; +% upper(nIi+length(Ir))=(0.7)*Ii(nIi)+0.1; + end + + +% end + + Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement,dI_F,flag,guessIf1,rIf1,lower); + Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement,dI_F,flag,guessIf1,rIf1,upper); Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W); YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx); %% 开始解方程 @@ -59,9 +160,11 @@ while(abs(Gap)>0.00001) [deltZ,deltL,deltW,deltU,deltX,deltY]=AssignXX(XX,ContrlCount,RestraintCount,busNum,Balance); [Init_Z,Init_L,Init_W,Init_U,Init_Y,V1r,V1i,I1r,I1i]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,V1r,V1i,I1r,I1i,ContrlCount,Balance,busNum,Loadi,Vref); Gap=(Init_L'*Init_Z-Init_U'*Init_W)+max(abs(deltX)); - fprintf('Gap %f\n',full(Gap)); + fprintf('Gap %f :%d\n',full(Gap),KK+1); KK=KK+1; end +toc +calcuTime=toc/KK; % f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(V1measurement)-V1r(Loadi)).^2)+sum((imag(V1measurement)-V1i(Loadi)).^2); if abs(Gap)<0.00001 && KK