我是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
,g
和h
由Which
定义为F
,它们都是矢量值,因此它是有意义的迭代F
。我想要实现的是:给定初始值{0,0,x}
,继续迭代F
,直到F
的第一个组成为3
。有什么,例如语法,上面的代码有错吗?
谢谢!
答案 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
。