function [G,B,transY,transG,transB,transG1,transB1,transNum,lineNum,lineI,lineJ,lineB,transI,transJ,transK0,transKmin,transKmax]=... formY(nodeNum,mtrLine,mtrGround,mtrTrans,capI,capK) %程序功能:形成节点导纳矩阵 %编写时间:2010年11月 %变量定义: %G--电导矩阵,B--电纳矩阵,lineI,lineJ--节点序号,lineR--线路电阻 %lineX--线路电抗,groundI--接地支路节点序号 %groundR--接地支路电阻,groundX--接地支路电抗 %transI,transJ--变压器支路节点序号 %transR--变压器支路电阻,transX--变压器支路电抗 %transK--变压器变比 %transG--变压器支路等效电导,transB--变压器支路等效电纳 %% 利用线路和接地支路参数形成导纳矩阵 lineI=mtrLine(:,2); lineJ=mtrLine(:,3); lineR=mtrLine(:,4); lineX=mtrLine(:,5); lineB=mtrLine(:,6); groundI=mtrGround(:,1); groundX=mtrGround(:,2); Yij=1./(lineR+j*lineX); Y1=-sparse(lineI,lineJ,Yij,nodeNum,nodeNum)-sparse(lineJ,lineI,Yij,nodeNum,nodeNum)... +sparse(lineI,lineI,Yij+j*lineB,nodeNum,nodeNum)+sparse(lineJ,lineJ,Yij+j*lineB,nodeNum,nodeNum)... +sparse(groundI,groundI,j*groundX,nodeNum,nodeNum)+sparse(capI,capI,j*capK,nodeNum,nodeNum); %% 加入变压器支路修改导纳矩阵 transIall=mtrTrans(:,2); transJall=mtrTrans(:,3); transR=mtrTrans(:,4); transX=mtrTrans(:,5); transK0all=mtrTrans(:,6); lineNum=length(lineI)+length(transIall); transY=1./(transR+j*transX); Y1=Y1-sparse(transIall,transJall,transY./transK0all,nodeNum,nodeNum)-sparse(transJall,transIall,transY./transK0all,nodeNum,nodeNum)... +sparse(transIall,transIall,transY./transK0all./transK0all,nodeNum,nodeNum)+sparse(transJall,transJall,transY,nodeNum,nodeNum); Yt=sparse(transIall,transJall,-transY,nodeNum,nodeNum); %这样处理是因为有两台变压器两端的节点号相同,避免在更新节点导纳矩阵时只识别一台变压器 transIJ=sub2ind(size(Yt),transIall,transJall); transYt=Yt(transIJ); transCtrl=mtrTrans(:,9); ctrTransNum=find(transCtrl); transI=transIall(ctrTransNum); transJ=transJall(ctrTransNum); transKmax=1/0.9*ones(size(transI)); transKmin=1/1.1*ones(size(transI)); transK0=transK0all(ctrTransNum); transG=real(transYt(ctrTransNum)); transB=imag(transYt(ctrTransNum)); transG1=-real(transY(ctrTransNum)); %之所以要取负号是因为transG、transB是作为导纳矩阵中的互导纳来用,在计算自导纳的时候注意要用-transG、-transB!!!! transB1=-imag(transY(ctrTransNum)); transNum=length(transI); lineI=[lineI;transI]; %将线路和变压器支路的编号合并,在后面线路约束的时候同时处理 lineJ=[lineJ;transJ]; lineNum=lineNum-length(transIall)+transNum; %% 求节点导纳的幅值和相角 [Yrows,Ycols,Y1] = find(Y1); G=real(Y1); B=imag(Y1); G=sparse(Yrows,Ycols,G,nodeNum,nodeNum); B=sparse(Yrows,Ycols,B,nodeNum,nodeNum);