python - 使用 sympy 获取函数的导数(用于以后的评估和替换)
问题描述
我想尽可能长时间地使用泛型函数,最后只替换函数。我想将一个函数定义为另一个函数的导数,用该函数及其导数定义一个通用表达式,并在最后替换该函数。现在我的尝试如下,但我得到了错误'Derivative' object is not callable
:
from sympy import Function
x, y, z = symbols('x y z')
f = Function('f')
df = f(x).diff(x) # <<< I'd like this to be a function of dummy variable x
expr = f(x) * df(z) + df(y) + df(0) # df is unfortunately not callable
# At the end, substitute with example function
expr.replace(f, Lambda(X, cos(X))) # should return: -cos(x)*sin(z) - sin(y) - sin(0)
我想我可以按如下方式使用积分:
I= Lambda( x, integrate( f(y), (y, 0, x)))
但这不适用于导数。如果这有帮助,我现在可以限制自己使用单个变量的函数。
作为奖励,我想让它与原始函数的任何组合(产品、导数、积分)一起使用。
解决方案
f.diff(x)
正如你所说,这很令人失望。也许有人会在将来的某个时候创建支持它。同时,有两种方法可以解决这个问题:或者替换x
你的y, z, ...
OR lambdify df
。
我认为从长远来看,第一个选项会更加一致(例如,如果您决定扩展到多元微积分)。但是expr
第二种选择要自然得多。
使用替换:
from sympy import *
x, y, z = symbols('x y z')
X = Symbol('X')
f = Function('f')
df = f(x).diff(x)
expr = f(x) * df.subs(x, z) + df.subs(x, y) + df.subs(x, 0)
print(expr.replace(f, Lambda(X, cos(X))).doit())
羔羊化df
:
from sympy import *
x, y, z = symbols('x y z')
X = Symbol('X')
f = Function('f')
df = lambda t: f(t).diff(t) if isinstance(t, Symbol) else f(X).diff(X).subs(X, t)
expr = f(x) * df(z) + df(y) + df(0)
print(expr.replace(f, Lambda(X, cos(X))).doit())
两者都提供所需的输出。
推荐阅读
- python - 在 Jupyter 笔记本中打开超链接
- sql - 返回特定列具有重复值的行
- javascript - 找不到脚本函数
- sql - 如何在 rdlc 报告表达式中更改时间格式 hh:mm
- angular - 我怎样才能用 Ionic 做一个计时器?
- c# - 在应用程序配置文件中找不到名为“AutomateDBEntities”的连接字符串
- android - 如何获取来电的 sim id(默认拨号器)
- javascript - 开玩笑说排序不是一个函数,即使正在设置测试数组
- google-location-services - Google 外卖位置历史 JSON 文件中距离参数的单位是什么?
- html - 如何获取具有特定后续兄弟元素的元素?