You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy链式求导后使用subs/replace替换函数失效求助

解决SymPy中函数替换无效的问题

问题原因

你遇到的替换无效,是因为代码里f = f(x + g)这行执行后,变量f已经变成了函数应用表达式f(x+g),但你尝试替换的是这个变量本身,而SymPy求导结果里的f是原始的函数符号(不是你赋值后的变量),所以直接用subs或replace替换变量f根本匹配不到目标内容。

两种有效解决方法

方法1:提前替换函数符号,再定义复合函数

直接把函数符号f换成cos来定义复合表达式,避免后续替换的麻烦:

from sympy import Function, symbols, diff, cos
x, y = symbols('x y') 
g = symbols("g", cls=Function)
g = g(x)
# 直接用cos构造复合函数,跳过f的定义
f_expr = cos(x + g)
dfdx = diff(f_expr, x)
print(dfdx)

方法2:用模式匹配替换任意参数的f函数应用

如果需要保留原求导流程,之后再替换,可以用Wild匹配f的任意参数,替换为对应的cos表达式:

from sympy import Function, symbols, diff, cos, Wild
x, y = symbols('x y') 
f, g = symbols("f g", cls=Function)
g = g(x)
f = f(x + g)
dfdx = diff(f, x)
# 定义通配符匹配f的参数
arg = Wild('arg')
# 替换所有形式为f(arg)的表达式为cos(arg)
result = dfdx.replace(f(arg), cos(arg))
print(result)

验证结果

两种方法最终都会得到正确的求导替换结果:-sin(x + g(x))*(1 + Derivative(g(x), x))

内容的提问来源于stack exchange,提问作者Herman Jaramillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:35:08