2012-08-01 259 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