0
def partial(f,h=0.0001):
    #checker
    x=y=z=1
    fx=(f(x+h,y,z)-f(x,y,z))/h
    fy=(f(x,y+h,z)-f(x,y,z))/h
    fz=(f(x,y,z+h)-f(x,y,z))/h
    if(fx==0):
        p=0
    elif(fy==0):
        q=0
    elif(fz==0):
        r=0
    fx=fy=fz=0
    a=15
    c=5
    for m in range (-a,a,c):
        for n in range (-a,a,c):
            for o in range (-a,a,c):
                x=m
                y=n
                z=o
                if(p==0):
                    x=0
                elif(q==0):
                    y=0
                elif(r==0):
                    z=0
                fx=(f(x+h,y,z)-f(x,y,z))/h
                fy=(f(x,y+h,z)-f(x,y,z))/h
                fz=(f(x,y,z+h)-f(x,y,z))/h
                arrow(pos=vector(m,n,o),axis=vector(+fx,+fy,+fz),color=color.red)
                print z
    print fx,fy,fz
    return 0

どこが間違っていますか?p以前に宣言しましたが、p代入前に参照されていると書かれています。

4

1 に答える 1

0

if/elif ステートメントの for ループで、、、およびをp使用qする可能性があります。rつまり、これらを定義する必要があります。そうしないと、「UnboundLocalError: ローカル変数 '_' が割り当て前に参照されました」というエラーが発生するリスクがあります。ただし、関数を呼び出すときは、これらのうちの 1 つだけを定義fxfyますfz

最も簡単な解決策は、次の行を追加することです。

p = q = r = -1

if ステートメントの上で、そのうちの 1 つを 0 に設定します (6 行目あたり)。

これで、それらはすべて定義され、どれが 0 に設定されても、for ループ内でそれらを参照できます。

于 2015-04-26T18:33:35.880 に答える