精華區beta Mathematica 關於我們 聯絡資訊
※ 引述《huangcooly (弱小豪)》之銘言: : 通常我定義一個方程式時我都會用:= : 像是f[x_]:=x : 可是我今天想要用Do定義個許多方程式卻遇到了奇怪的點 : f"0"[x_]=1 : f"1"[x_]=x : Do[f"n"[x_]:=(2n-1)*f"n-1"[x]-(n-1)*f"n-2"[x],{n,2,20}] : f後""內為我f下標,打不出來以""表示 : 我這樣Do跑出來無法定義 : 不知道為什麼 : 我是將:=改為=之後就可以了 : 有高手可以幫我解釋一下嘛QQ 不能的原因同上篇推文 但即使改成 = 可以用也不是很建議的寫法,詳細原因是f"0" (""代表下標) 不是個最簡物件 (atom),所以 = (Set) 函數做了跟你想像中差很多的工作 即使得到正確的結果,過程中卻偷偷搞亂了一些東西。詳細就不多說了,總之 跟我說請你試試輸入 ?? Subscript 看看輸出長怎樣有關 推薦這樣寫 f[0][x_] := 1; f[1][x_] := x; f[n_][x_] := Expand[(2 n - 1) f[n - 1][x] - (n - 1) f[n - 2][x]] 於是 f[20][x] = -61569617941264712611136 + 157589477064007448732512 x ...都可以很快算出來 或者你想看遞回中間的結果就改寫成 f[0][x_] := 1; f[1][x_] := x; f[n_][x_] := f[n][x] = Expand[(2 n - 1) f[n - 1][x] - (n - 1) f[n - 2][x]] 這樣只要你輸入 ?? f 就會得到所有 f[n][x] 的值 Edit 當遞迴次數很小兩種寫法幾乎沒差,但若你要算的很不是 f[20][x] 而是 f[200][x] 時, 前一種作法根本跑不出來必須用後一種。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.88 ※ 編輯: jurian0101 來自: 140.112.213.88 (05/23 15:10)
huangcooly:真的!!!多謝指導 05/25 15:09
leo80042:推~ 05/26 01:58