ncp_sigmoid/NCP函数法/formY.m

60 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,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--接地支路电抗
%transItransJ--变压器支路节点序号
%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);