首页 > 解决方案 > 线程未正确应用于定义的模块

问题描述

我有一个为函数生成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没有按预期运行。

标签: wolfram-mathematica

解决方案


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

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}

所做的是所有线程,而不调用 Module 评估参数的方式,一旦完成,然后将其交给 Module 完成。g在执行此操作之前,请确保您尚未定义。

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


推荐阅读