因为Plot有HoldAll属性,把D[x/Sqrt[100 + x^2], x]直接放进Plot,它会先把x的具体数值代到这个表达式里再计算表达式,结果自然出错。要突破Plot属性,可以用Evaluate强制计算:
Plot[D[x/Sqrt[100 + x^2], x] // Evaluate, {x, 0, 20}]
或者用文档里没有的选项Evaluated:
Plot[D[x/Sqrt[100 + x^2], x], {x, 0, 20}, Evaluated -> True]
至于
Plot[D[Sqrt[x^2 + 100]], {x, 0, 20}]
这是因为D[expr]返回的是expr,所以在这个例子里HoldAll没有对计算结果造成影响……话说我是今天才知道D原来也有个单变量的语法,或许我得感谢诸位新手的开拓精神,让我见识了这么多文档里没写的语法?