mathematica中的函数迭代

时间:2012-08-01 22:19:25

标签: wolfram-mathematica

我是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]]]

函数fghWhich定义为F,它们都是矢量值,因此它是有意义的迭代F。我想要实现的是:给定初始值{0,0,x},继续迭代F,直到F的第一个组成为3。有什么,例如语法,上面的代码有错吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要使用SetDelayed:=)进行功能定义,例如:F[x_]:=x。当您使用Set=)之类的F[x_]=x时,它与F[_]=x基本相同,因为定义在评估之前不会延迟,因此无法将左侧的匹配模式转移到右侧的评估中。

答案 1 :(得分:2)

正如jVincent所提到的,在定义F时我会使用:=代替=

我还会使用内置的NestWhile而不是手动迭代。

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

我无法评论如何更正所写的代码,因为我不完全确定在G中如何重新分配While