首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sympy.plotting.plot3d不绘制常量函数

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

Stack Overflow用户
提问于 2019-07-20 07:57:24
回答 1查看 561关注 0票数 2

这段代码

代码语言:javascript
复制
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必须是二维的.

EN

回答 1

Stack Overflow用户

发布于 2019-07-20 11:16:57

你说得对,它还没有画出常数函数。引发ValueError的行应该更改为允许常量--如果存在常量,则在这里创建一个只填充该值的数组,而不是引发异常。你可以修复它,并向他们提交拉请求!

代码语言:javascript
复制
        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,可以将它们绘制在相同的轴上。否则它只会画出第一个。

代码语言:javascript
复制
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)))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57122835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档