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,ghWhich原样定义F,它们都是向量值,因此迭代是有意义的F。我想要实现的是:给定初始值{0,0,x},不断迭代F直到F变成的第一个组件3。上面的代码中是否有任何错误,例如语法错误?

谢谢!

4

2 回答 2

3

您需要将SetDelayed( :=) 用于函数定义,例如:F[x_]:=x. 当您使用Set( =) likeF[x_]=x时,它​​本质上是相同的,F[_]=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 回答