Sympy Lambdify 在 mayavi 中获取 2d 方程的 3d 图
Sympy Lambdify get 3d plot for 2d equation in mayavi
str_exp="x+y"
expr = sympify((str_expr))
X,Y,Z=np.ogrid[x_start:x_end:no_x_points , y_start:y_end:no_y_points , z_start:z_end:no_z_points]
f = lambdify((x,y,z), expr)
foo=f(X,Y,Z)
尽管 expr
是 x
和 y
的函数,但我希望 foo
生成 3d 数据,因为 z 也在变化。当我尝试使用 mayavi 绘制 foo
时,绘制的是一条直线而不是一个平面。
我确信这是 sympy 的 lamdify
的结果,因为 foo
的维度是 (100,100,1)
而 expr
是 x+y
我想问题是 expr
将只有 2 个变量,因此您无法获得所需的 3d 数组。
因此,sympy 的 sympify 函数不会简化表达式(或给定的字符串)。因此,如果您没有 'z'
项,则可以将 "(z+1)**2 - z*z - 2*z - 1"
(或一些简单的表达式,使 z 项不会抵消)添加到 str_exp
中。
所以这种方式 sympify 会 return 你一个带 z 的表达式。
>>str_expr="x+y+(z+1)**2 - z*z - 2*z - 1"
>>sympify((str_expr))
x + y - z**2 - 2*z + (z + 1)**2 - 1
str_exp="x+y"
expr = sympify((str_expr))
X,Y,Z=np.ogrid[x_start:x_end:no_x_points , y_start:y_end:no_y_points , z_start:z_end:no_z_points]
f = lambdify((x,y,z), expr)
foo=f(X,Y,Z)
尽管 expr
是 x
和 y
的函数,但我希望 foo
生成 3d 数据,因为 z 也在变化。当我尝试使用 mayavi 绘制 foo
时,绘制的是一条直线而不是一个平面。
我确信这是 sympy 的 lamdify
的结果,因为 foo
的维度是 (100,100,1)
而 expr
是 x+y
我想问题是 expr
将只有 2 个变量,因此您无法获得所需的 3d 数组。
因此,sympy 的 sympify 函数不会简化表达式(或给定的字符串)。因此,如果您没有 'z'
项,则可以将 "(z+1)**2 - z*z - 2*z - 1"
(或一些简单的表达式,使 z 项不会抵消)添加到 str_exp
中。
所以这种方式 sympify 会 return 你一个带 z 的表达式。
>>str_expr="x+y+(z+1)**2 - z*z - 2*z - 1"
>>sympify((str_expr))
x + y - z**2 - 2*z + (z + 1)**2 - 1