如果虚拟电压方差太小,就会不容易收敛。要限制方差太小。

Signed-off-by: dugg@lab-desk <dugg@lab-desk>
This commit is contained in:
dugg@lab-desk 2014-11-10 10:21:23 +08:00
parent fb1bde0e22
commit d411972751
3 changed files with 26 additions and 15 deletions

View File

@ -1,4 +1,4 @@
function [ V1r,V1i,I1r,I1i ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref ) function [ V1r,V1i,I1r,I1i,isConverged ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref )
% %
V1r=1*ones(busNum,1); V1r=1*ones(busNum,1);
V1i=0*ones(busNum,1); V1i=0*ones(busNum,1);
@ -23,7 +23,7 @@ Init_U=1*sparse(ones(RestraintCount,1));
Init_Y=sparse(2*busNum,1);% Init_Y=sparse(2*busNum,1);%
Gap=(Init_L'*Init_Z-Init_U'*Init_W); Gap=(Init_L'*Init_Z-Init_U'*Init_W);
kmax=60; kmax=60;
while(abs(Gap)>0.000001) while(abs(Gap)>0.00001)
if KK>kmax if KK>kmax
break; break;
end end
@ -84,7 +84,11 @@ while(abs(Gap)>0.000001)
fprintf('Gap %f\n',full(Gap)); fprintf('Gap %f\n',full(Gap));
KK=KK+1; KK=KK+1;
end end
f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(V1measurement)-V1r(Loadi)).^2)+sum((imag(V1measurement)-V1i(Loadi)).^2); % 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
isConverged=1;
else
isConverged=0;
end
end end

23
run.m
View File

