stateestimation-ipm/@SEOpti/fun.m

47 lines
2.0 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function [ Objective ] = fun(this, x )
%FUN Summary of this function goes here
% Detailed explanation goes here
Objective=0;
SEVolt=x(1:this.Busnum);
SEVAngel=x(this.Busnum+1:2*this.Busnum);
rVolt=this.rVolt;
sigma=this.sigma;
VoltSigma=rVolt*sigma;
Objective=sum(((SEVolt-this.mVolt)./VoltSigma).^2);%电压
%% 支路电流
cmpSEV=SEVolt.*exp(1j*SEVAngel); %复数电压
cmpSEBranchI=(cmpSEV(this.lineI)-cmpSEV(this.lineJ))./(this.lineR+1j*this.lineX);%复数支路电流
SEBranchI=abs(cmpSEBranchI);% 支路电流幅值
% (SEBranchI-this.mBranchI).^2./(this.sigma^2)
% Objective=Objective+sum((SEBranchI-this.mBranchI).^2./(this.sigma^2));%%电流
%% 线路功率
rVAngel=this.rVAngel;
cmpV=rVolt.*exp(1j*rVAngel);
rBranchPQ=(cmpV(this.lineI)-cmpV(this.lineJ)).*conj( (cmpV(this.lineI)-cmpV(this.lineJ))./(this.lineR+1j*this.lineX) );
SEBranchPSigma=real(rBranchPQ)*sigma;
indBranchPS=find(real(rBranchPQ)>1e-5);%不考虑太小的数据以免权重太大。例如除以0
SEBranchPSigma=SEBranchPSigma(indBranchPS);
SEBranchQSigma=imag(rBranchPQ)*sigma;
indBranchQS=find(imag(rBranchPQ)>1e-5);%不考虑太小的数据以免权重太大。例如除以0
SEBranchQSigma=SEBranchQSigma(indBranchQS);
SEBranchP=real((cmpSEV(this.lineI)-cmpSEV(this.lineJ)).*conj(cmpSEBranchI));
SEBranchP=SEBranchP(indBranchPS);
SEBranchQ=imag((cmpSEV(this.lineI)-cmpSEV(this.lineJ)).*conj(cmpSEBranchI));
SEBranchQ=SEBranchQ(indBranchQS);
Objective=Objective+sum((SEBranchP-this.mBranchP).^2./(SEBranchPSigma.^2));
Objective=Objective+sum((SEBranchQ-this.mBranchQ).^2./(SEBranchQSigma.^2));
%% 变压器
newwordParameter=this.newwordParameter;
cmpY=this.cmpY;
transP=TransPower( newwordParameter,cmpY,SEVolt,SEVAngel );
Objective=Objective+sum((transP-this.mTransP).^2/(this.sigma^2));
transQ=TransReactivePower( newwordParameter,cmpY,SEVolt,SEVAngel );
% Objective=Objective+sum((transQ-this.mTransQ).^2/(this.sigma^2));
%% 0注入节点
PQ=diag(cmpSEV)*conj(this.cmpY*cmpSEV);
%% 发电机注入功率
% Objective=Objective+sum(((this.mPG(this.onlyPG)-real(PQ(this.onlyPG)))/this.sigma).^2);
% Objective=Objective+sum(((this.mQG(this.onlyQG)-imag(PQ(this.onlyQG)))./this.sigma).^2);
end