threephasese-onlyenquationc.../lineWithConfig.m

107 lines
3.3 KiB
Matlab
Raw Permalink 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 [ fs30,fs31,fs32,phaseABCY ] = lineWithConfig(setIJ,nodeNum,lineZ,lines,config,baseHighU )
phase3Entry=find(lines(:,1)==config);
phase3Line=lines(phase3Entry,:);
phase3Line(:,4)=phase3Line(:,4)/1000;
entry=find(lineZ(:,1)==config);
if isempty(entry)
fs30=0;
fs31=0;
fs32=0;
phaseABCY=0;
fprintf('warning: line type %d not found.\n',config)
return;
end
phase3R=lineZ(entry+1:entry+3,:);
phase3X=lineZ(entry+5:entry+7,:);
phase3B2=lineZ(entry+9:entry+11,:);
phase3Z=phase3R+1j*phase3X;
phase3Y=inv(phase3Z);
%标幺值
baseS=1;
baseY=baseS/(baseHighU^2);
phase3Y=phase3Y/baseY;
diagEle=diag(phase3Y);%对角元素
diagEle=sum(diagEle)/3;
offDiagEle=phase3Y-diag(diag(phase3Y));
offDiagEle=sum(sum(offDiagEle))/6;
%让对角和非对角相等
phase3Y(1,1)=diagEle;
phase3Y(1,2)=offDiagEle;
phase3Y(2,1)=offDiagEle;
phase3Y(3,1)=offDiagEle;
phase3Y(1,3)=offDiagEle;
phase3Y(1,3)=phase3Y(1,2);
phase3Y(3,1)=phase3Y(2,1);
phase3Y(3,2)=phase3Y(3,1);
phase3Y(2,3)=phase3Y(1,3);
phase3Y(2,2)=phase3Y(1,1);
phase3Y(3,3)=phase3Y(1,1);
%进行Fortescue变换
%直接写结果
a=exp(1j*2*pi/3);
Tp2f=1/3*[1 1 1;
1 a a^2;
1 a^2 a];
Tf2p=inv(Tp2f);
%
% Tf2p=[1 1 1;
% 1 a^2 a;
% 1 a a^2];
% fs3Y=Tp2f*phase3Y*Tf2p;
% Zl=phase3Y(1,1);
% Zm=phase3Y(2,1);
Zl=diagEle;
Zm=offDiagEle;
fs3Y=3/3*diag([Zl+2*Zm,Zl-Zm,Zl-Zm]);%这里不是1/3IEEE上的公式错了。
fs3Y(abs(fs3Y)<1e-5)=0;
fs3Y=sparse(fs3Y);
lineNodeI=zeros(length(phase3Line(:,2) ) ,1);
lineNodeJ=zeros(length(phase3Line(:,2) ) ,1);
for I=1:length(lineNodeI)
lineNodeI(I)=nodeNum(setIJ==phase3Line(I,2) );
lineNodeJ(I)=nodeNum(setIJ==phase3Line(I,3) );
end
busNum=length(nodeNum);
%生成三相导纳矩阵
phaseABCY=sparse(busNum*3,busNum*3);
for I=1:length(phase3Line(:,4))
[phase3Yr,phase3Yc,phase3Yv]=find(phase3Y./phase3Line(I,4));
offsetI=phase3Yr+3*(lineNodeI(I)-1);
offsetJ=phase3Yc+3*(lineNodeJ(I)-1);
phaseABCY=phaseABCY+sparse(offsetI,offsetJ,-phase3Yv,busNum*3,busNum*3);
phaseABCY=phaseABCY+sparse(offsetJ,offsetI,-phase3Yv,busNum*3,busNum*3);
%1
diagY=sum(phaseABCY(:,1:3:end),2);
offsetI=1:busNum*3;
offsetJ=zeros(busNum*3,1);
for J=0:busNum*3-1
offsetJ(J+1)=floor(J/3)*3+1;
end
phaseABCY=phaseABCY-sparse(offsetI,offsetJ,diagY,busNum*3,busNum*3);
%2
diagY=sum(phaseABCY(:,2:3:end),2);
offsetJ=zeros(busNum*3,1);
for J=0:busNum*3-1
offsetJ(J+1)=floor(J/3)*3+2;
end
phaseABCY=phaseABCY-sparse(offsetI,offsetJ,diagY,busNum*3,busNum*3);
%3
diagY=sum(phaseABCY(:,3:3:end),2);
offsetJ=zeros(busNum*3,1);
for J=0:busNum*3-1
offsetJ(J+1)=floor(J/3)*3+3;
end
phaseABCY=phaseABCY-sparse(offsetI,offsetJ,diagY,busNum*3,busNum*3);
end
fs30=sparse(lineNodeI,lineNodeJ,-fs3Y(1,1)./phase3Line(:,4),busNum,busNum);
fs30=fs30+sparse(lineNodeJ,lineNodeI,-fs3Y(1,1)./phase3Line(:,4),busNum,busNum);
fs30=fs30-sparse(1:busNum,1:busNum,sum(fs30,2));
fs31=sparse(lineNodeI,lineNodeJ,-fs3Y(2,2)./phase3Line(:,4),busNum,busNum);
fs31=fs31+sparse(lineNodeJ,lineNodeI,-fs3Y(2,2)./phase3Line(:,4),busNum,busNum);
fs31=fs31-sparse(1:busNum,1:busNum,sum(fs31,2));
fs32=sparse(lineNodeI,lineNodeJ,-fs3Y(3,3)./phase3Line(:,4),busNum,busNum);
fs32=fs32+sparse(lineNodeJ,lineNodeI,-fs3Y(3,3)./phase3Line(:,4),busNum,busNum);
fs32=fs32-sparse(1:busNum,1:busNum,sum(fs32,2));
end