82 lines
3.4 KiB
Matlab
82 lines
3.4 KiB
Matlab
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); |