107 lines
3.3 KiB
Matlab
107 lines
3.3 KiB
Matlab
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/3,IEEE上的公式错了。
|
||
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
|
||
|