質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

File "G:\WMTX.py", line 252, in WMTX s.append(0) NameError: name 's' is not defined

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 274

score 16

コード
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

このエラーメッセージが出ます
助けていただきたいです
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

sという名前の変数が定義されてないというエラーです

#もしかして、S との間違い?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/11 14:34

    大文字のSでしょうか?
    初心者ですが、プログラムを作成していて
    右も左もわからない状態です。

    キャンセル

  • 2019/01/11 14:42

    大文字小文字は別と判断されるので、おそらくはS、SSだ、としかいえません。
    あなたのコードなんですから、動作上、何が適切かはあなたが判断しないとダメですね

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る