线程未正确应用于定义的模块

Thread not applying properly to defined Module

我有一个模块可以为函数生成第 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]]

现在,我想调用此函数以生成多项式列表。这对于一个单一的参数和 MapRange 上运行良好。但是,在尝试 Thread 模块时,像这样:

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

我得到一个错误

Iterator {i,1,{1,2,3,4,5,6,7}} does not have appropriate bounds.

n 没有像我想象的那样被评估,比如:

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

我可以更改模块的实现,但我不知道为什么 Thread 没有按预期运行。

试试这个,看看它是否符合您的要求

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

哪个returns

{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

在依赖它之前,请仔细检查所有这些内容。