在Mathematica中重复一次函数n次

时间:2011-07-05 23:51:14

标签: wolfram-mathematica

我想在一个表上重复一次n次函数,对于n = 2,我有以下代码,我怎么能确定该函数已经运行了两次,因为我的fc每次都是差分?

smat = Table[{9, 8, 10}, {3}]

f[x_?Table] :=  ReplacePart[
 x, {{2, 1} -> x[[2]][[1]] - #, {2, 2} -> x[[2]][[2]] + #}] &@ fc[x[[2]][[1]]];

fc[k_?NumericQ] := Count[RandomReal[{0, 1}, k], x_ /; x < .1]

Nest[f, smat, 2]

2 个答案:

答案 0 :(得分:2)

这可能是你想要的:

smat = Table[{9, 8, 10}, {3}]
ClearAll[f, fc];

f[x_List] := 
 ReplacePart[
 x, {{2, 1} -> x[[2]][[1]] - #, {2, 2} -> x[[2]][[2]] + #}] &@
 fc[x[[2]][[1]]];

 fc[k_?NumericQ] := Count[RandomReal[{0, 1}, k], x_ /; x < .1]

Nest[f, smat, 2]

ClearAll清除这些符号的所有先前定义(以防万一)。 f[x_?Table]无效;你想要f[x_List],这意味着参数有一个List头(Table不是Head?不是你想要的) 。

我不确定我是否真的回答了你的问题......

编辑:要明确,f[x_?something]表示“将something应用于x,如果它返回True,则评估:=的右侧接下来。在Mathematica的文档中查找PatternTest以获取更多信息。

答案 1 :(得分:1)

Acl很好地解决了代码的问题,所以我不会。不过,为了回答您的问题,我首先将您的函数ffc分开放在单独的单元格中,fcf之前声明,并在每个单元格前面加上Clear[<function name>]。现在,要测试是否应用f两次,请暂时将fc替换为

fc[_]:= a

或使用除a之外的其他“虚拟”值,但它应该是象征性的以增加可读性。需要注意的是{1,2,3} + a == {1 + a, 2 + a, 3 + a},因此如果f被应用两次,则x[[2]][[1]]x[[2]][[2]]中的每个字词都会添加2 a

现在,如果您不确定fc本身是否正常工作,我会首先将其应用于没有f的多个单独案例。