我想在一个表上重复一次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]
答案 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很好地解决了代码的问题,所以我不会。不过,为了回答您的问题,我首先将您的函数f
和fc
分开放在单独的单元格中,fc
在f
之前声明,并在每个单元格前面加上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
的多个单独案例。