2011-07-05 21 views
3

テーブル上で関数をn回繰り返す場合、n = 2の場合次のコードがあります。毎回fcが異なるので関数が2回実行されたことを確認するにはどうすればよいですか? ?Mathematicaで関数をn回繰り返す

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

あなたの3D配列で、あなたの唯一変化する2つのベクトル、 'x [[2]] [[1]]と' x [[2]] [[2]] 'を読む方法。これはあなたの意図ですか? – rcollyer

+0

@rcollyerはいこれは私が欲しいものです。私の質問は、fcがランダムなので(乱数に応じて毎回違います)amd私の関数をn回1回実行すると同じ結果になる可能性があるので、私のコードがどのように動作するのかを確認する方法です。 – noni

答えて

1

Aclはかなりよく、コードの問題をカバーしたので、私はしません。しかし、私が最初にあなたの機能ffcを分離したい、あなたの質問に答えるために別の細胞、fcfの前に宣言され、各セルの先頭にClear[<function name>]が付いています。さて、fかどうかをテストするために一時的に

fc[_]:= a 

fcを交換したり、以外の別の「ダミー」値を使用し、2回適用されているが、読みやすさを高めるために象徴的でなければなりません。注記のポイントとして、{1,2,3} + a == {1 + a, 2 + a, 3 + a}のように、を2度適用すると、x[[2]][[1]]x[[2]][[2]]の各用語には2 aが追加されます。

fcが正しく動作しているかどうかわからない場合は、まずfを付けないで別のケースに適用します。

+0

ありがとうございました! – noni

+1

@ノーニ、単純な分裂と征服。セル構造はこれを他のプラットフォームと同じように可能にします。また、 'Clear'の目的は実験的に定義をリセットする方法を提供することです。 – rcollyer

+0

もう一度ありがとう!これは非常に役に立ちます!! – noni

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の頭(TableHeadではありません。?はここで必要なものではありません)。私は、私は本当にかかわらず、あなたの質問に答えていることを確認していない

...

EDITは:明確にするため、f[x_?something]は「xsomethingを適用すると、それがTrueを返した場合、:=の右辺を評価する意味しますそれは次の通りである。多くのためのMathematicaのドキュメントでPatternTestを検索します。

+0

ありがとうございます!これは私が探していたものです。なぜ私はそれが私が探していた答えとしてそれを受け入れることができないのか分からない。私は後でやり直します。もう一度おねがいします – noni

+0

@noniもう少し待ってください、誰かがより良いものを与えるでしょう! – acl

+0

:)ありがとう、ありがとうございました – noni

関連する問題