首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SymPy将符号表达式转换为Python函数

使用SymPy将符号表达式转换为Python函数
EN

Stack Overflow用户
提问于 2015-12-10 06:53:04
回答 1查看 7.9K关注 0票数 7

我有一个相当大的符号函数,用于计算循环中参数的不同值。在每次迭代中,求出函数的表达式后,导出偏导数。就像这样:

代码语言:javascript
复制
from sympy import diff, symbols,exp

def lagrange_eqs(a):
    x,y,z= symbols('x y z')
    FUNC=x**2-2*x*y**2+z+a*exp(z)
    d_lgrng_1=diff(FUNC,x)
    d_lgrng_2=diff(FUNC,y)
    d_lgrng_3=diff(FUNC,z)
    return [d_lgrng_1,d_lgrng_2,d_lgrng_3]

接下来,我需要将这个函数的输出转换为Python函数,这样我就可以使用fsolve找到导数为零的x,y,z值。函数必须以x,y,z作为列表。

下面是我的问题:如何将上述函数的输出转换为Python函数,该函数可以传递给求解器。这样的函数应该如下所示(对于a=3):

代码语言:javascript
复制
def lagrange_eqs_solve(X): 
    x,y,z=X
    return [2*x - 2*y**2, -4*x*y, 3*exp(z) + 1]

我只是复制了第一个函数的输出来构建第二个函数。我有办法对它进行编码吗?(Matlab有一个内置函数,称为matlabFunction)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 17:09:23

你想要lambdify

代码语言:javascript
复制
f = lambdify(((x, y, z),), lagrange_eqs(a))

将为您提供一个Python函数f,您可以像f((1, 2, 3))那样计算它(用于x=1y=2z=3)。我以元组的形式提出了这些论点,这样它就可以与fsolve一起工作了。

您可以将modules标志设置为lambdify,以确定exp函数的来源。例如,要使用numpy,请使用lambdify((x, y, z), lagrange_eqs(a), modules="numpy")。若要使用标准库数学库,请使用modules="math"。默认情况下,如果安装了numpy,则使用numpy,否则使用数学。

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

https://stackoverflow.com/questions/34195502

复制
相关文章

相似问题

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