snowJR 发表于 2020-8-8 17:51:09

求助

老铁们,写了一个画图的程序,老是提示我 'Y' is not defined,能帮我看看是哪一步做错了吗?
#引入第三方库
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

#建立三维数据
θ=np.arange(0,np.pi,0.1)
φ=np.arange(0,2*np.pi,0.1)
θ,φ = np.meshgrid(θ,φ)

#球函数字典
dic1={
        0:np.sin(φ),
        1:(np.cos(θ))*(np.sin(φ)),
        2:((3*(np.cos(2*θ))+1)/4)*(np.sin(φ))
        }
dic2={
        1:(np.cos(θ))*(np.sin(φ)),
        2:3*(np.sin(θ))*(np.cos(θ))*(np.sin(φ)),
        4:3*(np.sin(θ))*(np.sin(θ))*(np.sin(φ))
        }

#定义三维坐标轴
fig=plt.figure()
ax=Axes3D(fig)

def main():
      l=input('请输入阶数l:')
      m=input('请输入m:')
      x = int(l)
      y = int(m)
      t=x*y
      Y= sp_main(t)


#球函数的阶数
def sp_main(t):
        if t==0:
                Y=dic1.get(t)
                Y= np.maximum(Y, 0)
               
        else:
                Y=dic2.get(t)
                Y= np.maximum(Y, 0)
        return Y       




#作图
plt.rcParams['font.sans-serif']=['SimHei']
ax.set_xlabel('仰角θ')
ax.set_ylabel('方位角φ')
ax.set_zlabel('球函数Y')

ax.set_xlim(0,np.pi)
ax.set_ylim(0,2*np.pi)
ax.set_zlim(0,1)
ax.plot_surface(θ, φ, Y)

plt.show()

if __name__ == "__main__":
    main()

sunrise085 发表于 2020-8-8 17:53:54

ax.plot_surface(θ, φ, Y)
这一行的Y的确没有被定义过

在球函数的阶数中出现过 Y,但是那是局部变量。
此外就没有见过Y的定义了

永恒的蓝色梦想 发表于 2020-8-8 18:00:03

#引入第三方库
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

#建立三维数据
θ=np.arange(0,np.pi,0.1)
φ=np.arange(0,2*np.pi,0.1)
θ,φ = np.meshgrid(θ,φ)


#球函数字典
dic1={
    0:np.sin(φ),
    1:(np.cos(θ))*(np.sin(φ)),
    2:((3*(np.cos(2*θ))+1)/4)*(np.sin(φ))
}


dic2={
    1:(np.cos(θ))*(np.sin(φ)),
    2:3*(np.sin(θ))*(np.cos(θ))*(np.sin(φ)),
    4:3*(np.sin(θ))*(np.sin(θ))*(np.sin(φ))
}


#定义三维坐标轴
fig=plt.figure()
ax=Axes3D(fig)


#球函数的阶数
def sp_main(t):
    if t==0:
      Y=dic1.get(t)
      Y= np.maximum(Y, 0)
         
    else:
      Y=dic2.get(t)
      Y= np.maximum(Y, 0)
    return Y      



def main():
    l=input('请输入阶数l:')
    m=input('请输入m:')
    x = int(l)
    y = int(m)
    t=x*y
    Y= sp_main(t)
    #作图
    plt.rcParams['font.sans-serif']=['SimHei']
    ax.set_xlabel('仰角θ')
    ax.set_ylabel('方位角φ')
    ax.set_zlabel('球函数Y')

    ax.set_xlim(0,np.pi)
    ax.set_ylim(0,2*np.pi)
    ax.set_zlim(0,1)
    ax.plot_surface(θ, φ, Y)

    plt.show()

if __name__ == "__main__":
    main()

snowJR 发表于 2020-8-8 18:19:27

永恒的蓝色梦想 发表于 2020-8-8 18:00


这个为什么没有图像出来?

永恒的蓝色梦想 发表于 2020-8-8 18:27:45

snowJR 发表于 2020-8-8 18:19
这个为什么没有图像出来?

你写的代码,问我咯?
页: [1]
查看完整版本: 求助