1.添加生成Laplace分布的函数

2.考虑负荷和线路功率量测

Signed-off-by: dmy@lab <dmy@lab.lab>
This commit is contained in:
dmy@lab 2015-03-30 17:50:51 +08:00
parent d3146da2b9
commit d8597b5a64
3 changed files with 76 additions and 21 deletions

7
LineCurrent.m Normal file
View File

@ -0,0 +1,7 @@
function [ output_args ] = LineCurrent( Linei,Linej,Liner,Linex,Volt,VAngle )
cmpV=Volt.*exp(1j*VAngle);
GB=1./(Liner+1j*Linex);
cmpI=( cmpV(Linei)-cmpV(Linej) ).*GB;
output_args=abs(cmpI);
end

30
laprnd.m Normal file
View File

@ -0,0 +1,30 @@
function y = laprnd(m, n, mu, sigma)
%LAPRND generate i.i.d. laplacian random number drawn from laplacian distribution
% with mean mu and standard deviation sigma.
% mu : mean
% sigma : standard deviation
% [m, n] : the dimension of y.
% Default mu = 0, sigma = 1.
% For more information, refer to
% http://en.wikipedia.org./wiki/Laplace_distribution
% Author : Elvis Chen (bee33@sjtu.edu.cn)
% Date : 01/19/07
%Check inputs
if nargin < 2
error('At least two inputs are required');
end
if nargin == 2
mu = 0; sigma = 1;
end
if nargin == 3
sigma = 1;
end
% Generate Laplacian noise
u = rand(m, n)-0.5;
b = sigma / sqrt(2);
y = mu - b * sign(u).* log(1- 2* abs(u));

60
run.m
View File

