pypso/YMatrix.py

33 lines
1.3 KiB
Python

__author__ = 'dmy'
import numpy
import scipy.sparse as sparse
import scipy.sparse
def FormYMatrix(lineBlock,transBlock,busNum):
r=lineBlock[:,3]
x=lineBlock[:,4]
gb=1/(r+1j*x)
y=sparse.coo_matrix((-gb,(lineBlock[:,1]-1,lineBlock[:,2]-1)),shape=(busNum,busNum))
y+=sparse.coo_matrix((-gb,(lineBlock[:,2]-1,lineBlock[:,1]-1)),shape=(busNum,busNum))
y-=sparse.coo_matrix((y.sum(1).A1,(numpy.arange(int(busNum)),numpy.arange(int(busNum)))),shape=(busNum,busNum))
#加接地支路
b2=lineBlock[:,5]
y+=sparse.coo_matrix((1j*b2,(lineBlock[:,1]-1,lineBlock[:,1]-1)),shape=(busNum,busNum))
y+=sparse.coo_matrix((1j*b2,(lineBlock[:,2]-1,lineBlock[:,2]-1)),shape=(busNum,busNum))
#加变压器
transR=transBlock[:,3]
transX=transBlock[:,4]
transGB=1/(transR+1j*transX)
k=transBlock[:,5]
y+=sparse.coo_matrix((-transGB/k,(transBlock[:,1]-1,transBlock[:,2]-1)),shape=(busNum,busNum))
y+=sparse.coo_matrix((-transGB/k,(transBlock[:,2]-1,transBlock[:,1]-1)),shape=(busNum,busNum))
#变压器对角
y+=sparse.coo_matrix((transGB/k/k,(transBlock[:,1]-1,transBlock[:,1]-1)),shape=(busNum,busNum))
y+=sparse.coo_matrix((transGB,(transBlock[:,2]-1,transBlock[:,2]-1)),shape=(busNum,busNum))
#TODO:没有电容接地支路
return y