функция mathematica из двух параметров становится доступной для перечисления по неправильному параметру?

#wolfram-mathematica

#wolfram-mathematica

Вопрос:

Я могу создать список значений функции, оцениваемой по набору значений, как в 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}
  

как и ожидалось.

Если я создам функцию (d), которая неявно имеет два параметра, n и x, я думаю, что моя попытка оценить ее с помощью списка значений для [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 и функции добавления, но при наличии богатого синтаксиса должен быть лучший способ.

Ответ №1:

Что касается 1. — ваше предположение неверно. Что действительно происходит, так это то, что Derivative имеет особую интерпретацию, когда первый аргумент ( n ) является списком, так что Derivative[{1,2}][f][x] он попытается дифференцировать один раз по первому аргументу f (который есть x ) и дважды по второму (отсутствует!) — именно это дифференцирование дает ноль. Когда, кроме того, f есть также Listable и один аргумент, это становится немного сложнее, но идея та же.

Что касается 2.:

 SetAttributes[d, Listable]
  

исправит это. Причина Listable , по которой атрибут помогает, заключается в том, что обработка списка, связанного с ним, происходит до d того, как вычисляется по определенному аргументу, поэтому таким образом вы никогда не предоставляете список Derivative , который затем вызывается только для всех членов списка отдельно — что вам и было нужно.

Комментарии:

1. Этот SetAttributes работает хорошо. Есть ли способ создать список ввода лучше, чем что-то вроде {1, 2, 3, 4, 5}

2. @Диапазон Питера [5]. Я также обсуждаю построение списка здесь: mathprogramming-intro.org/book/node33.html

3. Отлично. Я также вижу описанную там табличную функцию, которая также хорошо бы подошла для моей проблемы. Спасибо, Леонид!