一个跟二阶导、纯函数以及负号有关的让人目瞪口呆的bug
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
测试版本14.3,啥时候引入的不知道。
T = Function[{x}, Sin[-a x]];
tst = Function[{x}, T''[x]];
tst[1]
Block[{x = 1}, tst[x]]
2025年10月10日 14点10分 1
吧务
level 15
xzcyr 楼主
贴错图了,不过这里不管是Sin还是Exp都可以重现此bug。
将 T''[x] 改为 T'[x],bug不出现。
T的定义改为 T[x_] = Sin[-a x] (或者 T[x_] = Exp[-a x] , 随你喜欢),bug不出现。
负号去掉,bug不出现。
Block会导致问题说明有哪个地方的局部化出了问题,但具体哪里出了问题我一时也搞不清楚。
2025年10月10日 14点10分 2
哦还有,把 a 去掉,bug也不出现。
2025年10月11日 06点10分
吧务
level 10
估计是纯函数求导函数时使用System`Private`DerivativeX后还原为原符号名时,没有恰当考虑词法符号重命名的问题
2025年10月19日 16点10分 3
吧务
level 15
xzcyr 楼主
啊对,System`Private`DerivativeX 是可疑,忘了有没有在吧里说过了,我21年6月(版本12.3时代)的时候还发现过另一个bug:
u'[x] /. u -> Function[x, With[{t = x}, U[t]]]
u'[x] /. u -> Function[x, Evaluate@With[{t = x}, U[t]]]
(* 0 *)
客服回信中相关的部分:
As you can see by evaluating Trace[] or TracePrint[] of your first evaluation, internal System` variables used in the computation of Derivatives are being set during the attempted evaluation of the derivative of With[].
System`Private`DerivativeX[1] = System`Private`DerivativeX[2]
进一步实验后,发现
System`Private`DerivativeX // Clear
可以去除此污染,但是客服表示不推荐。
此 bug 至今未修。
2025年10月20日 02点10分 4
1