python sympy lambdify 在函数内部不工作

python sympy lambdify not working inside function

我正在尝试编写一个将文字函数作为参数的函数:

def derive(x, y):
    x = symbols(x)
    y = symbols(y)
    return lambdify(x, y)    

derive(5, 'x**2')

这个returns语法错误:

  File "<lambdifygenerated-32>", line 1
    def _lambdifygenerated(25.0):
                           ^
SyntaxError: invalid syntax

如果我写(函数范围外):

f = lambdify(x, x**2) f(5)

有效。 感谢您对此提供的任何帮助。

在 sympy 中,您可以通过 diff() 获得函数的导数。 .subs(x, 5)x 填写值 5。一个例子:

from sympy.abc import x

f = x**2
print(f.diff(x).subs(x,5))

这是计算给定函数在给定值下的导数的函数的样子。 evalf() 可用于消除符号部分(例如为 2*piSqrt(5) 提供数字近似值,sympy 标准希望以其确切的符号形式保留)。

def derive_and_evaluate(x, f, xval):
    return f.diff(x).subs(x, xval).evalf()

derive_and_evaluate(x, x**2, 5)

如果你需要对很多 x 值求同一个导数,你可以这样做:

from sympy import lambdify

g = lambdify(x, f.diff(x)) # now `g` is a numpy function with one parameter

或者,如果您想要一个进行推导并转换为 numpy 形式的函数:

def derive_and_lambdify(x, f):
    return lambdify(x, f.diff(x))

g = derive_and_lambdify(x, x**2)
print(g(5))

从此以后,你可以像使用其他numpy函数一样使用g。这是一个更详细的例子:

from sympy import lambdify, sin
from sympy.abc import x

f = sin(1 / (1 + x ** 2))
g = lambdify(x, f.diff(x))

import numpy as np
from matplotlib import pyplot as plt

xs = np.linspace(-5, 5, 100)
ys = g(xs)
plt.plot(xs, ys)
plt.show()