如果虚拟电压方差太小,就会不容易收敛。要限制方差太小。
Signed-off-by: dugg@lab-desk <dugg@lab-desk>
This commit is contained in:
parent
fb1bde0e22
commit
d411972751
12
IPMLoop.m
12
IPMLoop.m
|
|
@ -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
23
run.m
|
|
@ -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;
|
||||||
%没有PD,QD的
|
%没有PD,QD的
|
||||||
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
6
test.m
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue