#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. Отлично. Я также вижу описанную там табличную функцию, которая также хорошо бы подошла для моей проблемы. Спасибо, Леонид!