开发者

repeat a function n times in Mathematica

I want to repeat a function n times on a table, For n=2 I have the following code, How can I be sure that the function had run twice since my fc is differend every time?

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]


This is probably what you want:

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 clears any previous definitions for those symbols (just in case). f[x_?Table] won't work; you want f[x_List], which means that the argument has a List head (Table is not a Head, and ? isn't what you want here).

I am not sure I have really answered your question though...

EDIT: To be clear, f[x_?something] means "apply something to x and, if it returns True, evaluate the right hand side of the := that follows. Look up PatternTest in Mathematica's documentation for more.


Acl covered the problems with the code pretty well, so I won't. To answer your question, though, I'd first separate your functions f and fc in separate cells, with fc being declared prior to f, and preface each cell with Clear[<function name>]. Now, to test if f is being applied twice, temporarily replace fc with

fc[_]:= a

or use another "dummy" value other than a, but it should be symbolic to increase readability. As a point of note, {1,2,3} + a == {1 + a, 2 + a, 3 + a}, so if f is applied twice, each term in x[[2]][[1]] and x[[2]][[2]] will have 2 a added to it.

Now, if you are unsure if fc is working correctly by itself, I'd apply it to a number separate cases without f, first.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