0

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

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

derive(5, 'x**2')

这会返回一个语法错误:

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

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

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

有用。我很感激这方面的任何帮助。

4

1 回答 1

1

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

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))

从那时起,您可以使用g类似于其他 numpy 的功能。这是一个更详细的示例:

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()

绘制导数

于 2021-09-27T14:03:18.913 回答