@ -5,18 +5,21 @@ addpath('.\Powerflow')
[~, ~, ~, ~,Volt,Vangle,Y,Yangle,r,c,newwordParameter,PG,QG,PD,QD,Balance]=pf('E:\\feeder33\feeder33ieee.txt', '0');
% 'E:\\feeder33\feeder33ieee.txt'
%%
sigma=0.01;% ±ê×¼²î
sigma=0.03;%
loop=1;
VoltAAE=0;
VAngleAAE=0;
LineIndex=[1:16];
while 1
%%
%
rVolt=Volt; %
BalanceVolt=Volt(Balance);
% mVolt=rVolt.*(normrnd(0,sigma,length(Volt),1)+1);%µçѹÁ¿²âÁ¿
mVolt=rVolt.*(normrnd(0,sigma,length(Volt),1)+1);%
%
mVolt=rVolt.*(unifrnd(-3*sigma,3*sigma,length(rVolt),1)+1);
% mVolt=rVolt.*(unifrnd(-3*sigma,3*sigma,length(rVolt),1)+1);
%Laplace
% mVolt=rVolt.*(laprnd(length(rVolt),1,0,sigma)+1);
rVAngel=Vangle;
%%
%
@ -66,19 +69,23 @@ while 1
%
% mPD=rPD.*(normrnd(0,sigma,length(rPD),1)+1);
% mQD=rQD.*(normrnd(0,sigma,length(rQD),1)+1);
% mPG=rPG.*(normrnd(0,sigma,length(rPG),1)+1);
% mQG=rQG.*(normrnd(0,sigma,length(rQG),1)+1);
mPD=rPD.*(normrnd(0,sigma,length(rPD),1)+1);
mQD=rQD.*(normrnd(0,sigma,length(rQD),1)+1);
mPG=rPG.*(normrnd(0,sigma,length(rPG),1)+1);
mQG=rQG.*(normrnd(0,sigma,length(rQG),1)+1);
%
mPD=rPD.*(unifrnd(-3*sigma,3*sigma,length(rPD),1)+1);
mQD=rQD.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+1);
mPG=rPG.*(unifrnd(-3*sigma,3*sigma,length(rPG),1)+1);
mQG=rQG.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+1);
% PD0(Loadi)=RealPD(Loadi).*(1+unifrnd(-3*sigma,3*sigma,length(Loadi),1));
% QD0(Loadi)=RealQD(Loadi).*(1+unifrnd(-3*sigma,3*sigma,length(Loadi),1));
% mVolt=rVolt.*(1+unifrnd(-3*sigma,3*sigma,1,length(rVolt)));
% mPD=rPD.*(unifrnd(-3*sigma,3*sigma,length(rPD),1)+1);
% mQD=rQD.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+1);
% mPG=rPG.*(unifrnd(-3*sigma,3*sigma,length(rPG),1)+1);
% mQG=rQG.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+1);
%Laplace
% mPD=rPD.*(laprnd(length(rPD),1,0,sigma)+1);
% mQD=rQD.*(laprnd(length(rQD),1,0,sigma)+1);
% mPG=rPG.*(laprnd(length(rPG),1,0,sigma)+1);
% mQG=rQG.*(laprnd(length(rQD),1,0,sigma)+1);
%% 0
zerosInjectionIndex=1:length(Volt);
zerosInjectionIndex=zerosInjectionIndex( ~(PD~=0|QD~=0|PG~=0|QG~=0) );
@ -90,7 +97,7 @@ while 1
onlyQG=setdiff(QGi,PDQDi);
%%
% measureSigma=abs(([rVolt;rBranchP;rBranchQ;rTransP;rTransQ].*sigma));
measureSigma=abs(([rVolt;rPD(PDi);rQD(QDi);].*sigma));
measureSigma=abs(([rVolt;rPD(PDi);rQD(QDi);rBranchP(LineIndex);rBranchQ(LineIndex);rTransP;rTransQ].*sigma));
% measureSigma(measureSigma<1e-6)=mean(measureSigma(measureSigma>1e-6));
W=sparse(diag(1./measureSigma.^2)) ;
% W=eye(length(W));
@ -309,7 +316,12 @@ while 1
% dTQij_dVi+dTQij_dVj,dTQij_dThetai+dTQij_dThetaj];%jacobi
H=[dV_dV,dV_dTyta;
dPdV(PDi,:),dPdTyta(PDi,:);
dQdV(QDi,:),dQdTyta(QDi,:)];%jacobi
dQdV(QDi,:),dQdTyta(QDi,:);
dLPij_dVi(LineIndex,:)+dLPij_dVj(LineIndex,:),dLPij_dThetai(LineIndex,:)+dLPij_dThetaj(LineIndex,:) ;
dLQij_dVi(LineIndex,:)+dLQij_dVj(LineIndex,:),dLQij_dThetai(LineIndex,:)+dLQij_dThetaj(LineIndex,:) ;
dTPij_dVi+dTPij_dVj,dTPij_dThetai+dTPij_dThetaj;
dTQij_dVi+dTQij_dVj,dTQij_dThetai+dTQij_dThetaj
];%jacobi
SEBranchI=BranchI( SEVolt.*exp(1j*SEVAngle),lineI,lineJ,lineR,lineX );%
SEBranchP=BranchP( SEVolt.*exp(1j*SEVAngle),SEBranchI,lineI,lineB2 );
@ -321,12 +333,12 @@ while 1
SEPD=diag(SEVolt)*Y.* ( spfun (@cos, VAngleIJ ) )*SEVolt;
SEQD=diag(SEVolt)*Y.* ( spfun(@sin,VAngleIJ) )*SEVolt;
h=[SEVolt;SEPD(PDi);SEQD(QDi);];
h=[SEVolt;SEPD(PDi);SEQD(QDi);SEBranchP(LineIndex);SEBranchQ(LineIndex);SETransP;SETransQ];
% h=[SEVolt;SEBranchP;SEBranchQ;SETransP;SETransQ];
% z=[mVolt;mBranchP;mBranchQ;mTransP;mTransQ];
z=[mVolt;-mPD(PDi);-mQD(QDi)];
z=[mVolt;-mPD(PDi);-mQD(QDi);mBranchP(LineIndex);mBranchQ(LineIndex);mTransP;mTransQ];
G=H'*W*H;
@ -397,7 +409,7 @@ while 1
end
VoltAAE=VoltAAE+sum(abs((SEVolt-rVolt)./rVolt));
VAngleAAE=VAngleAAE+sum(abs((SEVAngle(2:end)-rVAngel(2:end))./rVAngel(2:end)));
if loop>=500
if loop>=1
break
end
loop=loop+1;
@ -413,9 +425,15 @@ fprintf('
MaxDeviation(rVolt,SEVolt,rVAngel,SEVAngle)
plotAndComparison( rVolt,rVAngel,SEVolt,SEVAngle )
%
if any(abs(optimalCondition)>eps)
fprintf('\n')
else
fprintf('\n')
end
end
Linei=newwordParameter.line.lineI;
Linej=newwordParameter.line.lineJ;
Liner=newwordParameter.line.lineR;
Linex=newwordParameter.line.lineX;
SELineCurrent=LineCurrent( Linei,Linej,Liner,Linex,SEVolt,SEVAngle );
RealLineCurrent=LineCurrent( Linei,Linej,Liner,Linex,rVolt,rVAngel );
sqrt(sum((SELineCurrent-RealLineCurrent).^2)/length(SELineCurrent))