function [G,B,lineI,lineJ,lineB,transI,transJ,transK0,transNum,transKmin,transKmax,capI,capGi,capBi,capK,capKmin,capKmax,capNum,transG,transB,... transG1,transB1,lineNum]=formY_RPP(nodeNum,lineNum,mtrLine,mtrGround,mtrTrans,mtrCapacitor) %程序功能:形成节点导纳矩阵 %编写时间:2010年10月 %变量定义: %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(:,2); groundG=mtrGround(:,3); groundB=mtrGround(:,4); %电容器参数 capCtrl=mtrCapacitor(:,2); capCtrl=ones(length(capCtrl),1); capIall=mtrCapacitor(:,3); capGiall=mtrCapacitor(:,4); capBiall=mtrCapacitor(:,5); capKall=mtrCapacitor(:,6); capKminall=mtrCapacitor(:,7); capKmaxall=mtrCapacitor(:,8); 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,groundG+j*groundB,nodeNum,nodeNum)... +sparse(capIall,capIall,j*capKall,nodeNum,nodeNum); %保留可调电容电抗器参数 capCtrlNode=find(capCtrl); capI=capIall(capCtrlNode); capGi=capGiall(capCtrlNode); capBi=capBiall(capCtrlNode); capK=capKall(capCtrlNode); capKmin=capKminall(capCtrlNode); capKmax=capKmaxall(capCtrlNode); capNum=length(capI); %% 加入变压器支路修改导纳矩阵 transCtrl=mtrTrans(:,2); transIall=mtrTrans(:,3); transJall=mtrTrans(:,4); transR=mtrTrans(:,5); transX=mtrTrans(:,6); transK0all=mtrTrans(:,7); 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); 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+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);