【问题标题】:How to convert sympy expression which include integral and derivative to numpy如何将包含积分和导数的 sympy 表达式转换为 numpy
【发布时间】:2020-11-29 22:40:57
【问题描述】:

将sympy表达式转换为numpy可能是正常的,但是我的方程在sympy的输出上有积分,推导。我尝试了lambdify,但它给了我“名称'Integral'未定义”现在,我被卡住了,任何帮助将不胜感激。

    

def plpwfun(w,b):
    plpw=-pi**2*(-w*exp(b + w)/(exp(b + w) + 1)**2 + (2*b + w)*exp(b + w)/(exp(b + w) + 1) - log(exp(b) + 1) + log(exp(b + w) + 1) + 1/(exp(b + w) + 1) - 1/(exp(b) + 1)) + 0.5*Integral(2*((-re(w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2) + re(w**2*exp(b + w*x)/(exp(b + w*x) + 1)))*(-Derivative(re(w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2), w) + Derivative(re(w**2*exp(b + w*x)/(exp(b + w*x) + 1)), w)) + (-im(w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2) + im(w**2*exp(b + w*x)/(exp(b + w*x) + 1)))*(-Derivative(im(w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2), w) + Derivative(im(w**2*exp(b + w*x)/(exp(b + w*x) + 1)), w)))*Abs(w**2*exp(b + w*x)/(exp(b + w*x) + 1) - w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2)*sign(w**2*exp(b + w*x)/(exp(b + w*x) + 1) - w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2)/(w**2*exp(b + w*x)/(exp(b + w*x) + 1) - w**2*exp(2*b + 2*w*x)/(exp(b + w*x) + 1)**2), (x, 0, 1))
    return plpw

print(plpwfun(0,0))

我使用 sympy 输出作为我的梯度函数 (plpw,pwpb),但我无法将它们转换为 numpy 并进行计算。有什么办法可以解决吗?

【问题讨论】:

    标签: numpy sympy


    【解决方案1】:

    你可以试试新发布的 sympy 1.7 吗?

    pip install sympy --upgrade
    

    运行确认

    import sympy
    print(sympy.__version__)
    

    其中包括一项更改以支持 Integral 与 lambdify:https://github.com/sympy/sympy/pull/20134

    您可能还想安装 scipy(因此lambdify 生成的函数将使用 scipy 的 quadnquad 否则将需要 mpmath 来运行生成的函数作为后备)。

    例如这将在 1.7 中工作

    from sympy import *
    x,y = symbols("x y")
    i = Integral(x, (x, 0, y))
    f = lambdify([y], i)
    print(f(3))  # 4.5
    

    如果这不起作用,您是否可以编辑您的问题以使用您尝试的实际 sympy Integral lambdify 显示自包含代码?

    【讨论】:

    • 如果您尝试 lambdify 的 sympy 表达式包含 unevauated Derivative 实例,您仍然会遇到问题。
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多