此代码
from sympy import symbols
from sympy.plotting import plot3d
x, y = symbols("x y")
f = lambda x, y: x * y
plot3d((f(x,y), (x, -3, 3), (y, -3, 3)))
g = lambda x, y: 2
plot3d((g(x,y), (x, -3, 3), (y, -3, 3)))
绘制第一个图形,但不绘制第二个错误
ValueError:参数Z必须为二维。
答案 0 :(得分:1)
是的,它还没有绘制常量函数。引发ValueError
的行应更改为允许常量-如果存在常量,请在此处创建一个仅填充该值的数组,而不引发Exception。您可以修复它并向他们提交请求请求!
if Z.ndim != 2:
raise ValueError("Argument Z must be 2-dimensional.")
# TODO: Support masked arrays
X, Y, Z = np.broadcast_arrays(X, Y, Z)
rows, cols = Z.shape
这是一种骇人听闻的解决方案,可能可以满足您的目的。我定义了一个非常小的增量,并使用了临时变量_x
和_y
的函数,因此它保持象征性。
我所做的另一项更改是使用函数而不是lambda表达式,因为您在代码中定义了它们。
此外,通过在同一f
调用中绘制g
和plot3d
,它将它们都绘制在相同的轴上。否则,它将只绘制第一个。
from sympy import symbols
from sympy.plotting import plot3d
import numpy as np
x, y = symbols("x y")
def f(_x, _y):
return np.multiply(_x, _y)
def g(_x, _y):
delta = 0.00000000000000001
return (_x - delta)/_x + (_y - delta)/_y
plot3d((f(x, y), (x, -3, 3), (y, -3, 3)), (g(x, y), (x, -3, 3), (y, -3, 3)))