sympy.plotting.plot3d不绘制常量函数

时间:2019-07-20 07:57:24

标签: python matplotlib sympy

此代码

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必须为二维。

1 个答案:

答案 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调用中绘制gplot3d,它将它们都绘制在相同的轴上。否则,它将只绘制第一个。

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)))

This is the output of the approximate solution