Поток не применяется правильно к определенному модулю - PullRequest
0 голосов
/ 17 октября 2019

У меня есть модуль, который генерирует n-й полином Тейлора для функции:

taylor[n_, a_] := 
 Module[{terms = {f[0]}}, 
  Do[AppendTo[
    terms, (D[f[x], {x, i}] /. x -> a)/Factorial[i]*(x - a)^i], {i, 1,
     n}]; Return[Plus @@ terms]]

Теперь я хочу вызвать эту функцию так, чтобы она генерировала список полиномов. Это работало нормально с единичным аргументом и Map с Range. Тем не менее, при попытке Thread модуль выглядит так:

Thread[taylor[Range[7], 0]]

Я получаю ошибку, что

Итератор {i, 1, {1,2,3,4, 5,6,7}} не имеет соответствующих границ.

т.е. n оценивается не так, как я думал, например:

{taylor[1,0], taylor[2,0], ...}

Я мог бы изменить реализацию модуля, но я не знаю, почему Thread ведет себя не так, как ожидалось.

1 Ответ

0 голосов
/ 17 октября 2019

Попробуйте и посмотрите, выполняет ли он то, что вы хотите

taylor[n_, a_] := Module[{terms = {f[0]}}, 
  Do[AppendTo[terms, (D[f[x], {x, i}] /. x -> a)/Factorial[i]*(x - a)^i], {i, 1,n}]; 
  Return[Plus @@ terms]]
Thread[g[{1,2,3},0]]/.g->taylor

, который возвращает

{f[0] + x*f'[0],
 f[0] + x*f'[0] + x^2*f''[0]/2,
 f[0] + x*f'[0] + x^2*f''[0]/2 + x^3*f'''[0]/6}

То, что делает, - это все потоки без вызова способа, которым модуль оценивает аргументы икак только это закончится, тогда передайте это модулю для завершения. Просто убедитесь, что вы не определили g, прежде чем сделать это.

Проверьте все это очень тщательно, прежде чем вы зависите от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...