我能够制作一个程序,显示一个2变量函数的3d图形,然后是函数梯度的向量场,但是我想让它计算梯度本身,但是我一直从plt.quiver()
中得到isinfinite
错误。我觉得部分原因是因为我来回使用了x和y的numpy和sympy符号,但我不知道在这种情况下该怎么办
def z_func(x,y):
return (x**2+y**2)
def show_graph():
x,y = np.meshgrid(np.linspace(-15,15,20),np.linspace(-15,15,20))
z = z_func(x,y)
fig = plt.figure(2)
ax = fig.gca( projection='3d')
surf = ax.plot_surface(x,y,z,rstride=1,cstride=1)
ax.set_xlabel('X', fontweight = 'bold', fontsize = 14)
ax.set_ylabel('Y', fontweight = 'bold', fontsize = 14)
ax.set_zlabel('Z', fontweight = 'bold', fontsize = 14)
plt.title('Ahem', fontweight = 'bold', fontsize = 16)
def get_grad():
x = sy.Symbol('x')
y= sy.Symbol('y')
f = z_func(x,y)
gradi = sy.diff(f,x)
gradj = sy.diff(f,y)
show_vector(gradi,gradj)
def show_vector(gradi,gradj):
a = sy.Symbol('x')
b = sy.Symbol('y')
u = gradi
v = gradj
print('[{0},{1}]'.format(u,v))
a,b = np.meshgrid(np.linspace(-10,10,10),np.linspace(-10,10,10))
print('[{0},{1}]'.format(u,v))
figv = plt.figure(1)
plt.xlabel('X')
plt.ylabel('Y')
plt.quiver(a,b,u,v)
def lazy():
get_grad()
show_graph()
plt.show()
lazy()
如果要在symphy之外使用symphy表达式,则需要^{}
以下代码是否符合您的预期
相关问题 更多 >
编程相关推荐