コード import math def WMTX (ndtl,lintl,ni,nj,d,e,yline,yii,rz,rw,su,sl,gu,gl, nqgst,npgst,nplst,pp,qq,wpl,wql,wpg,wqg,per,rp,rq, nqg,npg,bb,cc,nbqg,idqg,nbpg,idpg,ndsl,pl,nd_type): ### WMTX 修正方程式を作成するサブルーチン ### ### 修正方程式は対象行列であるため,このルーチンでは上三角のみを作成した後,### ### 下三角に上三角の値を対象行列となるように代入している。### ### 配列の初期化 ### ### W行列構成行列 ### diagW = [[0 for i in range(npg+nqg+4*ndtl+1)] for j in range(npg+nqg+4*ndtl+1)] Gvect = [[0 for i in range(1)] for j in range(npg+nqg+4*ndtl+1)] diagPG = [[0 for i in range(npg+1)] for j in range(npg+1)] gvctPG = [[0 for i in range(1)] for j in range(npg+1)] diagQG = [[0 for i in range(npg+1)] for j in range(nqg+1)] gvctQG = [[0 for i in range(1)] for j in range(nqg+1)] diagPF = [[0 for i in range(4*ndtl+1)] for j in range(4*ndtl+1)] gvctPF = [[0 for i in range(1)] for j in range(4*ndtl+1)] ### 有効潮流と無効潮流 ### p = [0]*(ndtl+1) q = [0]*(ndtl+1) ### diagPFの対角要素の構成要素 ### DLDD = [0]*(ndtl+1) DLDE = [0]*(ndtl+1) DLEE = [0]*(ndtl+1) DLD = [0]*(ndtl+1) DLE = [0]*(ndtl+1) dpl4 = [[0 for i in range(1)] for j in range(lintl*20+1)] #lintl print(dpl4) ### dpls4 = [[0 for i in range(1)] for j in range(lintl*6+1)] ### ### ☝ ### ### 増やすと配列増やせる ### for i in range(1,ndtl+1): for l in range(1,lintl+1): ii = ni[l] jj = nj[l] if ii>jj: jjtmp = jj jj = ii ii = jjtmp j = jj ### iとつながっているjで(i<j)のみ計算 ### if i == ii: di = d[i] ei = e[i] rpi = rp[i] rqi = rq[i] dj = d[j] ej = e[j] rpj = rp[j] rqj = rq[j] dij = di-dj eij = ei*ej Gij = yline[l].real Bij = yline[l].imag Gcos = Gij*math.cos(dij) Gsin = Gij*math.sin(dij) Bcos = Bij*math.cos(dij) Bsin = Bij*math.sin(dij) Pij = eij*( Gcos + Bsin) Pji = eij*( Gcos - Bsin) Qij = eij*( Gsin - Bcos) Qji = eij*(-Gsin - Bcos) ### 有効母線潮流と無効母線潮流の計算 ### p[i] = p[i] + Pij p[j] = p[j] + Pji q[i] = q[i] + Qij q[j] = q[j] + Qji ZPL = rz[nplst+l] WPL = rw[nplst+l] LPL = sl[nplst+l] UPL = su[nplst+l] PL = pl[l] PL_MAX = gu[nplst+l] PL_MIN = gl[nplst+l] ZWPL = ZPL + WPL SPL = WPL/UPL-ZPL/LPL SSPL = WPL/UPL*(PL + UPL -PL_MAX) -ZPL/LPL*(PL -LPL - PL_MIN)\ -per*(1/UPL-1/LPL) ### 有効線路潮流の1次微分と2次微分の値 ### ### i対i ### PLDiDi = -Pij PLDiEi = -Qij/ei PLEiEi = -2*Gij ### i対j ### PLDiDj = Pij PLDiEj = -Qij/ej PLEiDj = Qij/ei PLEiEj = Pij/eij ### j対j ### PLDjDj = -Pij PLDjEj = Qij/ej PLEjEj = 0 ### i ### PLDi = -Qij PLEi = Pij/ei - 2*Gij*ei ### j ### PLDj = Qij PLEj = Pij/ej ### 最大ステップ長を算出する際に必要となるため保存 ### dpl4[4*(l-1)+1][0] = PLDi dpl4[4*(l-1)+2][0] = PLEi dpl4[4*(l-1)+3][0] = PLEj dpl4[4*(l-1)+4][0] = PLEj ### diagPFの非対角成分に値を代入 ### ### 非対角のDi対Dj ### diagPF[4*(i-1)+1][4*(j-1)+1] = diagPF[4*(i-1)+1][4*(j-1)+1]\ +(rpi*Pij+rqi*Qij+rpj*Pji+rqj*Qji)\ +PLDi*SPL*PLDj+PLDiDj*ZWPL ### 非対角のDi対Ej ### diagPF[4*(i-1)+1][4*(j-1)+2] = diagPF[4*(i-1)+1][4*(j-1)+2]\ +(-rpi*Qij + rqi*Pij + rpj*Qji - rqj*Pji)/ej\ +PLDi*SPL*PLEj + PLDiEj*ZWPL ### 非対角のDi対RPj ### diagPF[4*(i-1)+1][4*(j-1)+3] = diagPF[4*(i-1)+1][4*(j-1)+3] + Qji ### 非対角のDi対RQj ### diagPF[4*(i-1)+1][4*(j-1)+4] = diagPF[4*(i-1)+1][4*(j-1)+4] - Pji ### 非対角のEi対Dj ### diagPF[4*(i-1)+2][4*(j-1)+1] = diagPF[4*(i-1)+2][4*(j-1)+1]\ +(rpi*Qij - rqi*Pij - rpj*Qji + rqj*Pji)/ei\ +PLEi*SPL*PLDj + PLEiDj*ZWPL ### 非対角のEi対Ej ### diagPF[4*(i-1)+2][4*(j-1)+2] = diagPF[4*(i-1)+2][4*(j-1)+2]\ +(rpi*Pij + rqi*Qij + rpj*Pji + rqj*Qji)/eij\ +PLEi*SPL*PLEj + PLEiEj*ZWPL ### 非対角のEi対RPj ### diagPF[4*(i-1)+2][4*(j-1)+3] = diagPF[4*(i-1)+2][4*(j-1)+3]+ Pji/ei ### 非対角のEi対RQj ### diagPF[4*(i-1)+2][4*(j-1)+4] = diagPF[4*(i-1)+2][4*(j-1)+4] + Qji/ei ### 非対角のRPi対Dj ### diagPF[4*(i-1)+3][4*(j-1)+1] = diagPF[4*(i-1)+3][4*(j-1)+1] + Qij ### 非対角のRPi対Ej ### diagPF[4*(i-1)+3][4*(j-1)+2] = diagPF[4*(i-1)+3][4*(j-1)+2] + Pij/ej ### 非対角のRPi対RPj ### diagPF[4*(i-1)+3][4*(j-1)+3] = diagPF[4*(i-1)+3][4*(j-1)+3] + 0 ### 非対角のRPi対RQj ### diagPF[4*(i-1)+3][4*(j-1)+4] = diagPF[4*(i-1)+3][4*(j-1)+4] + 0 ### 非対角のRQi対Dj ### diagPF[4*(i-1)+4][4*(j-1)+1] = diagPF[4*(i-1)+4][4*(j-1)+1] - Pij ### 非対角のRQi対Ej ### diagPF[4*(i-1)+4][4*(j-1)+2] = diagPF[4*(i-1)+4][4*(j-1)+2] + Qij/ej ### 非対角のRQi対RPj ### diagPF[4*(i-1)+4][4*(j-1)+3] = diagPF[4*(i-1)+4][4*(j-1)+3] + 0 ### 非対角のRQi対RQj ### diagPF[4*(i-1)+4][4*(j-1)+4] = diagPF[4*(i-1)+4][4*(j-1)+4] + 0 ##### diagPFの対角成分のための合算 ##### DLDD[i] = DLDD[i] + (-rpj*Pji - rqj*Qji)\ +PLDi*SPL*PLDi + ZWPL*PLDiDi DLDE[i] = DLDE[i] +( rpj*Qji - rqj*Pji)/ei\ +PLDi*SPL*PLEi + ZWPL*PLDiEi DLEE[i] = DLEE[i] + PLEi*SPL*PLEi + ZWPL*PLEiEi DLDD[j] = DLDD[j] +(-rpi*Pij - rqi*Qij)\ +PLDj*SPL*PLDj + ZWPL*PLDjDj DLDE[j] = DLDE[j] +( rpi*Qij - rqi*Pij)/ej\ +PLDj*SPL*PLEj + ZWPL*PLDjEj DLEE[j] = DLEE[j] + PLEj*SPL*PLEj + ZWPL*PLEjEj DLD[i] = DLD[i] + rpj*Qji - rqj*Pji + SSPL*PLDi DLE[i] = DLE[i] + (rpj*Pji + rqj*Qji)/ei + SSPL*PLEi DLD[j] = DLD[j] + rpi*Qij - rqi*Pij + SSPL*PLDj DLE[j] = DLE[j] + (rpi*Pij + rqi*Qij)/ej + SSPL*PLEj ### diagPFの対角成分を作成 ### for i in range(1,ndtl+1): ei = e[i] rpi = rp[i] rqi = rq[i] Pii = p[i] Qii = q[i] e_flag = round(nd_type[i]/100) if e_flag == 1: S = [] SS = [] s.append(0) ss.append(0) else: Z = rz[i] W = rw[i] L = sl[i] U = su[i] E_MIN = gl[i] E_MAX = gu[i] S = W/U-Z/L SS = W/U*(e[i] + U -E_MAX) - Z/L*(e[i] -L -E_MIN) -per*(1/U-1/L) Gii = yii[i].real Bii = yii[i].imag if i in range(idpg[i] == 0): q[i] = q[i] - Bii*ei*ei + wql[i] - wqg[i] else: q[i] = q[i] - Bii*ei*ei + wql[i] - qq(idqg[i]) if i in range(idpg[i] == 0): p[i] = p[i] + Gii*ei*ei + wpl[i] - wpg[i] else: p[i] = p[i] + Gii*ei*ei + wpl[i] - pp(idpg[i]) diagPF[4*(i-1)+1][4*(i-1)+1] = DLDD[i] - rpi*Pii-rqi*Qii diagPF[4*(i-1)+1][4*(i-1)+2] = DLDE[i] +(-rpi*Qii+rqi*Pii)/ei diagPF[4*(i-1)+1][4*(i-1)+3] = -Qii diagPF[4*(i-1)+1][4*(i-1)+4] = Pii diagPF[4*(i-1)+2][4*(i-1)+2] = DLEE[i] + 2*(rpi*Gii - rqi*Bii)+S diagPF[4*(i-1)+2][4*(i-1)+3] = Pii/ei+2*Gii*ei diagPF[4*(i-1)+2][4*(i-1)+4] = Qii/ei-2*Bii*ei return ''' **ボールドテキスト** File "G:\WMTX.py", line 252, in WMTX s.append(0) NameError: name 's' is not defined このエラーメッセージが出ます 助けていただきたいです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/11 05:34
2019/01/11 05:42