【问题标题】:mathematica function of two parameters becomes listable by wrong parameter?两个参数的mathematica函数通过错误的参数变为可列出的?
【发布时间】:2011-10-06 13:33:00
【问题描述】:

我可以构造一个在一组值处评估的函数的值列表,如下面的 simplelist 所示

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 函数来完成,但是有了丰富的可用语法,肯定有更好的方法。

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

    关于 1. - 您的猜测不正确。真正发生的是Derivative 在第一个参数 (n) 是一个列表时有一个特殊的解释,因此Derivative[{1,2}][f][x] 将尝试区分一次f 的第一个参数(即x) ,并且是第二个的两倍(缺失!) - 正是这种差异化为零。此外,当f 也是Listable 并且是单个参数时,它变得有点复杂,但想法是一样的。

    关于2.:

    SetAttributes[d, Listable]
    

    会修复它。 Listable 属性有帮助的原因是与它关联的列表上的线程发生在 d 对特定参数进行评估之前,因此在这种方式下,您永远不会向 Derivative 提供列表,然后只调用分别在列表的所有成员上 - 这是您所需要的。

    【讨论】:

    • SetAttributes 工作得很好。有没有办法以比 {1, 2, 3, 4, 5} 更好的方式构建输入列表
    • @Peeter Range[5]。我还在这里讨论列表构建:mathprogramming-intro.org/book/node33.html
    • 优秀。我还看到那里描述的 Table 函数,它也可以很好地解决我的问题。谢谢列昂尼德!
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2021-04-19
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多