这段代码
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必须是二维的.
发布于 2019-07-20 11:16:57
你说得对,它还没有画出常数函数。引发ValueError的行应该更改为允许常量--如果存在常量,则在这里创建一个只填充该值的数组,而不是引发异常。你可以修复它,并向他们提交拉请求!
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)))

https://stackoverflow.com/questions/57122835
复制相似问题