线程未正确应用于定义的模块
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]]
现在,我想调用此函数以生成多项式列表。这对于一个单一的参数和 Map
在 Range
上运行良好。但是,在尝试 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
。
在依赖它之前,请仔细检查所有这些内容。
我有一个模块可以为函数生成第 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]]
我得到一个错误
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
。
在依赖它之前,请仔细检查所有这些内容。