Mathematica代码:Abs的衍生物[x]

时间:2011-06-13 13:28:36

标签: wolfram-mathematica

关闭闭门器的注意事项:这是关于编程语言(Mathematica)的问题,而不是关于学科/科学(数学)的问题。

为什么

N[D[Sin[x], x] /. x -> Pi/4]
(*
Out -> 0.707107
*)

N[D[Abs[x], x] /. x -> Pi/4]
(*
Out -> Derivative[1][Abs][0.785398]
*)

强制数字结果的更好方法是什么?

3 个答案:

答案 0 :(得分:11)

Abs[z]不是holomorphic function,因此其衍生物在复杂平面(Mathematica使用的默认域)上没有明确定义。这与例如Sin[z]不同,后者的复数导数(即,与其论证有关)总是被定义。

更简单地说,Abs[z]取决于zz*,因此应该将其视为两个参数函数。 Sin[z]仅取决于z,因此只需一个参数即可。

正如Leonid所指出的那样,一旦你将域限制为实数,那么导数就会被很好地定义(除了可能在x=0,他们已经取得了左右的平均值衍生物)

In[1]:= FullSimplify[Abs'[x],x \[Element] Reals]
Out[1]= Sign[x]

正如Szabolcs所述(在评论中),FunctionExpand将简化数值表达式,但“FunctionExpand使用的某些转换只是一般有效”。

ComplexExpand也会给出数值结果,但我不相信它。似乎采用导数假设Abs在真实域中,然后在数字/复杂参数中替换。也就是说,如果你知道你所做的一切都是真的,那么ComplexExpand就是你的朋友。

答案 1 :(得分:8)

我建议您将this线程视为可能相关 - 此问题已在之前讨论过。为了总结我的答案,Abs通常用复数来定义。一旦你指定你的论证是真实的,它就有效:

 In[1]:= FullSimplify[Abs'[x], Assumptions -> {Element[x, Reals]}] 

 Out[1]= Sign[x] 

答案 2 :(得分:7)

即使您使用的是精确数量,也可以使用FunctionExpand强制获取数字:

Abs'[Pi/4] // FunctionExpand
Abs'[-1] // FunctionExpand

我不知道以下原因:

In:= Abs'[0] // FunctionExpand
Out= 0