对SymPy的Function对象执行diff求导返回1的原因是什么?
现象原因
sp.Function('f')返回的f属于未绑定参数的抽象未定函数构造器,并不是绑定了自变量的符号表达式,数学层面本来就不存在对这类抽象函数本身关于某个自变量求导的定义,你预期操作抛出报错是符合逻辑的。- 返回1是SymPy的实现缺陷导致的:
f所属的UndefinedFunction类型的diff方法没有对非法求导操作做校验,内部错误地将未绑定的抽象函数按照恒等映射函数处理,恒等函数的导数固定为1,所以得到了不符合预期的返回结果。 - 你之前正常调用的
f(t)是将抽象函数绑定到自变量t后生成的合法符号表达式,符合求导操作的语义要求,所以输出结果符合预期。
使用建议
实际开发中永远只对绑定了参数的函数应用实例(如f(t)、f(x, y)等形式)执行求导操作,不要直接对sp.Function生成的未绑定函数构造器本身调用求导方法,避免触发该类实现缺陷得到错误结果。
内容的提问来源于stack exchange,提问作者Pillsy
相关产品推荐
相关产品推荐

