ncp_sigmoid/NCP函数法/formY_RPP.m

75 lines
3.1 KiB
Matlab
Raw 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 [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年11月
%变量定义:
%% 利用线路和接地支路参数形成导纳矩阵
%线路参数
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);