我可以构建一组按一组值评估的函数值列表,如下面的简单列表
Clear[f, g, simplelist, d, dlist1, dlist2]
f[x_] := Exp[ -x^2]
g[n_] := f[x] (-1)^n
simplelist = g[{0, 1, 2, 3, 4}]
d[n_] := Derivative[n][f][x]
dlist1 = d[{0, 1, 2, 3, 4}]
dlist2 = {d[0], d[1], d[2], d[3], d[4]}
这给了我
{E^-x^2, -E^-x^2, E^-x^2, -E^-x^2, E^-x^2}
正如所料。
如果我构建了一个隐含有两个参数n和x的函数(d),我认为我尝试使用[n]的值列表来评估它,最终使用用于值的列表进行评估[ x],因为我得到结果的全零,好像是一个常量的导数:
{0, 0, 0, 0, 0}
将此与dlist2值进行比较,我明确表示,但使用笨拙的方法构建列表,并得到:
{E^-x^2, -2 E^-x^2 x, -2 E^-x^2 + 4 E^-x^2 x^2, 12 E^-x^2 x - 8 E^-x^2 x^3, 12 E^-x^2 - 48 E^-x^2 x^2 + 16 E^-x^2 x^4}
这个问题确实有两个部分:
1)有人可以确认这个函数最终使用[x]而不是[n]隐式列出,并且可能会详细说明它是如何工作的。
2)我怀疑我是以一种可能受到打击的方式接近这一点,所以虽然有可能强迫这样的东西做我想做的事情,但我真的只想要一个很好的方法来建立一个值列表
{ h[0], h[1], ... h[n] }
我认为这可以通过for循环和Append函数来完成,但是有了丰富的语法,必须有更好的方法。
答案 0 :(得分:2)
关于1. - 您的猜测不正确。真正发生的是Derivative
在第一个参数(n
)是一个列表时有一个特殊的解释,因此Derivative[{1,2}][f][x]
将尝试在{{1}的第一个参数上区分一次}(这是f
),两次超过第二次(丢失!) - 正是这种区别给出了零。此外,当x
也是f
和单个参数时,它变得有点复杂,但想法是一样的。
关于2:
Listable
会修复它。 SetAttributes[d, Listable]
属性有帮助的原因是,在对Listable
的特定参数进行评估之前,对与其关联的列表的线程发生了,因此,这样,您永远不会向d
提供列表,然后只分别在列表的所有成员上调用 - 这就是你需要的。