Re: [問題] 請教有關遞迴式

看板Mathematica作者 (養花種魚數月亮賞星星)時間13年前 (2011/11/16 00:02), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《sphwny (時間過的真快>"<)》之銘言: : 不好意思又來問問題了 : 目前小弟寫到定義分段函數 : 然後使用遞迴的方式把剩下的函數定義完 : 舉例如下: : H[-1,x1_,x2_,x3_,n_] :=E^(-x1*x3)*(n!/x2^n)*Sqrt[1/(2*x2)] : 然後 : H[0,x1_,x2_,x3_,n_]:= : x3/(2*n)*H[-1,x1,x2,x3,n+1]-x1/(2*n)*H[-1,x1,x2,x3,n] /; x2==0.5*x3^2 : H[0,x1_,x2_,x3_,n_]:= : n!*(0.5*x1*H[-1,x1,x2,x3,n-1]-0.5*x3*H[-1,x1,x2,x3,n]) /; x2!=0.5*x3^2 ; x1>0 : H[0,x1_,x2_,x3_,n_]:= : 0.5*x1*H[-1,x1,x2,x3,n-1]-0.5x3*H[-1,x1,x2,x3,n] /; x2!=0.5*x3^2 ; x1<0 : H[0,x1_,x2_,x3_,n_]:= : 0.5*x3*H[-1,x1,x2,x3,n] /; x2!=0.5*x3^2; x1==0 : Table[H[i,x1_,x2_,x3_,n_]:= (1/i)*H[i-2,x1,x2,x3,n+1]- : (x3/i)*H[i-1,x1,x2,x3,n+1]-(x1/i)*H[i-1,x1,x2,x3,n], {i,12}]; : 最後再把這些函數做些計算處理的時候 : 出現了遞迴次數超過256次之類的訊息以及後面伴隨很多錯誤訊息 : 當中似乎出現了什麼問題 : 是我的定義語法錯誤了嗎? : 還是有其他的方法來定義這樣子的遞迴函數? : 麻煩各位大師替我解惑!! 謝謝!! 上面的函數可以改用Which試試看!至於遞迴次數可以利用$RecursionLimit=?? 來設定 上面的函數因為都是利用SetDelayed來定義,所以每次都必須重新計算, 因此當i大的時候會非常耗時,可以試著用動態定義來改善 H[-1,x1_,x2_,x3_,n_]=E^(-x1*x3)*(n!/x2^n)*Sqrt[1/(2*x2)] H[0,x1_,x2_,x3_,n_]:=Which[ x2==0.5*x3^2, x3/(2*n)*H[-1,x1,x2,x3,n+1]-x1/(2*n)*H[-1,x1,x2,x3,n], x2!=0.5*x3^2&&x1>0, n!*(0.5*x1*H[-1,x1,x2,x3,n-1]-0.5*x3*H[-1,x1,x2,x3,n]), x2!=0.5*x3^2&&x1<0, 0.5*x1*H[-1,x1,x2,x3,n-1]-0.5x3*H[-1,x1,x2,x3,n], x2!=0.5*x3^2&&x1==0, 0.5*x3*H[-1,x1,x2,x3,n] ] H[i_,x1_,x2_,x3_,n_]:=H[i,x1,x2,x3,n]=(1/i)*H[i-2,x1,x2,x3,n+1]-(x3/i)* H[i-1,x1,x2,x3,n+1]-(x1/i)*H[i-1,x1,x2,x3,n] 利用相同的原理,可以利用Fibonacci number的函數來做實驗 f1[0] = 0; f1[1] = 1; f2[0] = 0; f2[1] = 1; f1[x_Integer] := f1[x - 1] + f1[x - 2] f2[x_Integer] := f2[x] = f2[x - 1] + f2[x - 2] AbsoluteTiming@f1[30] AbsoluteTiming@f2[30] f1沒利用動態定義,f2則是利用動態定義來定義函數。 -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.136.123 ※ 編輯: chungyuandye 來自: 218.173.136.123 (11/16 00:04) ※ 編輯: chungyuandye 來自: 218.173.136.123 (11/16 00:10)

11/16 00:17, , 1F
謝謝解答!! 但是請問我最後算出來的結果只跑出像是
11/16 00:17, 1F

11/16 00:18, , 2F
11.25 H[1,0.5,3.81815,10.5,2]之類的並沒有他的值
11/16 00:18, 2F

11/16 00:19, , 3F
當中是哪裡有出現問題嗎? 還是我後面的計算寫錯了?
11/16 00:19, 3F

11/16 11:30, , 4F
我找到我寫的錯誤了 謝謝解答!! 真是感激不盡!!
11/16 11:30, 4F
文章代碼(AID): #1Emeq4Ov (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1Emeq4Ov (Mathematica)