0

私は Mathematica プログラミングの初心者です。コードが期待どおりに実行されません。誰かが何がうまくいかないのかを調べることができるのだろうか?これがコードの一部です。

F[{k_, n_, x_}] =
Which[k == 0, f[a, b, x],
k == 1, g[a, b, n, x],
k == 2, h[c, d, n, x]]

G[x_] = F[{0, 0, x}]

While[Extract[G[x], 1] != 3, G[x_] = F[G[x]]]

関数fとはas isで定義されてgおり、すべてベクトル値であるため、反復することが理にかなっています。私が達成したいのは、初期値が与えられた場合、の最初のコンポーネントが になるまで繰り返し続けることです。上記のコードに構文などの問題はありますか?hWhichFF{0,0,x}FF3

ありがとう!

4

2 に答える 2

3

次のような関数定義にはSetDelayed( )を使用する必要があります。のように( )を使用すると、定義が評価まで遅延されないため、本質的には と同じであり、左側の一致したパターンを右側の評価に転送する方法はありません。:=F[x_]:=xSet=F[x_]=xF[_]=x

于 2012-08-01T22:32:47.047 に答える
2

jVincent が述べたように、F を定義する:=代わりに使用します。=

NestWhileまた、手動で反復する代わりに組み込みを使用します。

NestWhile[F, {0, 0, x}, Function[e, Extract[e, 1] != 3]]

G再割り当てがどのように機能するのか完全にはわからないため、書かれたコードを修正する方法についてはコメントできませんWhile

于 2012-08-01T22:35:28.460 に答える