2012-08-01 78 views
0

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

正如jVincent提到的,我会用:=代替=,同时限定F.

我也将使用内置的NestWhile,而不是手动迭代。

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

我不能就如何正确的,因为写的,因为我不完全知道如何重新分配在While作品G代码相当评论。

+0

是的,NestWhile似乎在工作。谢谢您的帮助。 – 2012-08-01 23:11:31

3

对于函数定义,您需要使用SetDelayed:=):F[x_]:=x。当使用Set=)(如F[x_]=x)时,它基本上与F[_]=x相同,因为定义不会延迟到评估为止,因此无法将左侧的匹配模式转换为右手的评估侧。

+0

感谢您的评论。我一直认为“=”和“:=”是一回事。我曾经通过“f [x _] =”定义函数,然后评估“f [1]”,并且似乎总是给出期望值。 – 2012-08-01 23:08:20