@ -1,4 +1,4 @@
function [JMeasurement,SEMeasurement,SEMeasurementNOPQ,SEMeasurementM,SEMeasurementNOPQM]=run() function [JMeasurement,SEMeasurement,SEMeasurementNOPQ,SEMeasurementM,SEMeasurementNOPQM,isConverged]=run()
%% %%
% %
close all close all
@ -146,9 +146,9 @@ mphaseASpotLoadQ=phaseASpotLoadQ.*(1+normrnd(0,sigma,length(phaseASpotLoadQ),1))
mphaseBSpotLoadQ=phaseBSpotLoadQ.*(1+normrnd(0,sigma,length(phaseBSpotLoadQ),1)); mphaseBSpotLoadQ=phaseBSpotLoadQ.*(1+normrnd(0,sigma,length(phaseBSpotLoadQ),1));
mphaseCSpotLoadQ=phaseCSpotLoadQ.*(1+normrnd(0,sigma,length(phaseCSpotLoadQ),1)); mphaseCSpotLoadQ=phaseCSpotLoadQ.*(1+normrnd(0,sigma,length(phaseCSpotLoadQ),1));
% %
mVoltpA=VoltpA.*(1+normrnd(0,sigma,length(VoltpA),1)); % mVoltpA=VoltpA.*(1+normrnd(0,sigma,length(VoltpA),1));
mVoltpB=VoltpB.*(1+normrnd(0,sigma,length(VoltpB),1)); % mVoltpB=VoltpB.*(1+normrnd(0,sigma,length(VoltpB),1));
mVoltpC=VoltpC.*(1+normrnd(0,sigma,length(VoltpC),1)); % mVoltpC=VoltpC.*(1+normrnd(0,sigma,length(VoltpC),1));
% %
mVoltpA=abs(VoltpA).*(1+normrnd(0,sigma,length(VoltpA),1)); mVoltpA=abs(VoltpA).*(1+normrnd(0,sigma,length(VoltpA),1));
mVoltpB=abs(VoltpB).*(1+normrnd(0,sigma,length(VoltpB),1)).*exp(1j*-120/180*pi); mVoltpB=abs(VoltpB).*(1+normrnd(0,sigma,length(VoltpB),1)).*exp(1j*-120/180*pi);
@ -181,7 +181,6 @@ mIf2=-mIf2;
%% %%
%% %%
% %
fprintf('ÕýÐò\n');
BalI1r=real(-sum(rIf1)); BalI1r=real(-sum(rIf1));
BalI1i=imag(-sum(rIf1)); BalI1i=imag(-sum(rIf1));
% %
@ -204,13 +203,13 @@ I1measurement=mIf1(Loadi);
% %
wV1r=abs(real(V1measurement)).*sigma; wV1r=abs(real(V1measurement)).*sigma;
wV1i=abs(imag(V1measurement)).*sigma; wV1i=abs(imag(V1measurement)).*sigma;
wV1i(abs(wV1i)<1e-5)=1e10;
wI1r=abs(real(I1measurement)).*sigma; wI1r=abs(real(I1measurement)).*sigma;
wI1i=abs(imag(I1measurement)).*sigma; wI1i=abs(imag(I1measurement)).*sigma;
% [ V1r,V1i,I1r,I1i ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 ); % [ V1r,V1i,I1r,I1i ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 );
% f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(rV1)-V1r).^2)+sum((imag(rV1)-V1i).^2); % f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(rV1)-V1r).^2)+sum((imag(rV1)-V1i).^2);
% fprintf(' %f\n',full(f)); % fprintf(' %f\n',full(f));
%% %%
fprintf('¸ºÐò\n');
BalI2r=real(-sum(rIf2)); BalI2r=real(-sum(rIf2));
BalI2i=imag(-sum(rIf2)); BalI2i=imag(-sum(rIf2));
% %
@ -239,7 +238,6 @@ wI2i=abs(imag(I2measurement)).*sigma;
% f=sum(([real(I2measurement);imag(I2measurement)]-[I2r;I2i]).^2)+sum((real(rV2)-V2r).^2)+sum((imag(rV2)-V2i).^2); % f=sum(([real(I2measurement);imag(I2measurement)]-[I2r;I2i]).^2)+sum((real(rV2)-V2r).^2)+sum((imag(rV2)-V2i).^2);
% fprintf(' %f\n',full(f)); % fprintf(' %f\n',full(f));
%% %%
fprintf('ÁãÐò\n');
BalI0r=real(-sum(rIf0)); BalI0r=real(-sum(rIf0));
BalI0i=imag(-sum(rIf0)); BalI0i=imag(-sum(rIf0));
% %
@ -269,13 +267,16 @@ tic
for II=1:3 for II=1:3
if II==1 if II==1
[ V1r,V1i,I1r,I1i ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 ); fprintf('\n');
[ V1r,V1i,I1r,I1i,isConverged1 ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 );
end end
if II==2 if II==2
[ V2r,V2i,I2r,I2i ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0 ); fprintf('\n');
[ V2r,V2i,I2r,I2i,isConverged2 ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0 );
end end
if II==3 if II==3
[ V0r,V0i,I0r,I0i ]=IPMLoop(V0measurement,wV0r,wV0i,I0measurement,wI0r,wI0i,BalI0r,BalI0i,busNum,Loadi,fsY00,Balance,0 ); fprintf('\n');
[ V0r,V0i,I0r,I0i,isConverged0 ]=IPMLoop(V0measurement,wV0r,wV0i,I0measurement,wI0r,wI0i,BalI0r,BalI0i,busNum,Loadi,fsY00,Balance,0 );
end end
end end
@ -359,4 +360,6 @@ SEMeasurementM=(SEMeasurementM/mCount)^.5;
%PDQD %PDQD
SEMeasurementNOPQM=sum(sum((( abs(rVoltABCV)-abs(mVoltABCV))./abs(mVoltABCV)./sigma).^2)); SEMeasurementNOPQM=sum(sum((( abs(rVoltABCV)-abs(mVoltABCV))./abs(mVoltABCV)./sigma).^2));
SEMeasurementNOPQM=(SEMeasurementNOPQM/mCount)^.5; SEMeasurementNOPQM=(SEMeasurementNOPQM/mCount)^.5;
%
isConverged=isConverged1*isConverged2*isConverged0;
end end

6
test.m
View File

@ -8,7 +8,11 @@ SEMeasurementMSum=0;
SEMeasurementNOPQMSum=0; SEMeasurementNOPQMSum=0;
N=1000; N=1000;
for I=1:N for I=1:N
[JMeasurement,SEMeasurement,SEMeasurementNOPQ,SEMeasurementM,SEMeasurementNOPQM]=run(); [JMeasurement,SEMeasurement,SEMeasurementNOPQ,SEMeasurementM,SEMeasurementNOPQM,isConverged]=run();
if isConverged==0
I=I-1;
continue
end
% [JMeasurement]=run(); % [JMeasurement]=run();
JMeasurementSum=JMeasurement+JMeasurementSum; JMeasurementSum=JMeasurement+JMeasurementSum;
SEMeasurementSum=SEMeasurement+SEMeasurementSum; SEMeasurementSum=SEMeasurement+SEMeasurementSum;