Wolfram mathematica mathematica中的函数迭代

Wolfram mathematica mathematica中的函数迭代,wolfram-mathematica,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]]] 函数f、g和h由定义,它们都是向量值,因此迭代f是有意义的。我

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


谢谢

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

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

正如jVincent提到的,在定义F时,我将使用
:=
而不是
=

我还将使用内置的,而不是手动迭代

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

我不能完全评论如何按照编写的方式更正代码,因为我不完全确定在
中重新分配
G
时如何工作。

正如jVincent提到的,在定义F时,我将使用
:=
而不是
=

我还将使用内置的,而不是手动迭代

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

我无法就如何更正编写的代码发表评论,因为我不完全确定在
中重新分配
G
如何工作。

谢谢您的评论。我一直认为“=”和“:=”是一回事。我曾经用“f[x_3;]=”定义函数,然后计算“f[1]”,它似乎总是给出期望值。谢谢你的评论。我一直认为“=”和“:=”是一回事。我曾经用“f[x_3;]=”定义函数,然后计算“f[1]”,它似乎总是给出期望值。